Added the -j option to indicate truncated lines.
authorFrancois Fleuret <francois@fleuret.org>
Tue, 7 Feb 2012 17:05:38 +0000 (18:05 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Tue, 7 Feb 2012 17:05:38 +0000 (18:05 +0100)
bash-selector.sh
selector.1
selector.c

index dc1ae57..68a024b 100755 (executable)
@@ -37,7 +37,7 @@ fi
 ######################################################################
 
 function selector-history () {
-    selector --bash -u -c 7,4,0,3 -q <(history)
+    selector --bash -j -u -c 7,4,0,3 -q <(history)
 }
 
 ######################################################################
@@ -71,7 +71,7 @@ function selector-cd () {
 
 function selector-cd-search () {
     PATH_TEMP=$(mktemp /tmp/selector-cd-path.XXXXXX)
-    selector -u -t "cd" -l 1000 -d -i -c 7,2,0,3 -o ${PATH_TEMP} -q ${SELECTOR_CD_HISTORY}
+    selector -j -u -t "cd" -l 1000 -d -i -c 7,2,0,3 -o ${PATH_TEMP} -q ${SELECTOR_CD_HISTORY}
     NEW_PATH="$(cat ${PATH_TEMP} | sed -e 's!~!'${HOME}'!')"
     if [[ -s "${NEW_PATH}" ]]; then
         selector-cd "$(cat ${PATH_TEMP} | sed -e 's!^~!'${HOME}'!')"
index 44bd32a..29d44cc 100644 (file)
@@ -93,6 +93,9 @@ start in regexp mode
 \fB-a\fR, \fB--case-sensitive\fR
 start in case sensitive mode
 .TP
+\fB-j\fR, \fB--show-long-lines\fR
+print three dots at the end of truncated lines
+.TP
 \fB-u\fR, \fB--upper-case-makes-case-sensitive\fR
 using an upper case in the matching string makes the matching
 case-sensitive
index 638aaad..3246a00 100644 (file)
@@ -66,6 +66,7 @@ int case_sensitive = 0;
 char *title = 0;
 int error_flash = 0;
 int upper_caps_makes_case_sensitive = 0;
+int show_long_lines = 0;
 
 int attr_modeline, attr_focus_line, attr_error;
 
@@ -188,6 +189,8 @@ void usage(FILE *out) {
   fprintf(out, "         start in regexp mode\n");
   fprintf(out, " -a, --case-sensitive\n");
   fprintf(out, "         start in case sensitive mode\n");
+  fprintf(out, " -j, --show-long-lines\n");
+  fprintf(out, "         print three dots at the end of truncated lines\n");
   fprintf(out, " -u, --upper-case-makes-case-sensitive\n");
   fprintf(out, "         using an upper case character in the matching string makes\n");
   fprintf(out, "         the matching case-sensitive\n");
@@ -602,15 +605,33 @@ void update_screen(int *current_focus_line, int *displayed_focus_line,
           /* Highlight the highlighted line ... */
 
           if(l == new_focus_line) {
-            while(k < console_width) {
-              buffer[k++] = ' ';
+            if(show_long_lines && k >= console_width) {
+              if(console_width >= 4) {
+                buffer[console_width - 4] = ' ';
+                buffer[console_width - 3] = '.';
+                buffer[console_width - 2] = '.';
+                buffer[console_width - 1] = '.';
+              }
+            } else {
+              while(k < console_width) {
+                buffer[k++] = ' ';
+              }
             }
             attron(attr_focus_line);
             addnstr(buffer, console_width);
             attroff(attr_focus_line);
           } else {
-            buffer[k++] = '\n';
-            buffer[k++] = '\0';
+            if(show_long_lines && k >= console_width) {
+              if(console_width >= 4) {
+                buffer[console_width - 4] = ' ';
+                buffer[console_width - 3] = '.';
+                buffer[console_width - 2] = '.';
+                buffer[console_width - 1] = '.';
+              }
+            } else {
+              buffer[k++] = '\n';
+              buffer[k++] = '\0';
+            }
             /* clrtoeol(); */
             addnstr(buffer, console_width);
           }
@@ -803,6 +824,7 @@ static struct option long_options[] = {
   { "remove-duplicates", no_argument, 0, 'd' },
   { "regexp", no_argument, 0, 'e' },
   { "case-sensitive", no_argument, 0, 'a' },
+  { "show-long-lines", no_argument, 0, 'j'},
   { "upper-case-makes-case-sensitive", no_argument, 0, 'u' },
   { "title", 1, 0, 't' },
   { "number-of-lines", 1, 0, 'l' },
@@ -845,7 +867,7 @@ int main(int argc, char **argv) {
 
   strcpy(output_filename, "");
 
-  while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeaunt:l:c:-h",
+  while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeajunt:l:c:-h",
                           long_options, NULL)) != -1) {
 
     switch(c) {
@@ -902,6 +924,10 @@ int main(int argc, char **argv) {
       case_sensitive = 1;
       break;
 
+    case 'j':
+      show_long_lines = 1;
+      break;
+
     case 'u':
       upper_caps_makes_case_sensitive = 1;
       break;