aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-01-14 00:20:05 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-01-14 00:31:20 +0530
commit69efec865aa9ac641417ccdd75d1e7f0e34939b8 (patch)
tree478e5e1e83a3d10ea7dcd923d8ee267dc7dd697a
parent7bcf19189a88f5cebb0fab01a567fd99a91049c2 (diff)
downloadnnn-69efec865aa9ac641417ccdd75d1e7f0e34939b8.tar.gz
List from selection file if nothing selected
-rw-r--r--nnn.14
-rw-r--r--src/nnn.c19
-rw-r--r--src/nnn.h2
3 files changed, 15 insertions, 10 deletions
diff --git a/nnn.1 b/nnn.1
index ea3f971..2a4692a 100644
--- a/nnn.1
+++ b/nnn.1
@@ -176,11 +176,11 @@ There are 3 groups of keybinds to add files to selection:
.br
(3) add all files in the current directory to selection
.Pp
-A selection can be listed, edited, copied, moved, removed, archived or linked.
+A selection can be edited, copied, moved, removed, archived or linked.
.Pp
Absolute paths of the selected files are copied to \fB.selection\fR file in the config directory.
.Pp
-To edit the selection use the _edit selection_ key. Use this key to remove a file from selection after you navigate away from its directory. Editing doesn't end the selection mode. You can add more files to the selection and edit the list again.
+To edit the selection use the _edit selection_ key. Use this key to remove a file from selection after you navigate away from its directory. Editing doesn't end the selection mode. You can add more files to the selection and edit the list again. If no file is selected in the current session, this option attempts to list the selection file.
.Sh FILE SIZE
The minimum file size unit is byte (B). The rest are K, M, G, T, P, E, Z, Y (powers of 1024), same as the default units in \fIls\fR.
.Sh ENVIRONMENT
diff --git a/src/nnn.c b/src/nnn.c
index 57b578c..8ffb72e 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -474,6 +474,7 @@ static char * const utils[] = {
#define MSG_BOOKMARK_KEYS 36
#define MSG_INVALID_REG 37
#define MSG_ORDER 38
+#define MSG_LIST_SEL 39
static const char * const messages[] = {
"no traversal",
@@ -515,6 +516,7 @@ static const char * const messages[] = {
"bookmark keys:",
"invalid regex",
"toggle 'a'u / 'd'u / 'e'xtn / 'r'everse / 's'ize / 't'ime / 'v'ersion?",
+ "0 selected, list selection file?"
};
/* Supported configuration environment variables */
@@ -1019,6 +1021,7 @@ static bool listselbuf()
selbufpos = oldpos;
return TRUE;
}
+#endif
/* List selection from selection file (another instance) */
static bool listselfile(void)
@@ -1037,7 +1040,6 @@ static bool listselfile(void)
return TRUE;
}
-#endif
/* Reset selection indicators */
static void resetselind(void)
@@ -1099,11 +1101,14 @@ static int editselection(void)
int fd, lines = 0;
ssize_t count;
struct stat sb;
- struct timespec mtime;
+ time_t mtime;
if (!selbufpos) {
- DPRINTF_S("empty selection");
- return 0;
+ fd = get_input(messages[MSG_LIST_SEL]);
+ if ((fd == 'y' || fd == 'Y') && !listselfile())
+ return 0;
+
+ return 1;
}
fd = create_tmp_file();
@@ -1121,7 +1126,7 @@ static int editselection(void)
unlink(g_tmpfpath);
return -1;
}
- mtime = sb.st_mtim;
+ mtime = sb.st_mtime;
spawn((cfg.waitedit ? enveditor : editor), g_tmpfpath, NULL, NULL, F_CLI);
@@ -1134,7 +1139,7 @@ static int editselection(void)
fstat(fd, &sb);
- if (mtime.tv_sec == sb.st_mtim.tv_sec) {
+ if (mtime == sb.st_mtime) {
DPRINTF_S("selection is not modified");
unlink(g_tmpfpath);
return 1;
@@ -3627,7 +3632,7 @@ static void show_help(const char *path)
"cP Copy sel here%-11ca Select all\n"
"cV Move sel here%-10c^V Copy/move sel as\n"
"cX Delete sel%-13c^X Delete entry\n"
- "9o ^T Order toggle%-11c^Y Edit sel\n"
+ "9o ^T Order toggle%-11c^W Edit sel\n"
"1MISC\n"
"9; ^P Plugin%-18c= Launch app\n"
"9! ^] Shell%-19c] Cmd prompt\n"
diff --git a/src/nnn.h b/src/nnn.h
index 717e3e6..d39f824 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -189,7 +189,7 @@ static struct key bindings[] = {
/* Select all files in current dir */
{ 'a', SEL_SELALL },
/* List, edit selection */
- { CONTROL('Y'), SEL_SELEDIT },
+ { CONTROL('W'), SEL_SELEDIT },
/* Copy from selection buffer */
{ 'P', SEL_CP },
/* Move from selection buffer */