return TRUE;
}
+/* Finish selection procedure before an operation */
+static void endselection(void)
+{
+ if (!cfg.selmode)
+ return;
+
+ cfg.selmode = 0;
+
+ if (selbufpos) { /* File path(s) written to the buffer */
+ writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
+ spawn(copier, NULL, NULL, NULL, F_NOTRACE);
+ selbufpos = 0;
+ }
+}
+
static bool selsafe(void)
{
/* Fail if selection file path not generated */
return FALSE;
}
- /* Warn if selection not completed */
- if (cfg.selmode) {
- printmsg("finish selection first");
- return FALSE;
- }
-
/* Fail if selection file path isn't accessible */
if (access(g_selpath, R_OK | W_OK) == -1) {
errno == ENOENT ? printmsg(messages[NONE_SELECTED]) : printwarn(NULL);
if (!ndents)
break; // fallthrough
case SEL_REDRAW: // fallthrough
- case SEL_RENAMEALL: // fallthrough
+ case SEL_RENAMEMUL: // fallthrough
case SEL_HELP: // fallthrough
case SEL_LOCK:
{
if (ndents)
copycurname();
goto begin;
- case SEL_RENAMEALL:
+ case SEL_RENAMEMUL:
+ endselection();
+
if (!batch_rename(path)) {
printwait("batch rename failed", &presel);
goto nochange;
case SEL_MV:
case SEL_RMMUL:
{
+ endselection();
+
if (!selsafe()) {
presel = MSGWAIT;
goto nochange;
case SEL_ARCHIVE:
r = get_input("archive selection (else current)? [y/Y confirms]");
if (r == 'y' || r == 'Y') {
+ endselection();
+
if (!selsafe()) {
presel = MSGWAIT;
goto nochange;
}
+
tmp = NULL;
} else if (!ndents) {
printwait("no files", &presel);
case SEL_PLUGIN: // fallthrough
case SEL_LAUNCH: // fallthrough
case SEL_RUNCMD:
+ endselection();
+
switch (sel) {
case SEL_EXEC:
if (!execute_file(cur, path, newpath, &presel))
SEL_OPENWITH,
SEL_NEW,
SEL_RENAME,
- SEL_RENAMEALL,
+ SEL_RENAMEMUL,
SEL_SSHFS,
SEL_UMOUNT,
SEL_HELP,
{ CONTROL('R'), SEL_RENAME },
{ KEY_F(2), SEL_RENAME },
/* Rename contents of current dir */
- { 'r', SEL_RENAMEALL },
+ { 'r', SEL_RENAMEMUL },
/* Connect to server over SSHFS */
{ 'c', SEL_SSHFS },
/* Disconnect a SSHFS mount point */