Realized that recent changes deserve a new version number.
[selector.git] / selector.1
index f4c7edf..a0a88b4 100644 (file)
-.TH "SELECTOR" "1"
+.TH "SELECTOR" "1.1.8" "February 2013" "Francois Fleuret" "User Commands"
+
+\" This man page was written by Francois Fleuret <francois@fleuret.org>
+\" and is distributed under a Creative Commons Attribution-Share Alike
+\" 3.0 License.
+
 .SH "NAME"
-selector - A simple command line for dynamic pattern selection
+
+selector \- A simple command line utility for dynamic pattern selection
+
 .SH "SYNOPSIS"
-.PP
-\fBselector\fP [\fBoptions\fP] -f <filename>
+
+\fBselector\fP [\fIoptions\fR] [\fI<filename1>\fR [\fI<filename2>\fR ...]]
+
 .SH "DESCRIPTION"
-.PP
-\fBselector\fP is a command line dynamic string selection. As you type
-a list of strings separated by ';' or a regexp, the display is updated
-in real time to show only the lines containing all the said strings,
-or matching the regexp.
 
-The ^R key switches between the standard multi-substring mode and the
-regexp mode.
+\fBselector\fP is a command line utility for interactive real-time
+pattern matching. It reads the content of the specified files, and as
+the user types a list of strings separated by ";" (or a regexp), the
+display is updated in real time to show only the lines containing all
+the said strings (or matching the regexp).
+
+This command was mainly designed as a way to search efficiently in the
+shell history, for which it is substantially better than the standard
+readline ^R binding. With the -v option, it injects the selected line
+into the tty input buffer, hence allowing the user to edit the line
+and execute it as a standard command.
+
+Selector is also a handy tool to test regexps, or to display menus
+with many possible choices. For the latter, the -x option allows to
+show different strings than the ones returned.
+
+Note that because this is an interactive command, the standard input
+cannot be used as one of the input files.
+
+.SH "USING SELECTOR IN BASH"
+
+The selector command comes with a shell script for bash. If you add
+
+.P
+.nf
+.B source bash-selector.sh --hist --cd
 
-The main usage of selector is as an efficient search in the shell
-command history. With the correct option, it will inject the selected
-line into the virtual tty input buffer, hence allowing the user to
-edit the line and execute it as a standard command.
+.fi
+in your \fB~/.bashrc\fR, it will remap M-r to the smart history search,
+and redefine \fBcd\fR so that M-c provides a smart cd history.
 
-Keys corresponding to ASCII codes between ' ' and '~' add a character
-to the pattern string. The Delete key, Backspace key, ^D and ^H delete
-one character from the pattern string.
+This script relies on readline being configured with the default
+emacs-style key bindings. You may have to hack a bit if you want to
+use it with the vi-style mode.
 
-The Up and Down cursor keys move the selected line accordingly, and
-PageUp and PageDown move by ten lines. The Home and End key move to
-the top and the bottom of the list respectively. The return key
-selects the current line and exits.
+.SH "KEY BINDINGS"
 
-The ^U key erases the current pattern, and you can cancel the
-selection by either interrupting the command with ^C or by typing ^G.
+Keys corresponding to ASCII codes between " " and "~" add a character
+to the pattern string. The Backspace key, "^H" and "^?" delete the
+character immediately on the left of the cursor, while the Delete key
+and "^D" delete the character at cursor location.
+
+The Left and Right cursor keys move the editing cursor
+accordingly. The Up and Down cursor keys move the selected line one
+entry at a time, and PageUp and PageDown move it by ten entries. The
+Home and End key move to the top and the bottom of the list
+respectively. The return key selects the current line and exits.
+
+The keys "^A", "^E", "^U", and "^K" do somehow what they do in
+readline, and you can exit selector without doing anything by either
+interrupting the command with "^C" or by typing "^G" or the Escape
+key.
+
+The key "^R" switches between the multi-substring and the regexp
+selection mode, and "^I" between the case-sensitive and
+case-insensitive modes.
 
 .SH "OPTIONS"
-.IP "\fB-h\fP" 10
-display help and exits
-.IP "\fB-m\fP" 10
+.TP
+\fB-h\fR, \fB--help\fR
+display help and exit
+.TP
+\fB-m\fR, \fB--monochrome\fR
 force the monochrome mode
-.IP "\fB-i\fP" 10
-inverse the order of the lines
-.IP "\fB-b\fP" 10
+.TP
+\fB-i\fR, \fB--revert-order\fR
+revert the order of the lines
+.TP
+\fB-b\fR, \fB--remove-bash-prefix\fR
 remove the numeric prefix from bash history
-.IP "\fB-z\fP" 10
+.TP
+\fB-z\fR, \fB--remove-zsh-prefix\fR
 remove the time prefix from zsh history
