Added the -j option to indicate truncated lines.
[selector.git] / selector.c
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;