wip filter
authorLaurent Mazet <mazet@softndesign.org>
Tue, 7 Jan 2025 22:12:56 +0000 (23:12 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 7 Jan 2025 22:12:56 +0000 (23:12 +0100)
display.c
display.h
fm.c

index efee5a0b6eec5e6722d625b988035d2ecec8961d..c96b5730d5743b0a7a94d0af2e62d09a0e57868f 100644 (file)
--- a/display.c
+++ b/display.c
@@ -296,16 +296,24 @@ void elementwindow (window_t *win, char *status, int *index)
     set_color (white);
 }
 
-char *getwindow (int length, int xoffset, int yoffset)
+char *getwindow (char *msg, window_t *win, int length)
 {
     char *name = (char *) calloc (1, length + 1);
     CHECKALLOC (name);
     memset (name, ' ', length);
 
+    int xoffset = win->xoffset + (win->xsize - strlen (msg) - 1 - length) / 2;
+    if (xoffset < 1) {
+        xoffset = 1;
+    }
+    int yoffset = win->yoffset + (win->ysize - 1) / 2;
+
     set_color (black);
-    _dobound (length, 1, xoffset, yoffset);
+    _dobound (strlen (msg) + 1 + length, 1, xoffset, yoffset);
+    mvaddstr (yoffset, xoffset, msg);
     set_color (white);
 
+    xoffset += strlen (msg) + 1;
     int i = 0, j;
     int stop = 0;
     while (!stop) {
index 12831c5b571b6633bde7a52a89ced0f8e9977240..d0c49e36220af2c6e16a58ff62fc8306509542ae 100644 (file)
--- a/display.h
+++ b/display.h
@@ -14,7 +14,7 @@ void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *in
 
 void elementwindow (window_t *win, char *status, int *index);
 
-char *getwindow (int length, int xoffset, int yoffset);
+char *getwindow (char *msg, window_t *win, int length);
 
 void msgwindow (char *msg, int xoffset, int yoffset, int length);
 
diff --git a/fm.c b/fm.c
index aab2046445ff4e2e4ab58de4f1dd02e087cb82c5..e59ca5c467084ea7b53140b3c9f09c81110446c7 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -1,6 +1,6 @@
 /* depend: */
 /* cflags: */
-/* linker: debug.o display.o function.o -lcurses -lregex */
+/* linker: debug.o display.o function.o -lcurses */
 /* doslnk: debug.o display.o function.o -lpdc~1 -lreg~1 */
 /* winlnk: debug.o display.o function.o -lpdcurses -lregex */
 
@@ -186,6 +186,7 @@ int main (int argc, char *argv[])
     int stop = 0;
     while (!stop) {
         elem_t *current  = NULL;
+        char *filter = NULL;
 
         menuwindow (winmenu, menu, &index_menu);
 
@@ -285,45 +286,47 @@ int main (int argc, char *argv[])
         case 'o':
             index[pane]++;
             break;
-        case KEY_ESC:
-        case 'q':
-            if (askwindow (" Restart (Y/N) ", max (windir[pane]->xoffset + (windir[pane]->xsize - 15) / 2, 1), windir[pane]->yoffset + (windir[pane]->ysize - 1) / 2, "Yy", "Nn") == 1) {
-                stop = 1;
-            }
-            break;
         case 'u':
             index[pane]--;
             break;
-        case ALT_C: /* copy */
-            break;
-        case ALT_D: /* delete */
-            break;
-        case ALT_E: /* edit */
-            break;
-        case ALT_F: /* filter */
-            filterlist (list[pane], ".*\\.c");
-            break;
-        case ALT_H: /* help */
-            helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset);
-            while (getch () == ERR) {
-                usleep (200 * 1000);
+        case KEY_ESC:
+            switch (getch ()) {
+            case 'c': /* copy */
+                break;
+            case 'd': /* delete */
+                break;
+            case 'e': /* edit */
+                break;
+            case 'f': /* filter */
+                filter = getwindow ("Set filter", windir[pane], 32);
+                filterlist (list[pane], filter);
+                free (filter);
+                break;
+            case 'h': /* help */
+                helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset);
+                while (getch () == ERR) {
+                    usleep (200 * 1000);
+                }
+                break;
+            case 'm': /* move */
+                break;
+            case 'n': /* new dir */
+                break;
+            case 'q': /* quit */
+                if (askwindow (" Restart (Y/N) ", max (windir[pane]->xoffset + (windir[pane]->xsize - 15) / 2, 1), windir[pane]->yoffset + (windir[pane]->ysize - 1) / 2, "Yy", "Nn") == 1) {
+                    stop = 1;
+                }
+                break;
+            case 'r': /* rename */
+                break;
+            case 's': /* select */
+                current = list[pane]->tab + windir[pane]->index;
+                current->selected = (current->selected) ? 0 : 1;
+                break;
+            case 'v': /* view */
+                break;
             }
             break;
-        case ALT_M: /* move */
-            break;
-        case ALT_N: /* new dir */
-            break;
-        case ALT_Q: /* quit */
-            break;
-        case ALT_R: /* rename */
-            break;
-        case ALT_S: /* select */
-        case ' ':
-            current = list[pane]->tab + windir[pane]->index;
-            current->selected = (current->selected) ? 0 : 1;
-            break;
-        case ALT_V: /* view */
-            break;
         }
     }