From 5dc0470c9a5161433410f08a3f8ea37a24528b10 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sun, 12 Jan 2025 17:46:22 +0100 Subject: [PATCH] add function move --- fm.c | 33 +++++++++++++++++++++++++++++---- function.c | 5 ----- function.h | 2 -- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/fm.c b/fm.c index f6bda6f..3de2dd1 100644 --- 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: */ diff --git a/function.c b/function.c index 7258ca9..2d914c7 100644 --- a/function.c +++ b/function.c @@ -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: */ diff --git a/function.h b/function.h index ea8440a..8de42ad 100644 --- a/function.h +++ b/function.h @@ -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: */ -- 2.30.2