|
@@ -256,18 +256,17 @@ typedef struct { |
|
|
uint extnorder : 1; /* Order by extension */ |
|
|
uint extnorder : 1; /* Order by extension */ |
|
|
uint showhidden : 1; /* Set to show hidden files */ |
|
|
uint showhidden : 1; /* Set to show hidden files */ |
|
|
uint selmode : 1; /* Set when selecting files */ |
|
|
uint selmode : 1; /* Set when selecting files */ |
|
|
uint showdetail : 1; /* Clear to show fewer file info */ |
|
|
|
|
|
|
|
|
uint showdetail : 1; /* Clear to show lesser file info */ |
|
|
uint ctxactive : 1; /* Context active or not */ |
|
|
uint ctxactive : 1; /* Context active or not */ |
|
|
uint reverse : 1; /* Reverse sort */ |
|
|
uint reverse : 1; /* Reverse sort */ |
|
|
uint version : 1; /* Version sort */ |
|
|
uint version : 1; /* Version sort */ |
|
|
uint reserved1 : 1; |
|
|
uint reserved1 : 1; |
|
|
/* The following settings are global */ |
|
|
/* The following settings are global */ |
|
|
uint curctx : 3; /* Current context number */ |
|
|
uint curctx : 3; /* Current context number */ |
|
|
uint picker : 1; /* Write selection to user-specified file */ |
|
|
|
|
|
uint pickraw : 1; /* Write selection to sdtout before exit */ |
|
|
|
|
|
|
|
|
uint reserved2 : 2; |
|
|
uint nonavopen : 1; /* Open file on right arrow or `l` */ |
|
|
uint nonavopen : 1; /* Open file on right arrow or `l` */ |
|
|
uint autoselect : 1; /* Auto-select dir in type-to-nav mode */ |
|
|
uint autoselect : 1; /* Auto-select dir in type-to-nav mode */ |
|
|
uint metaviewer : 1; /* Index of metadata viewer in utils[] */ |
|
|
|
|
|
|
|
|
uint reserved3 : 1; |
|
|
uint useeditor : 1; /* Use VISUAL to open text files */ |
|
|
uint useeditor : 1; /* Use VISUAL to open text files */ |
|
|
uint runplugin : 1; /* Choose plugin mode */ |
|
|
uint runplugin : 1; /* Choose plugin mode */ |
|
|
uint runctx : 2; /* The context in which plugin is to be run */ |
|
|
uint runctx : 2; /* The context in which plugin is to be run */ |
|
@@ -292,7 +291,9 @@ typedef struct { |
|
|
uint autofifo : 1; /* Auto-create NNN_FIFO */ |
|
|
uint autofifo : 1; /* Auto-create NNN_FIFO */ |
|
|
uint initfile : 1; /* Positional arg is a file */ |
|
|
uint initfile : 1; /* Positional arg is a file */ |
|
|
uint dircolor : 1; /* Current status of dir color */ |
|
|
uint dircolor : 1; /* Current status of dir color */ |
|
|
uint reserved : 21; |
|
|
|
|
|
|
|
|
uint picker : 1; /* Write selection to user-specified file */ |
|
|
|
|
|
uint pickraw : 1; /* Write selection to sdtout before exit */ |
|
|
|
|
|
uint reserved : 19; |
|
|
} runstate; |
|
|
} runstate; |
|
|
|
|
|
|
|
|
/* Contexts or workspaces */ |
|
|
/* Contexts or workspaces */ |
|
@@ -331,11 +332,10 @@ static settings cfg = { |
|
|
0, /* version */ |
|
|
0, /* version */ |
|
|
0, /* reserved1 */ |
|
|
0, /* reserved1 */ |
|
|
0, /* curctx */ |
|
|
0, /* curctx */ |
|
|
0, /* picker */ |
|
|
|
|
|
0, /* pickraw */ |
|
|
|
|
|
|
|
|
0, /* reserved2 */ |
|
|
0, /* nonavopen */ |
|
|
0, /* nonavopen */ |
|
|
1, /* autoselect */ |
|
|
1, /* autoselect */ |
|
|
0, /* metaviewer */ |
|
|
|
|
|
|
|
|
0, /* reserved3 */ |
|
|
0, /* useeditor */ |
|
|
0, /* useeditor */ |
|
|
0, /* runplugin */ |
|
|
0, /* runplugin */ |
|
|
0, /* runctx */ |
|
|
0, /* runctx */ |
|
@@ -825,7 +825,7 @@ static void printerr(int linenum) |
|
|
{ |
|
|
{ |
|
|
exitcurses(); |
|
|
exitcurses(); |
|
|
perror(xitoa(linenum)); |
|
|
perror(xitoa(linenum)); |
|
|
if (!cfg.picker && selpath) |
|
|
|
|
|
|
|
|
if (!g_state.picker && selpath) |
|
|
unlink(selpath); |
|
|
unlink(selpath); |
|
|
free(pselbuf); |
|
|
free(pselbuf); |
|
|
exit(1); |
|
|
exit(1); |
|
@@ -1158,7 +1158,7 @@ static int create_tmp_file(void) |
|
|
/* Writes buflen char(s) from buf to a file */ |
|
|
/* Writes buflen char(s) from buf to a file */ |
|
|
static void writesel(const char *buf, const size_t buflen) |
|
|
static void writesel(const char *buf, const size_t buflen) |
|
|
{ |
|
|
{ |
|
|
if (cfg.pickraw || !selpath) |
|
|
|
|
|
|
|
|
if (g_state.pickraw || !selpath) |
|
|
return; |
|
|
return; |
|
|
|
|
|
|
|
|
FILE *fp = fopen(selpath, "w"); |
|
|
FILE *fp = fopen(selpath, "w"); |
|
@@ -1523,7 +1523,7 @@ static bool initcurses(void *oldmask) |
|
|
(void) oldmask; |
|
|
(void) oldmask; |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
if (cfg.picker) { |
|
|
|
|
|
|
|
|
if (g_state.picker) { |
|
|
if (!newterm(NULL, stderr, stdin)) { |
|
|
if (!newterm(NULL, stderr, stdin)) { |
|
|
fprintf(stderr, "newterm!\n"); |
|
|
fprintf(stderr, "newterm!\n"); |
|
|
return FALSE; |
|
|
return FALSE; |
|
@@ -5443,7 +5443,7 @@ nochange: |
|
|
goto begin; |
|
|
goto begin; |
|
|
|
|
|
|
|
|
/* If STDIN is no longer a tty (closed) we should exit */ |
|
|
/* If STDIN is no longer a tty (closed) we should exit */ |
|
|
if (!isatty(STDIN_FILENO) && !cfg.picker) |
|
|
|
|
|
|
|
|
if (!isatty(STDIN_FILENO) && !g_state.picker) |
|
|
return EXIT_FAILURE; |
|
|
return EXIT_FAILURE; |
|
|
|
|
|
|
|
|
sel = nextsel(presel); |
|
|
sel = nextsel(presel); |
|
@@ -5613,7 +5613,7 @@ nochange: |
|
|
case S_IFREG: |
|
|
case S_IFREG: |
|
|
{ |
|
|
{ |
|
|
/* If opened as vim plugin and Enter/^M pressed, pick */ |
|
|
/* If opened as vim plugin and Enter/^M pressed, pick */ |
|
|
if (cfg.picker && sel == SEL_GOIN) { |
|
|
|
|
|
|
|
|
if (g_state.picker && sel == SEL_GOIN) { |
|
|
appendfpath(newpath, mkpath(path, dents[cur].name, newpath)); |
|
|
appendfpath(newpath, mkpath(path, dents[cur].name, newpath)); |
|
|
writesel(pselbuf, selbufpos - 1); |
|
|
writesel(pselbuf, selbufpos - 1); |
|
|
return EXIT_SUCCESS; |
|
|
return EXIT_SUCCESS; |
|
@@ -6031,7 +6031,7 @@ nochange: |
|
|
else |
|
|
else |
|
|
#endif |
|
|
#endif |
|
|
/* move cursor to the next entry if this is not the last entry */ |
|
|
/* move cursor to the next entry if this is not the last entry */ |
|
|
if (!cfg.picker && cur != ndents - 1) |
|
|
|
|
|
|
|
|
if (!g_state.picker && cur != ndents - 1) |
|
|
move_cursor((cur + 1) % ndents, 0); |
|
|
move_cursor((cur + 1) % ndents, 0); |
|
|
break; |
|
|
break; |
|
|
case SEL_SELMUL: |
|
|
case SEL_SELMUL: |
|
@@ -6450,7 +6450,7 @@ nochange: |
|
|
default: /* SEL_RUNCMD */ |
|
|
default: /* SEL_RUNCMD */ |
|
|
r = TRUE; |
|
|
r = TRUE; |
|
|
#ifndef NORL |
|
|
#ifndef NORL |
|
|
if (cfg.picker) { |
|
|
|
|
|
|
|
|
if (g_state.picker) { |
|
|
#endif |
|
|
#endif |
|
|
tmp = xreadline(NULL, ">>> "); |
|
|
tmp = xreadline(NULL, ">>> "); |
|
|
#ifndef NORL |
|
|
#ifndef NORL |
|
@@ -6559,7 +6559,7 @@ nochange: |
|
|
/* In vim picker mode, clear selection and exit */ |
|
|
/* In vim picker mode, clear selection and exit */ |
|
|
/* Picker mode: reset buffer or clear file */ |
|
|
/* Picker mode: reset buffer or clear file */ |
|
|
if (sel == SEL_QUITCD || getenv("NNN_TMPFILE")) |
|
|
if (sel == SEL_QUITCD || getenv("NNN_TMPFILE")) |
|
|
cfg.picker ? selbufpos = 0 : write_lastdir(path); |
|
|
|
|
|
|
|
|
g_state.picker ? selbufpos = 0 : write_lastdir(path); |
|
|
return sel == SEL_QUITFAIL ? EXIT_FAILURE : EXIT_SUCCESS; |
|
|
return sel == SEL_QUITFAIL ? EXIT_FAILURE : EXIT_SUCCESS; |
|
|
#ifndef NOFIFO |
|
|
#ifndef NOFIFO |
|
|
case SEL_FIFO: |
|
|
case SEL_FIFO: |
|
@@ -6919,7 +6919,7 @@ static bool setup_config(void) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* Set selection file path */ |
|
|
/* Set selection file path */ |
|
|
if (!cfg.picker) { |
|
|
|
|
|
|
|
|
if (!g_state.picker) { |
|
|
char *env_sel = xgetenv(env_cfg[NNN_SEL], NULL); |
|
|
char *env_sel = xgetenv(env_cfg[NNN_SEL], NULL); |
|
|
if (env_sel) |
|
|
if (env_sel) |
|
|
selpath = xstrdup(env_sel); |
|
|
selpath = xstrdup(env_sel); |
|
@@ -7059,9 +7059,9 @@ int main(int argc, char *argv[]) |
|
|
if (env_opts_id >= 0) |
|
|
if (env_opts_id >= 0) |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
cfg.picker = 1; |
|
|
|
|
|
|
|
|
g_state.picker = 1; |
|
|
if (optarg[0] == '-' && optarg[1] == '\0') |
|
|
if (optarg[0] == '-' && optarg[1] == '\0') |
|
|
cfg.pickraw = 1; |
|
|
|
|
|
|
|
|
g_state.pickraw = 1; |
|
|
else { |
|
|
else { |
|
|
fd = open(optarg, O_WRONLY | O_CREAT, 0600); |
|
|
fd = open(optarg, O_WRONLY | O_CREAT, 0600); |
|
|
if (fd == -1) { |
|
|
if (fd == -1) { |
|
@@ -7368,9 +7368,9 @@ int main(int argc, char *argv[]) |
|
|
} |
|
|
} |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
if (cfg.pickraw || cfg.picker) { |
|
|
|
|
|
|
|
|
if (g_state.pickraw || g_state.picker) { |
|
|
if (selbufpos) { |
|
|
if (selbufpos) { |
|
|
fd = cfg.pickraw ? 1 : open(selpath, O_WRONLY | O_CREAT, 0600); |
|
|
|
|
|
|
|
|
fd = g_state.pickraw ? 1 : open(selpath, O_WRONLY | O_CREAT, 0600); |
|
|
if ((fd == -1) || (seltofile(fd, NULL) != (size_t)(selbufpos))) |
|
|
if ((fd == -1) || (seltofile(fd, NULL) != (size_t)(selbufpos))) |
|
|
xerror(); |
|
|
xerror(); |
|
|
|
|
|
|
|
|