From 9c7c7284c08ba0f390dd7e3c36f0fa5fdd8cc8a7 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Wed, 20 Sep 2023 23:02:04 +0530 Subject: [PATCH] Option `-N` to use native prompt This is useful for situations where the executable is compiled with readline support but the user wants to use the native prompt. Often this happens because packagers build without readline disabled. --- src/nnn.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 21a7370b..0388b23c 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -389,7 +389,8 @@ typedef struct { uint_t trash : 2; /* Trash method 0: rm -rf, 1: trash-cli, 2: gio trash */ uint_t uidgid : 1; /* Show owner and group info */ uint_t usebsdtar : 1; /* Use bsdtar as default archive utility */ - uint_t reserved : 5; /* Adjust when adding/removing a field */ + uint_t xprompt : 1; /* Use native prompt instead of readline prompt */ + uint_t reserved : 4; /* Adjust when adding/removing a field */ } runstate; /* Contexts or workspaces */ @@ -5479,7 +5480,7 @@ static bool prompt_run(void) while (1) { #ifndef NORL - if (g_state.picker) { + if (g_state.picker || g_state.xprompt) { #endif cmdline = xreadline(NULL, PROMPT); #ifndef NORL @@ -7695,7 +7696,7 @@ nochange: break; case SEL_OPENWITH: #ifndef NORL - if (g_state.picker) { + if (g_state.picker || g_state.xprompt) { #endif tmp = xreadline(NULL, messages[MSG_OPEN_WITH]); #ifndef NORL @@ -8340,6 +8341,9 @@ static void usage(void) " -K detect key collision and exit\n" " -l val set scroll lines\n" " -n type-to-nav mode\n" +#ifndef NORL + " -N use native prompt\n" +#endif " -o open files only on Enter\n" " -p file selection file [-:stdout]\n" " -P key run plugin key\n" @@ -8517,7 +8521,7 @@ int main(int argc, char *argv[]) while ((opt = (env_opts_id > 0 ? env_opts[--env_opts_id] - : getopt(argc, argv, "aAb:BcCdDeEfF:gHiJKl:nop:P:QrRs:St:T:uUVxh"))) != -1) { + : getopt(argc, argv, "aAb:BcCdDeEfF:gHiJKl:nNop:P:QrRs:St:T:uUVxh"))) != -1) { switch (opt) { #ifndef NOFIFO case 'a': @@ -8590,6 +8594,11 @@ int main(int argc, char *argv[]) case 'n': cfg.filtermode = 1; break; +#ifndef NORL + case 'N': + g_state.xprompt = 1; + break; +#endif case 'o': cfg.nonavopen = 1; break; @@ -8965,7 +8974,7 @@ int main(int argc, char *argv[]) exitcurses(); #ifndef NORL - if (rlhist) { + if (rlhist && !g_state.xprompt) { mkpath(cfgpath, ".history", g_buf); write_history(g_buf); }