]> Sergey Matveev's repositories - nnn.git/commitdiff
Use reverse video in detail view
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 30 Mar 2017 05:14:26 +0000 (10:44 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 30 Mar 2017 05:17:06 +0000 (10:47 +0530)
1. Highlight the currently selected item in reverse video.
2. Fix: remember the current item when toggling detail view.

README.md
noice.c

index 3c1d664a07c2f1fd45f8863cfce442059e9440dd..1b76913267b853c071aa37115c0172b33e947cb5 100644 (file)
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@ I chose to fork noice because:
     - modification time
     - human-readable file size
     - number of entries in current directory
+    - current item in reverse video
   - Case-insensitive alphabetic content listing instead of upper case first
   - Roll over at the first and last entries of a directory (with Up/Down keys)
   - Sort entries by file size (largest to smallest)
diff --git a/noice.c b/noice.c
index 0446082f8b23d4b89420959045215ba8750c85d2..af3ac6a680e4657dbc321241f817021aea1ba184 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -42,6 +42,7 @@
 #define TOUPPER(ch) \
        (((ch) >= 'a' && (ch) <= 'z') ? ((ch) - 'a' + 'A') : (ch))
 #define MAX_LEN 1024
+#define cur(flag) (flag ? CURSR : EMPTY)
 
 struct assoc {
        char *regex; /* Regex to match on filename */
@@ -454,29 +455,35 @@ void
 printent_long(struct entry *ent, int active)
 {
        static char buf[18];
-       static struct tm *p;
+       const static struct tm *p;
 
        p = localtime(&ent->t);
        strftime(buf, 18, "%b %d %H:%M %Y", p);
 
+       if (active)
+               attron(A_REVERSE);
+
        if (S_ISDIR(ent->mode))
-               printw("%s%-32.32s D  %-18.18s\n", active ? CURSR : EMPTY, ent->name, buf);
+               printw("%s%-32.32s D  %-18.18s\n", cur(active), ent->name, buf);
        else if (S_ISLNK(ent->mode))
-               printw("%s%-32.32s L  %-18.18s\n", active ? CURSR : EMPTY, ent->name, buf);
+               printw("%s%-32.32s L  %-18.18s\n", cur(active), ent->name, buf);
        else if (S_ISSOCK(ent->mode))
-               printw("%s%-32.32s S  %-18.18s\n", active ? CURSR : EMPTY, ent->name, buf);
+               printw("%s%-32.32s S  %-18.18s\n", cur(active), ent->name, buf);
        else if (S_ISFIFO(ent->mode))
-               printw("%s%-32.32s F  %-18.18s\n", active ? CURSR : EMPTY, ent->name, buf);
+               printw("%s%-32.32s F  %-18.18s\n", cur(active), ent->name, buf);
        else if (S_ISBLK(ent->mode))
-               printw("%s%-32.32s B  %-18.18s\n", active ? CURSR : EMPTY, ent->name, buf);
+               printw("%s%-32.32s B  %-18.18s\n", cur(active), ent->name, buf);
        else if (S_ISCHR(ent->mode))
-               printw("%s%-32.32s C  %-18.18s\n", active ? CURSR : EMPTY, ent->name, buf);
+               printw("%s%-32.32s C  %-18.18s\n", cur(active), ent->name, buf);
        else if (ent->mode & S_IXUSR)
-               printw("%s%-32.32s E  %-18.18s %s\n", active ? CURSR : EMPTY, ent->name,
+               printw("%s%-32.32s E  %-18.18s %s\n", cur(active), ent->name,
                       buf, coolsize(ent->size));
        else
-               printw("%s%-32.32s R  %-18.18s %s\n", active ? CURSR : EMPTY, ent->name,
+               printw("%s%-32.32s R  %-18.18s %s\n", cur(active), ent->name,
                       buf, coolsize(ent->size));
+
+       if (active)
+               attroff(A_REVERSE);
 }
 
 int
@@ -845,6 +852,9 @@ nochange:
                case SEL_DETAIL:
                        showdetail = !showdetail;
                        showdetail ? (printptr = &printent_long) : (printptr = &printent);
+                       /* Save current */
+                       if (ndents > 0)
+                               mkpath(path, dents[cur].name, oldpath, sizeof(oldpath));
                        goto begin;
                case SEL_FSIZE:
                        sizeorder = !sizeorder;