End selection mode when an operation is run

This commit is contained in:
Arun Prakash Jana 2019-09-29 21:44:47 +05:30
parent 1d5f1bf653
commit b046157b61
No known key found for this signature in database
GPG key ID: A75979F35C080412
3 changed files with 28 additions and 10 deletions

BIN
CHANGELOG

Binary file not shown.

View file

@ -887,6 +887,21 @@ static bool listselfile(void)
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 */
@ -895,12 +910,6 @@ static bool selsafe(void)
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);
@ -3998,7 +4007,7 @@ nochange:
if (!ndents)
break; // fallthrough
case SEL_REDRAW: // fallthrough
case SEL_RENAMEALL: // fallthrough
case SEL_RENAMEMUL: // fallthrough
case SEL_HELP: // fallthrough
case SEL_LOCK:
{
@ -4017,7 +4026,9 @@ nochange:
if (ndents)
copycurname();
goto begin;
case SEL_RENAMEALL:
case SEL_RENAMEMUL:
endselection();
if (!batch_rename(path)) {
printwait("batch rename failed", &presel);
goto nochange;
@ -4185,6 +4196,8 @@ nochange:
case SEL_MV:
case SEL_RMMUL:
{
endselection();
if (!selsafe()) {
presel = MSGWAIT;
goto nochange;
@ -4242,10 +4255,13 @@ 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);
@ -4409,6 +4425,8 @@ nochange:
case SEL_PLUGIN: // fallthrough
case SEL_LAUNCH: // fallthrough
case SEL_RUNCMD:
endselection();
switch (sel) {
case SEL_EXEC:
if (!execute_file(cur, path, newpath, &presel))

View file

@ -84,7 +84,7 @@ enum action {
SEL_OPENWITH,
SEL_NEW,
SEL_RENAME,
SEL_RENAMEALL,
SEL_RENAMEMUL,
SEL_SSHFS,
SEL_UMOUNT,
SEL_HELP,
@ -220,7 +220,7 @@ static struct key bindings[] = {
{ 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 */