new menu in search mode
authorLaurent Mazet <mazet@softndesign.org>
Sun, 16 Mar 2025 14:08:51 +0000 (15:08 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Sun, 16 Mar 2025 14:08:51 +0000 (15:08 +0100)
display.c
display.h
fm.c

index 983469af8cc3a51e83e7efee8557c6790b6e3309..5b61c0609b163bbf71fa679c5703a31c91e017d5 100644 (file)
--- a/display.c
+++ b/display.c
@@ -153,7 +153,7 @@ int helpwindow (char *msg, int xoffset, int yoffset)
     return j;
 }
 
-void menuwindow (window_t *win, char *menu, int *index)
+void menuwindow (window_t *win, char *menu, int *index, char *opt)
 {
     int i;
     set_color (black);
@@ -165,8 +165,8 @@ void menuwindow (window_t *win, char *menu, int *index)
     if (_index < 0) {
         _index = 0;
     }
-    if ((int)strlen (menu) - _index < win->xsize) {
-        _index = strlen (menu) - win->xsize;
+    if ((int)strlen (menu) + ((opt) ? (int) strlen (opt) : 0) - _index < win->xsize) {
+        _index = strlen (menu) + ((opt) ? strlen (opt) : 0)- win->xsize;
     }
     if (_index < 0) {
         _index = 0;
@@ -179,6 +179,10 @@ void menuwindow (window_t *win, char *menu, int *index)
         set_color (((menu[_index + i] >= 'A') && (menu[_index + i] <= 'Z')) ? iblue : black);
         mvaddch (win->yoffset, win->xoffset + i, menu[_index + i]);
     }
+    set_color (ired);
+    for (;(i < win->xsize) && (opt) && (*opt != 0); i++) {
+        mvaddch (win->yoffset, win->xoffset + i, *opt++);
+    }
     set_color (white);
 
     set_color (blue);
@@ -342,11 +346,6 @@ void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *in
 
     set_color (win->active ? (search ? ired : black) : white);
     _dobound (win->xsize, win->ysize, win->xoffset, win->yoffset);
-    if (search) {
-        mvaddstr (win->yoffset + win->ysize, win->xoffset, "Search [");
-        mvaddstr (win->yoffset + win->ysize, win->xoffset + 8, search);
-        mvaddch (win->yoffset + win->ysize, win->xoffset + 8 + strlen (search), ']');
-    }
     if (page > 0) {
         mvaddch (win->yoffset, win->xoffset - 1, ACS_UARROW);
         mvaddch (win->yoffset, win->xsize + win->xoffset, ACS_UARROW);
index caeb1054c0a5dc53ff9cc3c6e901fb57e8af4c88..fe1b604258f75f5b57b3b4b942786f4623360fdf 100644 (file)
--- a/display.h
+++ b/display.h
@@ -5,7 +5,7 @@
 
 int helpwindow (char *msg, int xoffset, int yoffset);
 
-void menuwindow (window_t *win, char *status, int *index);
+void menuwindow (window_t *win, char *status, int *index, char *opt);
 
 void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y, int *index, char *search);
 
diff --git a/fm.c b/fm.c
index 1a2f758ec15f9465e58ccd921d45480f0626e2f9..416d17e3542a0d842f954e09b0386799c60498a0 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -34,7 +34,7 @@ int xoffset = 1;
 int yoffset = 2;
 int width = 0;
 
-char *help =
+char *help0 =
     "alt Menu functions\n"
     "ret Go dir/View file\n"
     "tab Change panel\n"
@@ -48,8 +48,13 @@ char *help =
     "<o> Status right\n"
     "<u> Status left\n"
     ;
+char *help1 =
+    "alt Menu functions\n"
+    "ret Go dir/View file\n"
+    ;
 
-char *menu = "Help View Copy Move Rename Delete Newdir Select Filter Xmod Quit";
+char *menu0 = "Help View Copy Move Rename Delete Newdir Select Filter Xmod Quit";
+char *menu1 = "Help Next Previous Quit Reset";
 
 int usage (int ret)
 {
@@ -201,7 +206,14 @@ int main (int argc, char *argv[])
         elem_t *current  = NULL;
         char *string = NULL;
 
-        menuwindow (winmenu, menu, &index_m);
+        char *opt = NULL;
+        if (search[panel]) {
+            opt = (char *) calloc (3 + strlen (search[panel]) + 1, 1);
+            CHECKALLOC (opt);
+            sprintf (opt, " [%s]", search[panel]);
+        }
+        menuwindow (winmenu, (mode) ? menu1 : menu0 , &index_m, opt);
+        free (opt);
 
         /* display panels */
         for (i = 0; i < MAXPANELS; i++) {
@@ -243,7 +255,6 @@ int main (int argc, char *argv[])
         if (mode) {
             int len = (search[panel]) ? strlen (search[panel]) : 0;
             switch (ch) {
-            case KEY_ESC:
             case '\n':
             case '\t':
             case '\r':
@@ -259,6 +270,25 @@ int main (int argc, char *argv[])
                     search[panel][len - 1] = '\0';
                 }
                 break;
+#ifndef PDCURSES
+            case KEY_ESC:
+                switch (getch ()) {
+#endif /* PDCURSES */
+                case ALT_H:
+                    helpwindow (help1, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset);
+                    break;
+                case ALT_Q:
+                    mode = 0;
+                    free (search[panel]);
+                    search[panel] = NULL;
+                    break;
+                case ALT_R:
+                    *search[panel] = '\0';
+                    break;
+#ifndef PDCURSES
+                }
+                break;
+#endif /* PDCURSES */
             default:
                 search[panel] = (char *) realloc (search[panel], len + 2);
                 CHECKALLOC (search[panel]);
@@ -296,7 +326,7 @@ int main (int argc, char *argv[])
                 for (i = 0; i < MAXPANELS; i++) {
                     elementwindow (winelem[i], "", NULL);
                 }
-                menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL);
+                menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL, NULL);
                 char *src = newfilename (dirname[panel], current->name);
                 char *status = strdupcat ("Viewing file '", src, "'", NULL);
                 elementwindow (winelem[0], status, NULL);
@@ -307,7 +337,7 @@ int main (int argc, char *argv[])
                     free (msg);
                 }
                 free (src);
-                menuwindow (winmenu, menu, &index_m);
+                menuwindow (winmenu, menu0, &index_m, NULL);
             }
             break;
         case '\t':
@@ -331,7 +361,7 @@ int main (int argc, char *argv[])
             break;
         case 'H':
         case 'h':
-            helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset);
+            helpwindow (help0, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset);
             break;
         case KEY_UP:
         case 'i':
@@ -428,7 +458,7 @@ int main (int argc, char *argv[])
                 }
                 break;
             case ALT_H: /* help */
-                helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset);
+                helpwindow (help0, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset);
                 break;
             case ALT_M: /* move */
                 if (askwindow (" Move selected file(s) (Y/N) ", winscreen, "Yy", "Nn") == 1) {
@@ -511,7 +541,7 @@ int main (int argc, char *argv[])
                     for (i = 0; i < MAXPANELS; i++) {
                         elementwindow (winelem[i], "", NULL);
                     }
-                    menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL);
+                    menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL, NULL);
                     char *src = newfilename (dirname[panel], current->name);
                     char *status = strdupcat ("Viewing file '", src, "'", NULL);
                     elementwindow (winelem[0], status, NULL);
@@ -522,7 +552,7 @@ int main (int argc, char *argv[])
                         free (msg);
                     }
                     free (src);
-                    menuwindow (winmenu, menu, &index_m);
+                    menuwindow (winmenu, menu0, &index_m, NULL);
                 }
                 break;
             case ALT_X: /* chmod */