Przeglądaj źródła

Support key q for context quit

master
Arun Prakash Jana 5 lat temu
rodzic
commit
8a9319fb79
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: A75979F35C080412
4 zmienionych plików z 74 dodań i 31 usunięć
  1. +6
    -3
      README.md
  2. +8
    -5
      nnn.1
  3. +56
    -21
      nnn.c
  4. +4
    -2
      nnn.h

+ 6
- 3
README.md Wyświetl plik

@@ -252,15 +252,16 @@ optional args:
L Lock terminal
o Launch GUI app
? Help, settings
Q, ^G Quit and cd
q, ^X Quit
q Quit context
^G Quit and cd
Q, ^X Quit
```

Help & settings, file details, media info and archive listing are shown in the PAGER. Please use the PAGER-specific keys in these screens.

#### Contexts

Contexts (aka _tabs_ aka _workspaces_) serve the purpose of exploring multiple directories in parallel. `nnn` provides 4 contexts simultaneously. The status of the contexts are shown in the top left corner:
Contexts (aka _tabs_ aka _workspaces_) serve the purpose of exploring multiple directories simultaneously. 4 contexts are available. The status of the contexts are shown in the top left corner:

- the current context is in reverse
- other used contexts are underlined
@@ -270,6 +271,8 @@ The bookmark prompt understands contexts. To switch contexts press `^B` and ente

The first time a context is entered, it copies the state of the last visited context. Each context remembers its start directory and last visited directory.

When a context is quit, the next active context is selected. If the last active context is quit, the program quits.

#### Filters

Filters support regexes to instantly (search-as-you-type) list the matching entries in the current directory.


+ 8
- 5
nnn.1 Wyświetl plik

@@ -119,9 +119,11 @@ Lock terminal (Linux only)
Launch a GUI application
.It Ic \&?
Toggle help and settings screen
.It Ic Q, ^G
.It Ic q
Quit the current context
.It Ic ^G
Quit and change directory
.It Ic q, ^X
.It Ic Q, ^X
Quit
.El
.Pp
@@ -181,9 +183,8 @@ to change to the last visited directory on quit requires shell integration in a
few easy steps. Please visit the project page (linked below) for the
instructions.
.Sh CONTEXTS
Contexts (aka \fItabs\fR aka \fIworkspaces\fR) serve the purpose of exploring multiple directories in parallel.
.Nm
provides 4 contexts simultaneously. The status of the contexts are shown in the top left corner:
Contexts (aka \fItabs\fR aka \fIworkspaces\fR) serve the purpose of exploring multiple directories
simultaneously. 4 contexts are available. The status of the contexts are shown in the top left corner:
.Pp
- the current context is in reverse
.br
@@ -194,6 +195,8 @@ provides 4 contexts simultaneously. The status of the contexts are shown in the
The bookmark prompt understands contexts. To switch contexts press \fI^B\fR and enter the context number (1-4).
.Pp
The first time a context is entered, it copies the state of the last visited context. Each context remembers its start directory and last visited directory.
.Pp
When a context is quit, the next active context is selected. If the last active context is quit, the program quits.
.Sh FILTERS
Filters support regexes to instantly (search-as-you-type) list the matching
entries in the current directory.


+ 56
- 21
nnn.c Wyświetl plik

@@ -1988,8 +1988,9 @@ static int show_help(char *path)
"eL Lock terminal\n"
"eo Launch GUI app\n"
"e? Help, settings\n"
"aQ, ^G Quit and cd\n"
"aq, ^X Quit\n\n"};
"eq Quit context\n"
"d^G Quit and cd\n"
"aQ, ^X Quit\n\n"};

if (fd == -1)
return -1;
@@ -2708,7 +2709,7 @@ nochange:
tmp = lastdir;

if (tmp[0] == '\0') {
printmsg("not set...");
printmsg("not set");
goto nochange;
}

@@ -2744,8 +2745,8 @@ nochange:
case '3': //fallthrough
case '4':
{
uint nextctx = tmp[0] - '1';
if (g_curctx == nextctx)
r = tmp[0] - '1'; /* Save the next context id */
if (g_curctx == r)
continue;

g_crc = 0;
@@ -2757,27 +2758,29 @@ nochange:
xstrlcpy(g_ctx[g_curctx].c_last, lastdir, PATH_MAX);
g_ctx[g_curctx].c_cfg = cfg;

if (!g_ctx[nextctx].c_cfg.ctxactive) {
if (!g_ctx[r].c_cfg.ctxactive) {
/* Setup a new context from current context */
g_ctx[nextctx].c_cfg.ctxactive = 1;
xstrlcpy(g_ctx[nextctx].c_name, oldname, NAME_MAX + 1);
xstrlcpy(g_ctx[nextctx].c_fltr, fltr, NAME_MAX + 1);
xstrlcpy(g_ctx[nextctx].c_path, path, PATH_MAX);
xstrlcpy(g_ctx[nextctx].c_init, path, PATH_MAX);
ipath = g_ctx[nextctx].c_init;
g_ctx[nextctx].c_last[0] = lastdir[0] = '\0';
g_ctx[nextctx].c_cfg = cfg;
g_ctx[r].c_cfg.ctxactive = 1;
xstrlcpy(g_ctx[r].c_name, oldname, NAME_MAX + 1);
xstrlcpy(g_ctx[r].c_fltr, fltr, NAME_MAX + 1);
xstrlcpy(g_ctx[r].c_path, path, PATH_MAX);
xstrlcpy(g_ctx[r].c_init, path, PATH_MAX);
ipath = g_ctx[r].c_init;
g_ctx[r].c_last[0] = lastdir[0] = '\0';
g_ctx[r].c_cfg = cfg;
} else {
/* Switch to saved context */
xstrlcpy(oldname, g_ctx[nextctx].c_name, NAME_MAX + 1);
xstrlcpy(fltr, g_ctx[nextctx].c_fltr, NAME_MAX + 1);
xstrlcpy(path, g_ctx[nextctx].c_path, PATH_MAX);
ipath = g_ctx[nextctx].c_init;
xstrlcpy(lastdir, g_ctx[nextctx].c_last, PATH_MAX);
cfg = g_ctx[nextctx].c_cfg;
xstrlcpy(oldname, g_ctx[r].c_name, NAME_MAX + 1);
xstrlcpy(fltr, g_ctx[r].c_fltr, NAME_MAX + 1);
xstrlcpy(path, g_ctx[r].c_path, PATH_MAX);
ipath = g_ctx[r].c_init;
xstrlcpy(lastdir, g_ctx[r].c_last, PATH_MAX);
cfg = g_ctx[r].c_cfg;
}

g_curctx = nextctx;
g_curctx = r;
if (cfg.filtermode)
presel = FILTER;
goto begin;
}
}
@@ -3281,6 +3284,38 @@ nochange:
case SEL_LOCK:
spawn(player, "", "screensaver", NULL, F_NORMAL | F_SIGINT);
break;
case SEL_QUITCTX:
{
uint iter = 1;
r = g_curctx;
while (iter < MAX_CTX) {
++r;
r %= MAX_CTX;
DPRINTF_D(r);
DPRINTF_U(g_ctx[r].c_cfg.ctxactive);
if (g_ctx[r].c_cfg.ctxactive) {
g_ctx[g_curctx].c_cfg.ctxactive = 0;

/* Switch to next active context */
xstrlcpy(oldname, g_ctx[r].c_name, NAME_MAX + 1);
xstrlcpy(fltr, g_ctx[r].c_fltr, NAME_MAX + 1);
xstrlcpy(path, g_ctx[r].c_path, PATH_MAX);
ipath = g_ctx[r].c_init;
xstrlcpy(lastdir, g_ctx[r].c_last, PATH_MAX);
cfg = g_ctx[r].c_cfg;

g_curctx = r;
if (cfg.filtermode)
presel = FILTER;
goto begin;
}

++iter;
}

dentfree(dents);
return;
}
case SEL_CDQUIT:
{
tmp = getenv("NNN_TMPFILE");


+ 4
- 2
nnn.h Wyświetl plik

@@ -79,6 +79,7 @@ enum action {
SEL_RUNSCRIPT,
SEL_RUNARG,
SEL_LOCK,
SEL_QUITCTX,
SEL_CDQUIT,
SEL_QUIT,
};
@@ -214,10 +215,11 @@ static struct key bindings[] = {
{ 'p', SEL_RUNARG, "less", "PAGER" },
/* Lock screen */
{ 'L', SEL_LOCK, "", "" },
/* Quit a context */
{ 'q', SEL_QUITCTX, "", "" },
/* Change dir on quit */
{ 'Q', SEL_CDQUIT, "", "" },
{ CONTROL('G'), SEL_CDQUIT, "", "" },
/* Quit */
{ 'q', SEL_QUIT, "", "" },
{ 'Q', SEL_QUIT, "", "" },
{ CONTROL('X'), SEL_QUIT, "", "" },
};

Ładowanie…
Anuluj
Zapisz