#
-# selector is a simple shell command for selection of strings with a
-# dynamic pattern-matching.
+# selector is a simple command line utility for selection of strings
+# with a dynamic pattern-matching.
#
# Copyright (c) 2009 Francois Fleuret
# Written by Francois Fleuret <francois@fleuret.org>
#!/bin/bash
#
-# selector is a simple shell command for selection of strings with a
-# dynamic pattern-matching.
+# selector is a simple command line utility for selection of strings
+# with a dynamic pattern-matching.
#
# Copyright (c) 2009 Francois Fleuret
# Written by Francois Fleuret <francois@fleuret.org>
Maintainer: Francois Fleuret <francois@fleuret.org>
Architecture: i386
Depends: ${LIB_DEPENDS}
-Description: A command line for dynamic string-matching
- This is a command line for dynamic string selection. As you type a
- list of substrings separated by ';', or a regexp, the display is
- updated in real time to show only the matching lines. The main usage
- of selector is as an efficient search in the shell command
+Description: A command line utility for dynamic string-matching
+ This is a command line utility for dynamic string selection. As you
+ type a list of substrings separated by ';', or a regexp, the display
+ is updated in real time to show only the matching lines. 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 tty input buffer, hence allowing the user to edit the line
and execute it as a standard command.
.TH "SELECTOR" "1"
.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] [<filename1> [<filename2> ...]]
.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, and ^I between the case-sensitive and case-insensitive
-modes.
+\fBselector\fP is a command line utility for 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 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.
-Selector is also a good tool to test regexp quickly.
+Selector is also a good tool to test regexps.
+
+.SH "KEYS"
+.PP
Keys corresponding to ASCII codes between ' ' and '~' add a character
to the pattern string. The Backspace key, ^H and ^? delete the
-character on the left of the cursor, while Delete key and ^D delete
-the character at cursor location.
+character immediately on the left of the cursor, while the Delete key
+and ^D delete the character at cursor location.
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
selects the current line and exits.
The shortcuts ^A, ^E, ^U, and ^K do somehow what they do in readline,
-and you can cancel the selection by either interrupting the command
-with ^C or by typing ^G.
+and you can exit selector without doing anything by either
+interrupting the command with ^C or by typing ^G.
+
+The ^R key switches between the standard multi-substring mode and the
+regexp mode, and ^I between the case-sensitive and case-insensitive
+modes.
.SH "OPTIONS"
.IP "\fB-h\fP" 10
.SH "BUGS"
-Modeline display problems if the pattern is too long. Probably many
-others.
+There are modeline display problems if the pattern is too
+long.
.SH "AUTHOR"
.PP
/*
- * selector is a simple shell command for selection of strings with a
- * dynamic pattern-matching.
+ * selector is a simple command line utility for selection of strings
+ * with a dynamic pattern-matching.
*
* Copyright (c) 2009 Francois Fleuret
* Written by Francois Fleuret <francois@fleuret.org>
int case_sensitive = 0;
char *title = 0;
+#define COLOR_MODELINE 1
+#define COLOR_HIGHLIGHTED_LINE 2
+
//////////////////////////////////////////////////////////////////////
void inject_into_tty_buffer(char *string) {
if(l == new_line) {
if(with_colors) {
- attron(COLOR_PAIR(2));
+ attron(COLOR_PAIR(COLOR_HIGHLIGHTED_LINE));
addnstr(buffer, console_width);
- attroff(COLOR_PAIR(2));
+ attroff(COLOR_PAIR(COLOR_HIGHLIGHTED_LINE));
} else {
attron(A_STANDOUT);
addnstr(buffer, console_width);
move(0, 0);
if(with_colors) {
- attron(COLOR_PAIR(1));
+ attron(COLOR_PAIR(COLOR_MODELINE));
} else {
attron(A_REVERSE);
}
addstr(" ");
}
- if(use_regexp) {
- addstr(" [regexp]");
- }
+ if(use_regexp || case_sensitive) {
+ addstr("[");
+ if(use_regexp) {
+ addstr("regexp");
+ }
- if(case_sensitive) {
- addstr(" [case]");
+ if(case_sensitive) {
+ if(use_regexp) {
+ addstr(",");
+ }
+ addstr("case");
+ }
+ addstr("]");
}
move(0, cursor_x);
if(with_colors) {
- attroff(COLOR_PAIR(1));
+ attroff(COLOR_PAIR(COLOR_MODELINE));
} else {
attroff(A_REVERSE);
}
cerr << "Color numbers have to be between 0 and " << COLORS - 1 << "." << endl;
exit(1);
}
- init_pair(1, color_fg_modeline, color_bg_modeline);
- init_pair(2, color_fg_highlight, color_bg_highlight);
- init_pair(3, color_bg_modeline, color_fg_modeline);
+ init_pair(COLOR_MODELINE , color_fg_modeline, color_bg_modeline);
+ init_pair(COLOR_HIGHLIGHTED_LINE, color_fg_highlight, color_bg_highlight);
} else {
with_colors = 0;
}