aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-02-27 21:03:14 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-02-28 22:36:54 +0530
commit3e053e9412bedb10f2a171ddfbbd72e7432a9bda (patch)
tree21c208395ac71aae75fddefbd28ee97258239ece /src
parent26861532a24d32405546d9734936c0f684db9b33 (diff)
downloadnnn-3e053e9412bedb10f2a171ddfbbd72e7432a9bda.tar.gz
Wild mode for nav-as-you-type
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c41
-rw-r--r--src/nnn.h3
2 files changed, 33 insertions, 11 deletions
diff --git a/src/nnn.c b/src/nnn.c
index cbad15e..14f72e1 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -285,7 +285,7 @@ typedef struct {
uint dircolor : 1; /* Current status of dir color */
uint metaviewer : 1; /* Index of metadata viewer in utils[] */
uint ctxactive : 1; /* Context active or not */
- uint reserved : 8;
+ uint reserved : 7;
/* The following settings are global */
uint curctx : 2; /* Current context number */
uint picker : 1; /* Write selection to user-specified file */
@@ -296,6 +296,7 @@ typedef struct {
uint runctx : 2; /* The context in which script is to be run */
uint restrict0b : 1; /* Restrict 0-byte file opening */
uint filter_re : 1; /* Use regex filters */
+ uint wild : 1; /* Do not sort entries on dir load */
} settings;
/* Contexts or workspaces */
@@ -311,7 +312,7 @@ typedef struct {
/* GLOBALS */
/* Configuration, contexts */
-static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
+static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0};
static context g_ctx[CTX_MAX] __attribute__ ((aligned));
static struct entry *dents;
@@ -2443,7 +2444,7 @@ static bool show_help(char *path)
"ce Edit in EDITOR p Open in PAGER\n"
"1ORDER TOGGLES\n"
"b^J Disk usage S Apparent du\n"
- "ct Time modified s Size\n"
+ "b^W Random s Size t Time modified\n"
"1MISC\n"
"9! ^] Spawn SHELL C Execute entry\n"
"9R ^V Run/pick script L Lock terminal\n"
@@ -2727,7 +2728,8 @@ static void populate(char *path, char *lastname)
if (!ndents)
return;
- qsort(dents, ndents, sizeof(*dents), entrycmp);
+ if (!cfg.wild)
+ qsort(dents, ndents, sizeof(*dents), entrycmp);
#ifdef DBGMODE
clock_gettime(CLOCK_REALTIME, &ts2);
@@ -2834,7 +2836,7 @@ static void redraw(char *path)
else
ncols -= 5;
- if (cfg.showcolor) {
+ if (!cfg.wild && cfg.showcolor) {
attron(COLOR_PAIR(cfg.curctx + 1) | A_BOLD);
cfg.dircolor = 1;
}
@@ -3301,6 +3303,7 @@ nochange:
}
#endif
presel = filterentries(path);
+
/* Save current */
if (ndents)
copycurname();
@@ -3311,7 +3314,8 @@ nochange:
case SEL_FSIZE: // fallthrough
case SEL_ASIZE: // fallthrough
case SEL_BSIZE: // fallthrough
- case SEL_MTIME:
+ case SEL_MTIME: // fallthrough
+ case SEL_WILD:
switch (sel) {
case SEL_MFLTR:
cfg.filtermode ^= 1;
@@ -3336,6 +3340,7 @@ nochange:
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.copymode = 0;
+ cfg.wild = 0;
break;
case SEL_ASIZE:
cfg.apparentsz ^= 1;
@@ -3344,8 +3349,7 @@ nochange:
cfg.blkorder = 1;
BLK_SHIFT = 0;
} else
- cfg.blkorder = 0;
- break;
+ cfg.blkorder = 0; // fallthrough
case SEL_BSIZE:
if (sel == SEL_BSIZE) {
if (!cfg.apparentsz)
@@ -3362,14 +3366,25 @@ nochange:
cfg.mtimeorder = 0;
cfg.sizeorder = 0;
cfg.copymode = 0;
+ cfg.wild = 0;
break;
- default: /* SEL_MTIME */
+ case SEL_MTIME:
cfg.mtimeorder ^= 1;
cfg.sizeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.copymode = 0;
+ cfg.wild = 0;
break;
+ default: /* SEL_WILD */
+ cfg.wild ^= 1;
+ cfg.mtimeorder = 0;
+ cfg.sizeorder = 0;
+ cfg.apparentsz = 0;
+ cfg.blkorder = 0;
+ cfg.copymode = 0;
+ setdirwatch();
+ goto nochange;
}
/* Save current */
@@ -4013,7 +4028,7 @@ static void usage(void)
{
fprintf(stdout,
"%s: nnn [-b key] [-C] [-e] [-i] [-l] [-n]\n"
- " [-p file] [-s] [-S] [-v] [-h] [PATH]\n\n"
+ " [-p file] [-s] [-S] [-v] [-w] [-h] [PATH]\n\n"
"The missing terminal file manager for X.\n\n"
"positional args:\n"
" PATH start dir [default: current dir]\n\n"
@@ -4028,6 +4043,7 @@ static void usage(void)
" -s string filters [default: regex]\n"
" -S du mode\n"
" -v show version\n"
+ " -w wild mode\n"
" -h show help\n\n"
"v%s\n%s\n", __func__, VERSION, GENERAL_INFO);
}
@@ -4038,7 +4054,7 @@ int main(int argc, char *argv[])
char *ipath = NULL;
int opt;
- while ((opt = getopt(argc, argv, "Slib:Cenp:svh")) != -1) {
+ while ((opt = getopt(argc, argv, "Slib:Cenp:svwh")) != -1) {
switch (opt) {
case 'S':
cfg.blkorder = 1;
@@ -4084,6 +4100,9 @@ int main(int argc, char *argv[])
case 'v':
fprintf(stdout, "%s\n", VERSION);
return 0;
+ case 'w':
+ cfg.wild = 1;
+ break;
case 'h':
usage();
return 0;
diff --git a/src/nnn.h b/src/nnn.h
index a588a33..a2a858b 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -70,6 +70,7 @@ enum action {
SEL_ASIZE, /* apparent size */
SEL_BSIZE, /* block size */
SEL_MTIME,
+ SEL_WILD,
SEL_REDRAW,
SEL_COPY,
SEL_COPYMUL,
@@ -183,6 +184,8 @@ static struct key bindings[] = {
{ CONTROL('J'), SEL_BSIZE },
/* Toggle sort by time */
{ 't', SEL_MTIME },
+ /* Wild mode */
+ { CONTROL('W'), SEL_WILD },
/* Redraw window */
{ CONTROL('L'), SEL_REDRAW },
/* Copy currently selected file path */