diff --git a/README.md b/README.md index 9dfff772..1e4cae8f 100644 --- a/README.md +++ b/README.md @@ -276,6 +276,8 @@ If `nnn` is invoked as root or the environment variable `NNN_SHOW_HIDDEN` is set In this mode directories are opened in filter mode, allowing continuous navigation. Works best with the **arrow keys**. +In case of only one match and it's a directory, `nnn` auto selects the directory and enters it in this mode. + #### File indicators The following indicators are used in the detail view: diff --git a/nnn.1 b/nnn.1 index 0c71ebd9..fba08f2f 100644 --- a/nnn.1 +++ b/nnn.1 @@ -206,6 +206,8 @@ is invoked as root or the environment variable \fBNNN_SHOW_HIDDEN\fR is set the .Pp In the \fInavigate-as-you-type\fR mode directories are opened in filter mode, allowing continuous navigation. Works best with the \fBarrow keys\fR. +.br +In case of only one match and it's a directory, `nnn` auto selects the directory and enters it in this mode. .Sh MULTI-COPY MODE The absolute path of a single file can be copied to clipboard by pressing \fI^K\fR if NNN_COPIER is set (see ENVIRONMENT section below). diff --git a/nnn.c b/nnn.c index 179a804e..59750404 100644 --- a/nnn.c +++ b/nnn.c @@ -1161,6 +1161,21 @@ filterentries(char *path) ndents = total; if (matches(pln) == -1) continue; + + /* If the only match is a dir, auto-select and cd into it */ + if (cfg.filtermode && ndents == 1 && S_ISDIR(dents[0].mode)) { + *ch = KEY_ENTER; + cur = 0; + goto end; + } + + /* + * redraw() should be above the auto-select optimization, for + * the case where there's an issue with dir auto-select, say, + * due to a permission problem. The transition is jumpy in + * case of such an error. However, we optimize for successful + * cases where the dir has permissions. This skips a redraw(). + */ redraw(path); printprompt(ln); }