mirror of
https://github.com/jarun/nnn.git
synced 2024-11-20 09:59:14 +00:00
End selection mode when an operation is run
This commit is contained in:
parent
1d5f1bf653
commit
b046157b61
34
src/nnn.c
34
src/nnn.c
|
@ -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))
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue