Added a man page - iomenu - interactive terminal-based selection menu
 (HTM) git clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 04f14a2a3fbe38525721285139ebf8af4350876f
 (DIR) parent 2c6e76a07ce8fd008e28001c8ab4afcb6acd2b6e
 (HTM) Author: Josuah Demangeon⠠⠵ <mail@josuah.net>
       Date:   Sun, 19 Mar 2017 22:29:08 +0100
       
       Added a man page
       
       Diffstat:
         M Makefile                            |       2 +-
         M README                              |     108 ++++++++++++++-----------------
         A iomenu.1                            |     128 +++++++++++++++++++++++++++++++
         M iomenu.c                            |      10 ++--------
       
       4 files changed, 180 insertions(+), 68 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -8,5 +8,5 @@ clean:
        
        install: iomenu
                mkdir -p  $(PREFIX)/bin $(PREFIX)/man/man1
       -        # cp *.1 $(PREFIX)/man/man1/
       +        cp *.1 $(PREFIX)/man/man1/
                cp iomenu $(PREFIX)/bin/
 (DIR) diff --git a/README b/README
       @@ -1,90 +1,80 @@
       -iomenu - Filter lines from stdin with an interactive menu
       +IOMENU(1)                   General Commands Manual                  IOMENU(1)
        
       - .  _  __   _  __
       - | (_) ||| (/_ | | |_|
       +NAME
       +     iomenu – interactive selection menu
        
       -________________________________________________________________________________
       +SYNOPSIS
       +     iomenu [-l lines]
        
       -        iomenu is a terminal tool to interactively select lines from stdin, and
       -        print them out to the standard output.
       +DESCRIPTION
       +     iomenu is an interactive filtering and selection tool for the terminal.
        
       -        You can use scripts made for dmenu [1], as iomenu mostly the same way.
       +     It reads lines from standard input, and prompt for a selection.  The
       +     selected line(s) is(are) printed to standard output.
        
       -        Thanks to the authors of dmenu [1], sandy [2], vis-menu[3], pep[4], ...
       -        that taught me C by writing some.
       +     -l lines          If lines is 0 or if -l is not set, the items are
       +                       displayed in an horizontal list.  Otherwise, in a
       +                       vertical list of at most lines lines.
        
       +   Selection control
       +     An active selection is highlighted, and can be controlled with
       +     keybindings.
        
       -Getting started
       -________________________________________________________________________________
       +     ^P, ^N           Move selection to the previous/next item.
        
       -        You can install iomenu by running:
       -        
       -        """
       -        make install
       -        """
       -        
       -        You can optionnaly set a "PREFIX" variable to set the path to
       -        install to:
       -        
       -        """
       -        make PREFIX="$HOME/bin" install
       -        """
       +     ^M, ^J, Enter    Print the selection to the standard output, and exit 0.
        
       -        All you need to build it is a C compiler:  It is plain C89 source
       -        code without external dependencies.
       +     ^Y               Print the selection to the standard output but continue
       +                      running.
        
       -        All usage details are written in the man page, "iomenu.1".
       +   Input handling
       +     As printable keys are entered, the selection is filtered to match every
       +     word from the input.
        
       +     ^H, Bakcspace    Remove last character from current input.
        
       -Examples
       -________________________________________________________________________________
       +     ^W               Remove last word from current input.
        
       +     ^U               Remove the whole input string.
        
       -Open a bookmark from a list in a text file
       +     ^I, Tab          Fill the input with current selection.
        
       -        """
       -        iomenu < bookmarks-urls.txt | xargs firefox
       -        """
       +EXIT STATUS
       +     The iomenu utility exits 0 on success, and >0 if an error occurs.
        
       +EXAMPLES
       +     Open a bookmark from a list in a text file:
        
       -Go to a subdirectory
       +       iomenu < bookmarks-urls.txt | xargs firefox
        
       -        """
       -        cd "$(find . -type d | iomenu)"
       -        """
       +     Go to a subdirectory:
        
       +       cd "$(find . -type d | iomenu)"
        
       -Edit a file located in ~
       +     Edit a file located in HOME:
        
       -        """
       -        $EDITOR "$(find -type f | iomenu)"
       -        """
       +       EDITOR "$(find "$HOME" -type f | iomenu -l 255)"
        
       +     Play an audio file:
        
       -Play an audio file
       +       mplayer "$(find ~/Music | iomenu)"
        
       -        """
       -        mplayer "$(find ~/Music | iomenu)"
       -        """
       +     Select a background job to attach to:
        
       +       fg "%$(jobs | iomenu | cut -c 2)"
        
       -Select a background job to attach to
       +     Filter "ps" output and print a process ID
        
       -        """
       -        fg "%$(jobs | iomenu | cut -c 2)"
       -        """
       +       ps ax | tail -n +2 | iomenu -l 255 | sed -r 's/ *([0-9]*).*/1/'
        
       +SEE ALSO
       +     dmenu(1), slmenu(1), vis-menu(1)
        
       -Filter "ps" output and print a process ID
       +BUGS
       +     iomenu currently only support ASCII characters.
        
       -        """
       -        { printf '#'; ps ax; } | iomenu -s '#' | sed -r 's/ *([0-9]*).*/\1/'
       -        """
       +AUTORS
       +     iomenu was written from scratch by Josuah Demangeon <mail@josuah.net>
       +     with the help of dmenu(1) and vis-menu(1) as models.
        
       -
       -________________________________________________________________________________
       -
       -1        http://git.suckless.org/dmenu/tree/dmenu.c
       -2        http://git.suckless.org/sandy/tree/sandy.c
       -3        http://github.com/martanne/vis/blob/master/vis-menu.c
       -4        http://github.com/charles-l/pep/blob/master/pep.c
       +Linux 4.9.11-1-ARCH             March 19, 2017             Linux 4.9.11-1-ARCH
 (DIR) diff --git a/iomenu.1 b/iomenu.1
       @@ -0,0 +1,128 @@
       +.Dd mar 19, 2017
       +.Dt IOMENU 1
       +.Os
       +.
       +.Sh NAME
       +.
       +.Nm iomenu
       +.Nd interactive selection menu
       +.
       +.Sh SYNOPSIS
       +.
       +.Nm
       +.Op Fl l Ar lines
       +.
       +.Sh DESCRIPTION
       +.
       +.Nm
       +is an interactive filtering and selection tool for the terminal.
       +.Pp
       +It reads lines from standard input, and prompt for a selection.
       +The selected line(s) is(are) printed to standard output.
       +.Bl -tag -width XXXXXXXXXXXXXXXX
       +.
       +.It Fl l Ar lines
       +If
       +.Ar lines
       +is 0 or if
       +.Fl l
       +is not set,
       +the items are displayed in an horizontal list.
       +Otherwise, in a vertical list of at most
       +.Ar lines
       +lines.
       +.El
       +.
       +.Ss Selection control
       +.
       +An active selection is highlighted, and can be controlled with keybindings.
       +.Bl -tag -width XXXXXXXXXXXXXXX
       +.
       +.It Ic ^P Ns , Ic ^N
       +Move selection to the previous/next item.
       +.
       +.It Ic ^M Ns , Ic ^J Ns , Ic Enter
       +Print the selection to the standard output, and exit 0.
       +.
       +.It Ic ^Y
       +Print the selection to the standard output but
       +.Sy continue running .
       +.El
       +.
       +.Ss Input handling
       +.
       +As printable keys are entered, the selection is filtered to match every
       +word from the input.
       +.Bl -tag -width XXXXXXXXXXXXXXX
       +.
       +.It Ic ^H Ns , Ic Bakcspace
       +Remove last character from current input.
       +.
       +.It Ic ^W
       +Remove last word from current input.
       +.
       +.It Ic ^U
       +Remove the whole input string.
       +.
       +.It Ic ^I Ns , Ic Tab
       +Fill the input with current selection.
       +.El
       +.
       +.Sh EXIT STATUS
       +.
       +.Ex -std
       +.
       +.Sh EXAMPLES
       +.
       +Open a bookmark from a list in a text file:
       +.Bd -literal -offset XX
       +iomenu < bookmarks-urls.txt | xargs firefox
       +.Ed
       +.Pp
       +Go to a subdirectory:
       +.Bd -literal -offset XX
       +cd "$(find . -type d | iomenu)"
       +.Ed
       +.Pp
       +Edit a file located in
       +.Ev HOME :
       +.Bd -literal -offset XX
       +EDITOR "$(find "$HOME" -type f | iomenu -l 255)"
       +.Ed
       +.Pp
       +Play an audio file:
       +.Bd -literal -offset XX
       +mplayer "$(find ~/Music | iomenu)"
       +.Ed
       +.Pp
       +Select a background job to attach to:
       +.Bd -literal -offset XX
       +fg "%$(jobs | iomenu | cut -c 2)"
       +.Ed
       +.Pp
       +Filter "ps" output and print a process ID
       +.Bd -literal -offset XX
       +ps ax | tail -n +2 | iomenu -l 255 | sed -r 's/ *([0-9]*).*/\1/'
       +.Ed
       +.
       +.Sh SEE ALSO
       +.
       +.Xr dmenu 1 ,
       +.Xr slmenu 1 ,
       +.Xr vis-menu 1
       +.
       +.Sh BUGS
       +.
       +.Nm
       +currently only support ASCII characters.
       +.
       +.Sh AUTORS
       +.
       +.Nm
       +was written from scratch by
       +.An Josuah Demangeon Aq Mt mail@josuah.net
       +with the help of
       +.Xr dmenu 1
       +and
       +.Xr vis-menu 1
       +as models.
 (DIR) diff --git a/iomenu.c b/iomenu.c
       @@ -26,7 +26,6 @@ static char   input[BUFSIZ], formatted[BUFSIZ * 8];
        static int    current = 0, offset = 0, prev = 0, next = 0;
        static int    linec = 0,      matchc = 0;
        static char **linev = NULL, **matchv = NULL;
       -static char  *opt_p = "";
        static int    opt_l = 0;
        
        
       @@ -243,7 +242,7 @@ print_screen(void)
                }
        
                format(input, opt_l || matchc == 0 ? ws.ws_col : OFFSET - 3);
       -        fprintf(stderr, "\r%s %s", opt_p, formatted);
       +        fprintf(stderr, "\r %s", formatted);
        }
        
        
       @@ -409,7 +408,7 @@ input_get(void)
        static void
        usage(void)
        {
       -        fputs("usage: iomenu [-l lines] [-p prompt]\n", stderr);
       +        fputs("usage: iomenu [-l lines]\n", stderr);
        
                exit(EXIT_FAILURE);
        }
       @@ -429,11 +428,6 @@ main(int argc, char *argv[])
                                if (++i >= argc || sscanf(argv[i], "%d", &opt_l) <= 0)
                                        usage();
                                break;
       -                case 'p':
       -                        if (++i >= argc)
       -                                usage();
       -                        opt_p = argv[i];
       -                        break;
                        default:
                                usage();
                        }