-.IP "\fB-d\fP" 10
-remove duplicated lines
-.IP "\fB-e\fP" 10
-start with the regexp mode activated
-.IP "\fB-a\fP" 10
-make the matching case sensitive
-.IP "\fB-t <title>\fP" 10
+.TP
+\fB-d\fR, \fB--remove-duplicates\fR
+remove duplicated lines (note that you can have two different lines
+with the same visible part if you use the -x option)
+.TP
+\fB-e\fR, \fB--regexp\fR
+start in regexp mode
+.TP
+\fB-a\fR, \fB--case-sensitive\fR
+start in case-sensitive mode
+.TP
+\fB-j\fR, \fB--show-long-lines\fR
+print a long-line indicator at the end of truncated lines
+.TP
+\fB-y\fR, \fB--show-hits\fR
+highlight the part(s) of each line which match(es) the substrings or regexp
+.TP
+\fB-u\fR, \fB--upper-case-makes-case-sensitive\fR
+using an upper case in the matching string makes the matching
+case-sensitive
+.TP
+\fB-q\fR, \fB--no-beep\fR
+make a flash instead of a beep when there is an edition error
+.TP
+\fB--\fR
+state that all following arguments are filenames
+.TP
+\fB--bash\fR
+standard setting for bash history search, same as
+
+-b -i -d -v -w -l ${HISTSIZE}
+.TP
+\fB--delete-regexp \fI<regexp>\fR
+deletes in every line the portion matching the regexp
+.TP
+\fB-t \fI<title>\fR, \fB--title \fI<title>\fR
 add a title in the modeline
-.IP "\fB-c <fg modeline> <bg modeline> <fg highlight> <bg highlight>\fP" 10
-select the modeline and highlight color numbers
-.IP "\fB-v\fP" 10
+.TP
+\fB-r \fI<pattern>\fR, \fB--pattern \fI<pattern>\fR
+set a pattern
+.TP
+\fB-c \fI<colors>\fR, \fB--colors \fI<colors>\fR
+select the modeline and highlight color numbers with a color list of
+the form
+
+\fI<fg_modeline>,<bg_modeline>,<fg_highlight>,<bg_highlight>\fR
+.TP
+\fB-v\fR, \fB--inject-in-tty\fR
 inject the selected line into the tty input buffer
-.IP "\fB-o <output filename>\fP" 10
+.TP
+\fB-w\fR, \fB--add-control-qs\fR
+add ^Q between characters during tty injection to quote control characters
+.TP
+\fB-o \fI<filename>\fR, \fB--output-file \fI<filename>\fR
 write the selected line into the specified file
-.IP "\fB-s <pattern separator>\fP" 10
-specify the symbol to separate the substrings in the search pattern
-.IP "\fB-l <max number of lines>\fP" 10
+.TP
+\fB-s \fI<separator>\fR, \fB--pattern-separator \fI<separator>\fR
+specify the character to separate the substrings in the search pattern
+.TP
+\fB-x \fI<separator>\fR, \fB--label-separator \fI<separator>\fR
+specify the character to separate what to show to the user during the
+selection from the line to return. If the provided separator is "\\n",
+the lines to show to the user alternate with the lines to return
+.TP
+\fB-l \fI<number>\fR, \fB--number-of-lines \fI<number>\fR
 specify the maximum number of lines to take into account
-.IP "\fB-f <input filename>\fP" 10
-specify the file to search into
 
 .SH "EXAMPLES"
 
-To use selector to search into your bash history, you can use
+To use selector to search into your bash history
+
+.P
+.nf
+.B selector -q --bash <(history)
 
-.B selector -d -i -b -v -f <(history)
+.fi
+To show a list of directories and insert a cd command to the selected
+one
+
+.P
+.nf
+.B selector -v -x \(dq\\n\(dq <(find . -type d | awk \(aq{ print $0\(dq\\ncd \(dq$0 }\(aq)
+
+.fi
+To select a line in a long text and write the line number in /tmp/nb
+
+.P
+.nf
+.B selector -o /tmp/nb -x \(dq\\n\(dq <(awk < something.txt \(aq{ print $0\(dq\\n\(dqNR }\(aq)
 
 .SH "BUGS"
 
-Probably many.
+There are modeline display problems if the pattern is too long. This
+program does not handle multibyte characters.
+
+The \fB-v\fR option does not work on FreeBSD 8.0 since the TIOCSTI
+ioctl request is broken.
 
 .SH "AUTHOR"
-.PP
-Written by Francois Fleuret <francois@fleuret.org>. Permission is
-granted to copy, distribute and/or modify this document under the
-terms of the GNU GPL.
+
+Written by Francois Fleuret <francois@fleuret.org> and distributed
+under the terms of the GNU General Public License version 3 as
+published by the Free Software Foundation. This is free software: you
+are free to change and redistribute it. There is NO WARRANTY, to the
+extent permitted by law.