X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=selector.cc;h=64f44c280797a4cb391759e025145cf20bba32c9;hb=4cba6d27837965924858583f564d0a0a9f27a3e5;hp=a3d54dd1a3acd15b81097e4c3279883e8bc5c62b;hpb=6761db2af5b3df278745de6342f74a6a4c206ea1;p=selector.git diff --git a/selector.cc b/selector.cc index a3d54dd..64f44c2 100644 --- a/selector.cc +++ b/selector.cc @@ -23,7 +23,7 @@ */ // To use it as a super-history-search for bash: -// alias h='selector -d -i -b -v -f <(history)' +// selector -q -b -i -d -v -w -l 10000 <(history) #include #include @@ -51,7 +51,8 @@ char label_separator = '\0'; int output_to_vt_buffer = 0; int add_control_qs = 0; int with_colors = 1; -int zsh_history = 0, bash_history = 0; +int zsh_history = 0; +int bash_history = 0; int inverse_order = 0; int remove_duplicates = 0; int use_regexp = 0; @@ -70,10 +71,10 @@ void inject_into_tty_buffer(char *string) { memset(&newtio, 0, sizeof(newtio)); // Set input mode (non-canonical, *no echo*,...) tcsetattr(STDIN_FILENO, TCSANOW, &newtio); - char control_q = '\021'; + const char control_q = '\021'; // Put the selected string in the tty input buffer - for(char *k = string; *k; k++) { - if(add_control_qs) { + for(const char *k = string; *k; k++) { + if(add_control_qs && !(*k >= ' ' && *k <= '~')) { // Add ^Q to quote control characters ioctl(STDIN_FILENO, TIOCSTI, &control_q); } @@ -349,7 +350,6 @@ void update_screen(int *current_line, int *temporary_line, int motion, int nb_printed_lines = 0; - clear(); use_default_colors(); addstr("\n"); @@ -445,6 +445,8 @@ void update_screen(int *current_line, int *temporary_line, int motion, buffer[k++] = '\n'; buffer[k++] = '\0'; + clrtoeol(); + // Highlight the highlighted line ... if(l == new_line) { @@ -479,6 +481,8 @@ void update_screen(int *current_line, int *temporary_line, int motion, addnstr("[empty choice]\n", console_width); } + clrtobot(); + // Draw the modeline move(0, 0); @@ -773,6 +777,7 @@ int main(int argc, char **argv) { << endl << " -h show this help" << endl << " -v inject the selected line in the tty" << endl + << " -w quote control characters with ^Qs when using -v" << endl << " -d remove duplicated lines" << endl << " -b remove the bash history line prefix" << endl << " -z remove the zsh history line prefix" << endl @@ -781,7 +786,7 @@ int main(int argc, char **argv) { << " -a case sensitive" << endl << " -m monochrome mode" << endl << " -q make a flash instead of a beep on an edition error" << endl - << " -- rest of the arguments are filenames" << endl + << " -- all following arguments are filenames" << endl << " -t " << endl << " add a title in the modeline" << endl << " -c <fg modeline> <bg modeline> <fg highlight> <bg highlight>" << endl @@ -869,6 +874,7 @@ int main(int argc, char **argv) { char pattern[buffer_size]; pattern[0] = '\0'; + int cursor_position; cursor_position = 0; @@ -909,7 +915,8 @@ int main(int argc, char **argv) { int key; int current_line = 0, temporary_line = 0; - update_screen(¤t_line, &temporary_line, 0, nb_lines, labels, cursor_position, pattern); + update_screen(¤t_line, &temporary_line, 0, + nb_lines, labels, cursor_position, pattern); do { @@ -994,6 +1001,11 @@ int main(int argc, char **argv) { kill_after_cursor(pattern, &cursor_position); } + else if(key == '\014') { // ^L + // I suspect that we may sometime mess up the display + clear(); + } + update_screen(¤t_line, &temporary_line, motion, nb_lines, labels, cursor_position, pattern);