aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-09-29 21:44:47 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-09-29 21:44:47 +0530
commitb046157b61b880adc9d601d2e3230dc96ec63029 (patch)
tree6d0ad497503d41a2e2ebbd6cd26aa28a2133062e /src
parent1d5f1bf653d4f53d15570bc7d3e7dc7a87efcf6b (diff)
downloadnnn-b046157b61b880adc9d601d2e3230dc96ec63029.tar.gz
End selection mode when an operation is run
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c34
-rw-r--r--src/nnn.h4
2 files changed, 28 insertions, 10 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 43cbb81..bb3c4bc 100644
--- a/src/nnn.c
+++ b/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))
diff --git a/src/nnn.h b/src/nnn.h
index 8720efc..209222c 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -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 */