add function 'create new directory'
authorLaurent Mazet <mazet@softndesign.org>
Thu, 9 Jan 2025 23:07:58 +0000 (00:07 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Thu, 9 Jan 2025 23:07:58 +0000 (00:07 +0100)
display.c
display.h
fm.c

index 95f4349b06a745d44cc2cc7329cea14d4bb48a0a..50c92dd8ef9f5d7be58c6151ffd76669f7ccfd86 100644 (file)
--- a/display.c
+++ b/display.c
@@ -307,10 +307,11 @@ char *getwindow (char *msg, window_t *win, int length, int size)
     if (xoffset < 1) {
         xoffset = 1;
     }
+    int xsize = strlen (msg) + 1 + length;
     int yoffset = win->yoffset + (win->ysize - 1) / 2;
 
     set_color (black);
-    _dobound (strlen (msg) + 1 + length, 1, xoffset, yoffset);
+    _dobound (xsize, 1, xoffset, yoffset);
     mvaddstr (yoffset, xoffset, msg);
     xoffset += strlen (msg);
     mvaddch (yoffset, xoffset, ' ');
@@ -398,19 +399,26 @@ char *getwindow (char *msg, window_t *win, int length, int size)
     return name;
 }
 
-void msgwindow (char *msg, int xoffset, int yoffset, int length)
+void msgwindow (char *msg, window_t *win, int length)
 {
+    int xsize = (length > 0) ? length : (int)strlen (msg);
+    int xoffset = win->xoffset + (win->xsize - xsize) / 2;
+    if (xoffset < 1) {
+        xoffset = 1;
+    }
+    int yoffset = win->yoffset + (win->ysize - 1) / 2;
+
     set_color (black);
-    _dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset);
-    mvaddstr (yoffset, xoffset + ((length > 0) ? (length - (int)strlen (msg)) / 2 : 0), msg);
+    _dobound (xsize, 1, xoffset, yoffset);
+    mvaddstr (yoffset, xoffset, msg);
     set_color (white);
 }
 
-int askwindow (char *msg, int xoffset, int yoffset, char *ok, char *ko)
+int askwindow (char *msg, window_t *win, char *ok, char *ko)
 {
     size_t i;
 
-    msgwindow (msg, xoffset, yoffset, 0);
+    msgwindow (msg, win, 0);
 
     int stop = 0;
     while (!stop) {
index 91f6d410f9d13231d7b6a8a76b76b89ce7b0dc36..98a5bf1dd37235660755402191ad9a4266142331 100644 (file)
--- a/display.h
+++ b/display.h
@@ -13,9 +13,9 @@ void elementwindow (window_t *win, char *status, int *index);
 
 char *getwindow (char *msg, window_t *win, int length, int size);
 
-void msgwindow (char *msg, int xoffset, int yoffset, int length);
+void msgwindow (char *msg, window_t *win, int length);
 
-int askwindow (char *msg, int xoffset, int yoffset, char *ok, char *ko);
+int askwindow (char *msg, window_t *win, char *ok, char *ko);
 
 #define KEY_DELETE 0x014a
 #define KEY_ESC 0x1b
diff --git a/fm.c b/fm.c
index 1dcae0258138ea11573a9f5532792d85893adc54..5c12caf95bd96e522253ff79e545a1c2471c7035 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include <unistd.h>
 
 #include "debug.h"
@@ -186,7 +187,7 @@ int main (int argc, char *argv[])
     int stop = 0;
     while (!stop) {
         elem_t *current  = NULL;
-        char *filter = NULL;
+        char *string = NULL;
 
         menuwindow (winmenu, menu, &index_menu);
 
@@ -300,11 +301,10 @@ int main (int argc, char *argv[])
             case ALT_E: /* edit */
                 break;
             case ALT_F: /* filter */
-                VERBOSE(DEBUG, fprintf (stderr, "ALT F\n"));
-                filter = getwindow ("Set filter", windir[pane], 8, 32);
-                if (filter) {
-                    filterlist (list[pane], filter);
-                    free (filter);
+                string = getwindow ("Set filter", windir[pane], 8, 32);
+                if (string) {
+                    filterlist (list[pane], string);
+                    free (string);
                 }
                 break;
             case ALT_H: /* help */
@@ -316,9 +316,19 @@ int main (int argc, char *argv[])
             case ALT_M: /* move */
                 break;
             case ALT_N: /* new dir */
+                string = getwindow ("New directory", windir[pane], 8, 32);
+                if (string) {
+                    if (mkdir (string, 0750) != 0) {
+                        msgwindow ("Can't create directory", windir[pane], 0);
+                        getch ();
+                    }
+                    freelist (list[pane]);
+                    list[pane] = NULL;
+                    free (string);
+                }
                 break;
             case ALT_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) {
+                if (askwindow (" Restart (Y/N) ", windir[pane], "Yy", "Nn") == 1) {
                     stop = 1;
                 }
                 break;
@@ -362,8 +372,9 @@ int main (int argc, char *argv[])
 /* test: { sleep 1; echo -n KKKKK; sleep 1; echo -n IIIII; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d /dev -d . */
 /* test: { sleep 1; echo -n kkkkkkkkkkkkkkkkkkkkkkkk; sleep 1; echo -n iiiiiiiiiiiiiiiiiiiii; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d /dev -d . */
 /* test: { sleep 1; echo -n kkkkkkkkk; sleep 1; echo -n ooo; sleep 1; echo -n uu; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 */
-/* test: { sleep 1; echo -en '\ef'; sleep 1; echo ' .*\.c'; sleep 1; echo -en 'kkk\esl'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
+/* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n ' .*\.c'; sleep 1; echo; sleep 1; echo -en 'kkk\esl'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
 /* test: { sleep 1; echo -en '\ef'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
 /* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n 123456789012345678901234567890123; sleep 1; echo -en '\b\b'; sleep 1; echo -ne '\e'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
-
+/* test: { sleep 1; echo -en '\en'; sleep 1; echo -n foobar; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir foobar */
+/* test: { sleep 1; echo -en '\en'; sleep 1; echo -n foo/bar; sleep 1; echo; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
 /* vim: set ts=4 sw=4 et: */