add confirmation messages
authorLaurent Mazet <mazet@softndesign.org>
Sat, 18 Jan 2025 20:45:01 +0000 (21:45 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 18 Jan 2025 20:45:01 +0000 (21:45 +0100)
fm.c

diff --git a/fm.c b/fm.c
index e80b665da500c64669a8d9b19eda3b29e4614dd9..730ef0e59511696f763561dc746b21ff5d8b81d0 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -309,39 +309,43 @@ int main (int argc, char *argv[])
             switch (getch ()) {
 #endif /* PDCURSES */
             case ALT_C: /* copy */
-                for (i = 0; i < list[panel]->nb; i++) {
-                    current = list[panel]->tab + i;
-                    if (current->selected) {
-                        char *src = newfilename (dirname[panel], current->name);
-                        char *dest = dirname[(panel + 1 ) % MAXPANELS];
-                        char *msg = processcopy (dest, src);
-                        if (msg) {
-                            errorwindow (msg, winscreen);
-                            free (msg);
+                if (askwindow (" Copy selected file(s) (Y/N) ", winscreen, "Yy", "Nn") == 1) {
+                    for (i = 0; i < list[panel]->nb; i++) {
+                        current = list[panel]->tab + i;
+                        if (current->selected) {
+                            char *src = newfilename (dirname[panel], current->name);
+                            char *dest = dirname[(panel + 1 ) % MAXPANELS];
+                            char *msg = processcopy (dest, src);
+                            if (msg) {
+                                errorwindow (msg, winscreen);
+                                free (msg);
+                            }
+                            free (src);
                         }
-                        free (src);
                     }
+                    freelist (list[panel]);
+                    list[panel] = NULL;
+                    freelist (list[(panel + 1) % MAXPANELS]);
+                    list[(panel + 1) % MAXPANELS] = NULL;
                 }
-                freelist (list[panel]);
-                list[panel] = NULL;
-                freelist (list[(panel + 1) % MAXPANELS]);
-                list[(panel + 1) % MAXPANELS] = NULL;
                 break;
             case ALT_D: /* delete */
-                for (i = 0; i < list[panel]->nb; i++) {
-                    current = list[panel]->tab + i;
-                    if (current->selected) {
-                        char *src = newfilename (dirname[panel], current->name);
-                        char *msg = processdelete (src);
-                        if (msg) {
-                            errorwindow (msg, winscreen);
-                            free (msg);
+                if (askwindow (" Delete selected file(s) (Y/N) ", winscreen, "Yy", "Nn") == 1) {
+                    for (i = 0; i < list[panel]->nb; i++) {
+                        current = list[panel]->tab + i;
+                        if (current->selected) {
+                            char *src = newfilename (dirname[panel], current->name);
+                            char *msg = processdelete (src);
+                            if (msg) {
+                                errorwindow (msg, winscreen);
+                                free (msg);
+                            }
+                            free (src);
                         }
-                        free (src);
                     }
+                    freelist (list[panel]);
+                    list[panel] = NULL;
                 }
-                freelist (list[panel]);
-                list[panel] = NULL;
                 break;
             case ALT_F: /* filter */
                 string = getwindow ("Set filter", winscreen, MAXFILTER / 2, MAXFILTER, NULL);
@@ -354,24 +358,26 @@ int main (int argc, char *argv[])
                 helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset);
                 break;
             case ALT_M: /* move */
-                for (i = 0; i < list[panel]->nb; i++) {
-                    current = list[panel]->tab + i;
-                    if (current->selected) {
-                        char *src = newfilename (dirname[panel], current->name);
-                        char *dest = newfilename (dirname[(panel + 1 ) % MAXPANELS], current->name);
-                        char *msg = processmove (dest, src);
-                        if (msg) {
-                            errorwindow (msg, winscreen);
-                            free (msg);
+                if (askwindow (" Move selected file(s) (Y/N) ", winscreen, "Yy", "Nn") == 1) {
+                    for (i = 0; i < list[panel]->nb; i++) {
+                        current = list[panel]->tab + i;
+                        if (current->selected) {
+                            char *src = newfilename (dirname[panel], current->name);
+                            char *dest = newfilename (dirname[(panel + 1 ) % MAXPANELS], current->name);
+                            char *msg = processmove (dest, src);
+                            if (msg) {
+                                errorwindow (msg, winscreen);
+                                free (msg);
+                            }
+                            free (src);
+                            free (dest);
                         }
-                        free (src);
-                        free (dest);
                     }
+                    freelist (list[panel]);
+                    list[panel] = NULL;
+                    freelist (list[(panel + 1) % MAXPANELS]);
+                    list[(panel + 1) % MAXPANELS] = NULL;
                 }
-                freelist (list[panel]);
-                list[panel] = NULL;
-                freelist (list[(panel + 1) % MAXPANELS]);
-                list[(panel + 1) % MAXPANELS] = NULL;
                 break;
             case ALT_N: /* new dir */
                 string = getwindow ("New directory", winscreen, MAXFNAME / 2, MAXFNAME, NULL);
@@ -443,7 +449,7 @@ int main (int argc, char *argv[])
                 menuwindow (winmenu, menu, &index_menu);
                 break;
             case ALT_X: /* chmod */
-                string = getwindow ("Change to mode", winscreen, 4, 4, "0644");
+                string = getwindow ("Change selected file(s) to mode", winscreen, 4, 4, "0644");
                 if (string) {
                     char *endptr = NULL;
                     int mode = strtol (string, &endptr, 8);
@@ -529,19 +535,19 @@ int main (int argc, char *argv[])
 /* test: touch .a .b && { sleep 1; echo -en 'k\er'; sleep 1; echo .b; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a .b */
 
 /* Move */
-/* test: touch .a0 && mkdir .a1 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm ../.a0 && rmdir ../.a1 */
-/* test: touch .a && touch ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a ../.a */
-/* test: touch .a && mkdir ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a && rmdir ../.a */
-/* test: mkdir .a && touch ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a && rm ../.a */
-/* test: mkdir .a && mkdir ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a && rmdir ../.a */
+/* test: touch .a0 && mkdir .a1 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm ../.a0 && rmdir ../.a1 */
+/* test: touch .a && touch ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -n y; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a ../.a */
+/* test: touch .a && mkdir ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -n y; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a && rmdir ../.a */
+/* test: mkdir .a && touch ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -n y; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a && rm ../.a */
+/* test: mkdir .a && mkdir ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -n y; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a && rmdir ../.a */
 
 /* Delete */
-/* test: touch .a0 && mkdir .a1 && touch .a1/a2 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ed'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
+/* test: touch .a0 && mkdir .a1 && touch .a1/a2 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ed'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
 
 /* Copy */
-/* test: mkdir .b .b/c .b/c/d && echo "test" > .a && touch .b/a .b/b && dd if=/dev/random bs=1k count=12 of=.b/c/d/e 2>/dev/null && md5=$(md5sum .b/c/d/e) && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ec'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(cat .a)" = test && test "$md5" = "$(cd ..; md5sum .b/c/d/e)" && rm .a ../.a .b/a ../.b/a .b/b ../.b/b .b/c/d/e ../.b/c/d/e && rmdir .b/c/d .b/c .b ../.b/c/d ../.b/c ../.b */
-/* test: echo "test" > .a && touch ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(ls -s ../.a)" = "0 ../.a" && rm .a ../.a */
-/* test: mkdir .a ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a ../.a */
+/* test: mkdir .b .b/c .b/c/d && echo "test" > .a && touch .b/a .b/b && dd if=/dev/random bs=1k count=12 of=.b/c/d/e 2>/dev/null && md5=$(md5sum .b/c/d/e) && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(cat .a)" = test && test "$md5" = "$(cd ..; md5sum .b/c/d/e)" && rm .a ../.a .b/a ../.b/a .b/b ../.b/b .b/c/d/e ../.b/c/d/e && rmdir .b/c/d .b/c .b ../.b/c/d ../.b/c ../.b */
+/* test: echo "test" > .a && touch ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(ls -s ../.a)" = "0 ../.a" && rm .a ../.a */
+/* test: mkdir .a ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a ../.a */
 
 /* Chmod */
 /* test: touch .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo -n 0640; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
@@ -551,7 +557,7 @@ 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: cp fm.c .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 110); 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 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: 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 */