add function move
authorLaurent Mazet <mazet@softndesign.org>
Sun, 12 Jan 2025 16:46:22 +0000 (17:46 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Sun, 12 Jan 2025 16:46:22 +0000 (17:46 +0100)
fm.c
function.c
function.h

diff --git a/fm.c b/fm.c
index f6bda6f721767f9c3099dc75156cc695237c0d64..3de2dd1069bdde38d4710f03eba155417279d140 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -352,17 +352,23 @@ int main (int argc, char *argv[])
                 for (i = 0; i < list[panel]->nb; i++) {
                     current = list[panel]->tab + i;
                     if (current->selected) {
-                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name);
-                        char *dest = dirname[(panel + 1 ) % MAXPANELS];
-                        if (processmove (dest, src) != 0) {
-                            char *buf = strdupcat ("Can't copy '", src, "' to '", dest, "'", NULL);
+                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+                        char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], SEPARATOR, current->name, NULL);
+                        struct stat sb;
+                        if ((stat (dest, &sb) == 0) || (rename (src, dest) != 0)) {
+                            char *buf = strdupcat ("Can't move '", current->name, "' to '", dirname[(panel + 1 ) % MAXPANELS], "'", NULL);
                             msgwindow (buf, winscreen, 0);
                             getch ();
                             free (buf);
                         }
                         free (src);
+                        free (dest);
                     }
                 }
+                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);
@@ -435,18 +441,37 @@ int main (int argc, char *argv[])
 /* test: fm.exe -x 2>&1 | grep width */
 /* test: fm.exe -y 2>&1 | grep height */
 /* test: fm.exe _ 2>&1 | grep invalid */
+
+/* Basic 2 panels view and quit */
 /* test: { sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d . -d /dev -d .. -v 1 */
 /* test: { sleep 1; echo -en '\eq'; sleep 1; echo -en '\e'; sleep 1; echo -en '\eq'; sleep 1; echo; } | fm.exe */
+
+/* Help */
 /* test: { sleep 1; echo -en '\eh'; sleep 1; echo ""; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d . -d /dev -d .. */
+
+/* Navigation */
 /* test: { sleep 1; echo ; sleep 1; echo; sleep 1; echo -en '\tjikkkkklljllll'; sleep 1; echo -n ilk; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
 /* 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 */
+
+/* Filter and selection */
 /* 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 */
+
+/* New directory */
 /* 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 */
+
+/* Rename */
 /* test: touch .a && { sleep 1; echo -en 'k\er'; sleep 1; echo .aa; sleep 1; echo -en '\er'; sleep 1; echo .aa/1; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .aa */
 
+/* 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 */
+
 /* vim: set ts=4 sw=4 et: */
index 7258ca92caf4bef987a6db527d87844c40b9c05b..2d914c79cd749a0c632ad6852a23f4bc0ff61451 100644 (file)
@@ -371,9 +371,4 @@ int processdelete (char *src)
     return 0;
 }
 
-int processmove (char *dest, char *src)
-{
-    return 0;
-}
-
 /* vim: set ts=4 sw=4 et: */
index ea8440a20712cc641a87047d082d90e27caface3..8de42add302b53074bec6ebf69680c0dccd0c236 100644 (file)
@@ -43,8 +43,6 @@ int processcopy (char *dest, char *src);
 
 int processdelete (char *src);
 
-int processmove (char *dest, char *src);
-
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */