mirror of
https://github.com/jarun/nnn.git
synced 2024-11-24 11:51:27 +00:00
More special variables at prompt/shell
$dN: directory path open in context N $fN: file path hovered in context N
This commit is contained in:
parent
6243de06f4
commit
900513710f
|
@ -98,7 +98,7 @@ It runs smoothly on the Pi, [Termux](https://www.youtube.com/embed/AbaauM7gUJw)
|
||||||
- Dir updates, notification on `cp`, `mv`, `rm` completion
|
- Dir updates, notification on `cp`, `mv`, `rm` completion
|
||||||
- Copy file paths to system clipboard on select
|
- Copy file paths to system clipboard on select
|
||||||
- Launch apps, run commands, spawn a shell, toggle exe
|
- Launch apps, run commands, spawn a shell, toggle exe
|
||||||
- Access hovered file at prompt or spawned shell
|
- Access context paths/files at prompt or spawned shell
|
||||||
- Lock terminal after configurable idle timeout
|
- Lock terminal after configurable idle timeout
|
||||||
- Capture and show output of a program in help screen
|
- Capture and show output of a program in help screen
|
||||||
- Basic support for screen readers and braille displays
|
- Basic support for screen readers and braille displays
|
||||||
|
|
43
src/nnn.c
43
src/nnn.c
|
@ -5276,14 +5276,12 @@ static bool launch_app(char *newpath)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns TRUE if at least command was run */
|
/* Returns TRUE if at least one command was run */
|
||||||
static bool prompt_run(const char *current)
|
static bool prompt_run(void)
|
||||||
{
|
{
|
||||||
bool ret = FALSE;
|
bool ret = FALSE;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
setenv(envs[ENV_NCUR], current, 1);
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
#ifndef NORL
|
#ifndef NORL
|
||||||
if (g_state.picker) {
|
if (g_state.picker) {
|
||||||
|
@ -5305,22 +5303,47 @@ static bool prompt_run(const char *current)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool handle_cmd(enum action sel, const char *current, char *newpath)
|
static void setexports(char *buf)
|
||||||
|
{
|
||||||
|
char dvar[] = "d0";
|
||||||
|
char fvar[] = "f0";
|
||||||
|
|
||||||
|
if (ndents) {
|
||||||
|
setenv(envs[ENV_NCUR], pdents[cur].name, 1);
|
||||||
|
xstrsncpy(g_ctx[cfg.curctx].c_name, pdents[cur].name, NAME_MAX + 1);
|
||||||
|
} else if (g_ctx[cfg.curctx].c_name[0])
|
||||||
|
g_ctx[cfg.curctx].c_name[0] = '\0';
|
||||||
|
|
||||||
|
for (uchar_t i = 0; i < CTX_MAX; ++i) {
|
||||||
|
if (g_ctx[i].c_cfg.ctxactive) {
|
||||||
|
dvar[1] = fvar[1] = '1' + i;
|
||||||
|
setenv(dvar, g_ctx[i].c_path, 1);
|
||||||
|
|
||||||
|
if (g_ctx[i].c_name[0]) {
|
||||||
|
mkpath(g_ctx[i].c_path, g_ctx[i].c_name, buf);
|
||||||
|
setenv(fvar, buf, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool handle_cmd(enum action sel, char *newpath)
|
||||||
{
|
{
|
||||||
endselection(FALSE);
|
endselection(FALSE);
|
||||||
|
|
||||||
if (sel == SEL_PROMPT)
|
|
||||||
return prompt_run(current);
|
|
||||||
|
|
||||||
if (sel == SEL_LAUNCH)
|
if (sel == SEL_LAUNCH)
|
||||||
return launch_app(newpath);
|
return launch_app(newpath);
|
||||||
|
|
||||||
|
setexports(newpath);
|
||||||
|
|
||||||
|
if (sel == SEL_PROMPT)
|
||||||
|
return prompt_run();
|
||||||
|
|
||||||
/* Set nnn nesting level */
|
/* Set nnn nesting level */
|
||||||
char *tmp = getenv(env_cfg[NNNLVL]);
|
char *tmp = getenv(env_cfg[NNNLVL]);
|
||||||
int r = tmp ? atoi(tmp) : 0;
|
int r = tmp ? atoi(tmp) : 0;
|
||||||
|
|
||||||
setenv(env_cfg[NNNLVL], xitoa(r + 1), 1);
|
setenv(env_cfg[NNNLVL], xitoa(r + 1), 1);
|
||||||
setenv(envs[ENV_NCUR], current, 1);
|
|
||||||
spawn(shell, NULL, NULL, NULL, F_CLI);
|
spawn(shell, NULL, NULL, NULL, F_CLI);
|
||||||
setenv(env_cfg[NNNLVL], xitoa(r), 1);
|
setenv(env_cfg[NNNLVL], xitoa(r), 1);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -7550,7 +7573,7 @@ nochange:
|
||||||
case SEL_SHELL: // fallthrough
|
case SEL_SHELL: // fallthrough
|
||||||
case SEL_LAUNCH: // fallthrough
|
case SEL_LAUNCH: // fallthrough
|
||||||
case SEL_PROMPT:
|
case SEL_PROMPT:
|
||||||
r = handle_cmd(sel, (ndents ? pdents[cur].name : ""), newpath);
|
r = handle_cmd(sel, newpath);
|
||||||
|
|
||||||
/* Continue in type-to-nav mode, if enabled */
|
/* Continue in type-to-nav mode, if enabled */
|
||||||
if (cfg.filtermode)
|
if (cfg.filtermode)
|
||||||
|
|
Loading…
Reference in a new issue