]> Sergey Matveev's repositories - nnn.git/commitdiff
Status bar in context color
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 4 Apr 2020 18:09:21 +0000 (23:39 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 4 Apr 2020 18:09:21 +0000 (23:39 +0530)
src/nnn.c

index 188eacbc00e1ba1b57dfe7bad22746fa61d856a6..71d1c490ac66a486ed080eef6f39bd47f0ed7844 100644 (file)
--- 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();