nnn

mirror of https://github.com/jarun/nnn
Log | Files | Refs | README | LICENSE

commit e0e393cb977c21f86c539d54382a5dc04498a9ca
parent 98a16fd09d23e4a7a58fc61ec04ea8f24849fba3
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date:   Sun, 12 Apr 2026 20:10:48 +0530

Load plugins in a lazy way

Diffstat:
Msrc/nnn.c | 23++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/nnn.c b/src/nnn.c @@ -409,7 +409,8 @@ typedef struct { uint_t usebsdtar : 1; /* Use bsdtar as default archive utility */ uint_t xprompt : 1; /* Use native prompt instead of readline prompt */ uint_t showlines : 1; /* Show line numbers */ - uint_t reserved : 5; /* Adjust when adding/removing a field */ + uint_t plugparsed : 1; /* Plugin kv pairs parsed */ + uint_t reserved : 4; /* Adjust when adding/removing a field */ } runstate; /* Contexts or workspaces */ @@ -6160,6 +6161,18 @@ static void printkv(kv *kvarr, FILE *f, uchar_t max, uchar_t id) fprintf(f, " %c: %s\n", (char)kvarr[i].key, val + kvarr[i].off); } +static bool lazy_parse_plug(void) +{ + if (!g_state.plugparsed) { + g_state.plugparsed = 1; + if (!parsekvpair(&plug, &pluginstr, NNN_PLUG, &maxplug)) { + printwait(env_cfg[NNN_PLUG], NULL); + return FALSE; + } + } + return TRUE; +} + static void printkeys(kv *kvarr, char *buf, uchar_t max) { uchar_t i = 0; @@ -6337,6 +6350,7 @@ static void show_help(const char *path) fprintf(f, "\n"); } + lazy_parse_plug(); if (plug) { fprintf(f, "PLUGIN KEYS\n"); printkv(plug, f, maxplug, NNN_PLUG); @@ -9426,6 +9440,7 @@ nochange: goto nochange; } + lazy_parse_plug(); if (!pkey) { r = xstrsncpy(g_buf, messages[MSG_KEYS], CMD_LEN_MAX); printkeys(plug, g_buf + r - 1, maxplug); @@ -10323,12 +10338,6 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - /* Parse plugins string */ - if (!parsekvpair(&plug, &pluginstr, NNN_PLUG, &maxplug)) { - msg(env_cfg[NNN_PLUG]); - return EXIT_FAILURE; - } - /* Parse order string */ if (!parsekvpair(&order, &orderstr, NNN_ORDER, &maxorder)) { msg(env_cfg[NNN_ORDER]);