From f7dd38d90e517314cbd95145d74f99d2c0f15546 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Tue, 9 Apr 2019 20:25:17 +0530 Subject: [PATCH] Remember detail/light mode of context --- src/nnn.c | 69 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 344b04d2..8fa281c1 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1869,35 +1869,6 @@ static int xlink(char *suffix, char *path, char *buf, int type) return count; } -static void savecurctx(settings *curcfg, char *path, char *curname, int r /* next context num */) -{ - settings cfg = *curcfg; - -#ifdef DIR_LIMITED_COPY - g_crc = 0; -#endif - /* Save current context */ - xstrlcpy(g_ctx[cfg.curctx].c_name, curname, NAME_MAX + 1); - g_ctx[cfg.curctx].c_cfg = cfg; - - if (g_ctx[r].c_cfg.ctxactive) /* Switch to saved context */ - cfg = g_ctx[r].c_cfg; - else { /* Setup a new context from current context */ - g_ctx[r].c_cfg.ctxactive = 1; - xstrlcpy(g_ctx[r].c_path, path, PATH_MAX); - g_ctx[r].c_last[0] = '\0'; - xstrlcpy(g_ctx[r].c_name, curname, NAME_MAX + 1); - g_ctx[r].c_fltr[0] = g_ctx[r].c_fltr[1] = '\0'; - g_ctx[r].p_fltr = g_ctx[r].c_fltr + 1; - g_ctx[r].c_cfg = cfg; - g_ctx[r].c_cfg.runscript = 0; - } - - cfg.curctx = r; - - *curcfg = cfg; -} - static bool parsebmstr(void) { int i = 0; @@ -2204,6 +2175,40 @@ static void printent_long(const struct entry *ent, int sel, uint namecols) static void (*printptr)(const struct entry *ent, int sel, uint namecols) = &printent_long; +static void savecurctx(settings *curcfg, char *path, char *curname, int r /* next context num */) +{ + settings cfg = *curcfg; + +#ifdef DIR_LIMITED_COPY + g_crc = 0; +#endif + /* Save current context */ + xstrlcpy(g_ctx[cfg.curctx].c_name, curname, NAME_MAX + 1); + g_ctx[cfg.curctx].c_cfg = cfg; + + if (g_ctx[r].c_cfg.ctxactive) { /* Switch to saved context */ + /* Switch light/detail mode */ + if (cfg.showdetail != g_ctx[r].c_cfg.showdetail) + /* set the reverse */ + printptr = cfg.showdetail ? &printent : &printent_long; + + cfg = g_ctx[r].c_cfg; + } else { /* Setup a new context from current context */ + g_ctx[r].c_cfg.ctxactive = 1; + xstrlcpy(g_ctx[r].c_path, path, PATH_MAX); + g_ctx[r].c_last[0] = '\0'; + xstrlcpy(g_ctx[r].c_name, curname, NAME_MAX + 1); + g_ctx[r].c_fltr[0] = g_ctx[r].c_fltr[1] = '\0'; + g_ctx[r].p_fltr = g_ctx[r].c_fltr + 1; + g_ctx[r].c_cfg = cfg; + g_ctx[r].c_cfg.runscript = 0; + } + + cfg.curctx = r; + + *curcfg = cfg; +} + /* * Gets only a single line (that's what we need * for now) or shows full command output in pager. @@ -3929,6 +3934,12 @@ nochange: path = g_ctx[r].c_path; lastdir = g_ctx[r].c_last; lastname = g_ctx[r].c_name; + + /* Switch light/detail mode */ + if (cfg.showdetail != g_ctx[r].c_cfg.showdetail) + /* Set the reverse */ + printptr = cfg.showdetail ? &printent : &printent_long; + cfg = g_ctx[r].c_cfg; cfg.curctx = r;