fix view mode for short files
authorLaurent Mazet <mazet@softndesign.org>
Tue, 21 Jan 2025 09:18:21 +0000 (10:18 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 21 Jan 2025 09:18:21 +0000 (10:18 +0100)
display.c
fm.c

index 3bd64d21e90bed460348981e2e05ca1e16a60c06..f8c45be6204fa0a5cdce9171a7b87630910ec89e 100644 (file)
--- a/display.c
+++ b/display.c
@@ -554,12 +554,10 @@ char *filewindow (char *name, window_t *win)
             mvaddch (win->ysize + win->yoffset, win->xsize + win->xoffset, ACS_DARROW);
         }
 
-        for (i = 0; i < win->ysize; i++) {
+        for (i = 0; (i < win->ysize) && (lines[skip + i]); i++) {
             unsigned char *pt = (unsigned char *)(lines[skip + i]);
-            for (j = 0; j < win->xsize; j++) {
-                if (pt[j] == '\0') {
-                    break;
-                } else if (pt[j] == 128) {
+            for (j = 0; (j < win->xsize) && (pt[j] != '\0'); j++) {
+                if (pt[j] == 128) {
                     set_color (imagenta);
                     mvaddch (win->yoffset + i, win->xoffset + j, '.');
                     set_color (black);
@@ -571,6 +569,11 @@ char *filewindow (char *name, window_t *win)
                 mvaddch (win->yoffset + i, win->xoffset + j, ' ');
             }
         }
+        for (; i < win->ysize; i++) {
+            for (j = 0; j < win->xsize; j++) {
+                mvaddch (win->yoffset + i, win->xoffset + j, ' ');
+            }
+        }
 
         switch (getch ()) {
         case KEY_ESC:
diff --git a/fm.c b/fm.c
index 36329754b6c4b080f4e0f9929abbaaf2e1249ba9..85a900329834cc5a51036e6c6a6fdf5f416144c7 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -572,7 +572,9 @@ int main (int argc, char *argv[])
 /* test: ln -s .b .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo; sleep 1; echo ; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
 
 /* View */
+/* test: echo -ne 'Begin\n  This is a test\nEnd' > .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo -n kkk; sleep 1; echo -n iii; sleep 1; echo -n h; sleep 1; echo; sleep 1;  echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
 /* test: cp fm.c .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; for i in $(seq 1 1000); do echo -n k; done; sleep 1; for i in $(seq 1 1000); do echo -n i; done; sleep 1; echo -n h; sleep 1; echo; sleep 1;  echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
+/* test: cp debug.o .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; for i in $(seq 1 100); do echo -n k; done; sleep 1; for i in $(seq 1 100); do echo -n i; done; sleep 1; echo -n h; sleep 1; echo; sleep 1;  echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
 /* test: mkdir .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rmdir .a */
 /* test: ln -s .b .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */