From 0e3146ebd2e19720401acb4f26bd0f9e7dd7526a Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sat, 4 Apr 2020 23:39:21 +0530 Subject: [PATCH] Status bar in context color --- src/nnn.c | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 188eacbc..71d1c490 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -668,7 +668,6 @@ static haiku_nm_h haiku_hnd; /* Function macros */ #define tolastln() move(xlines - 1, 0) #define exitcurses() endwin() -#define clearprompt() printmsg("") #define printwarn(presel) printwait(strerror(errno), presel) #define istopdir(path) ((path)[1] == '\0' && (path)[0] == '/') #define copycurname() xstrlcpy(lastname, dents[cur].name, NAME_MAX + 1) @@ -789,8 +788,10 @@ static void clearoldprompt(void) static void printmsg(const char *msg) { tolastln(); + attron(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); addstr(msg); - addch('\n'); + hline(' ', xcols); + attroff(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); } static void printwait(const char *msg, int *presel) @@ -814,13 +815,6 @@ static void printerr(int linenum) exit(1); } -/* Print prompt on the last line */ -static void printprompt(const char *str) -{ - clearprompt(); - addstr(str); -} - static void printinfoln(const char *str) { clearinfoln(); @@ -837,7 +831,7 @@ static int get_input(const char *prompt) int r; if (prompt) - printprompt(prompt); + printmsg(prompt); cleartimeout(); #ifdef KEY_RESIZE do { @@ -845,7 +839,7 @@ static int get_input(const char *prompt) if (r == KEY_RESIZE && prompt) { clearoldprompt(); xlines = LINES; - printprompt(prompt); + printmsg(prompt); } } while (r == KEY_RESIZE); #else @@ -2415,7 +2409,7 @@ static void showfilterinfo(void) static void showfilter(char *str) { showfilterinfo(); - printprompt(str); + printmsg(str); } static inline void swap_ent(int id1, int id2) @@ -2689,7 +2683,7 @@ static char *xreadline(const char *prefill, const char *prompt) errexit(); cleartimeout(); - printprompt(prompt); + printmsg(prompt); if (prefill) { DPRINTF_S(prefill); @@ -2707,8 +2701,10 @@ static char *xreadline(const char *prefill, const char *prompt) while (1) { buf[len] = ' '; + attron(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); mvaddnwstr(xlines - 1, x, buf, len + 1); move(xlines - 1, x + wcswidth(buf, pos)); + attroff(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); r = get_wch(ch); if (r == ERR) @@ -2747,7 +2743,7 @@ static char *xreadline(const char *prefill, const char *prompt) --pos; continue; case CONTROL('W'): - printprompt(prompt); + printmsg(prompt); do { if (pos == 0) break; @@ -2757,11 +2753,11 @@ static char *xreadline(const char *prefill, const char *prompt) } while (buf[pos - 1] != ' ' && buf[pos - 1] != '/'); // NOLINT continue; case CONTROL('K'): - printprompt(prompt); + printmsg(prompt); len = pos; continue; case CONTROL('L'): - printprompt(prompt); + printmsg(prompt); len = pos = 0; continue; case CONTROL('A'): @@ -2771,7 +2767,7 @@ static char *xreadline(const char *prefill, const char *prompt) pos = len; continue; case CONTROL('U'): - printprompt(prompt); + printmsg(prompt); memmove(buf, buf + pos, (len - pos) * WCHAR_T_WIDTH); len -= pos; pos = 0; @@ -2798,7 +2794,7 @@ static char *xreadline(const char *prefill, const char *prompt) case KEY_RESIZE: clearoldprompt(); xlines = LINES; - printprompt(prompt); + printmsg(prompt); break; #endif case KEY_LEFT: @@ -2838,7 +2834,7 @@ static char *xreadline(const char *prefill, const char *prompt) END: curs_set(FALSE); settimeout(); - clearprompt(); + printmsg(""); buf[len] = '\0'; @@ -4066,7 +4062,7 @@ static size_t handle_bookmark(const char *mark, char *newpath) ++r; } printkeys(bookmark, g_buf + r - 1, maxbm); - printprompt(g_buf); + printmsg(g_buf); r = FALSE; fd = get_input(NULL); @@ -4353,7 +4349,8 @@ static blkcnt_t dirwalk(char *path, struct stat *psb) ent_blocks = 0; tolastln(); addstr(xbasename(path)); - addstr(" [^C aborts]\n"); + addstr(" [^C aborts]"); + hline(' ', xcols); refresh(); if (nftw(path, nftw_fn, open_max, FTW_MOUNT | FTW_PHYS) < 0) { @@ -4402,6 +4399,8 @@ static int dentfill(char *path, struct entry **dents) goto exit; } else clear_hash(); + + attron(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); } #if _POSIX_C_SOURCE >= 200112L @@ -4575,6 +4574,9 @@ static int dentfill(char *path, struct entry **dents) } while ((dp = readdir(dirp))); exit: + if (cfg.blkorder) + attroff(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); + /* Should never be null */ if (closedir(dirp) == -1) errexit(); @@ -4890,6 +4892,7 @@ static void statusbar(char *path) ptr = "\b"; tolastln(); + attron(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); if (cfg.blkorder) { /* du mode */ char buf[24]; @@ -4921,7 +4924,8 @@ static void statusbar(char *path) addstr(ptr); } - addch('\n'); + hline(' ', xcols); + attroff(COLOR_PAIR(cfg.curctx + 1) | A_REVERSE); } static int adjust_cols(int ncols) @@ -6121,7 +6125,7 @@ nochange: r = xstrlcpy(g_buf, messages[MSG_PLUGIN_KEYS], CMD_LEN_MAX); printkeys(plug, g_buf + r - 1, maxplug); - printprompt(g_buf); + printmsg(g_buf); r = get_input(NULL); if (r != '\r') { endselection();