Commit Diff


commit - 7ecf03450e8c1307a15b44f0933c9a4bc2e97c03
commit + cb23b74df4e63581a7c53bf2bfb6d90dcf85bc5c
blob - e7bbd912338887333c3535ecbad88562cb97cd37
blob + 1d10ed0ab2ca65a7d97615dc95f5302f2a4aacd7
--- config.h
+++ config.h
@@ -35,6 +35,7 @@
 #define RVC_STATUS      CYAN
 #define RVC_BORDER      BLUE
 #define RVC_SCROLLBAR   CYAN
+#define RVC_LINK        CYAN
 #define RVC_FILE        DEFAULT
 #define RVC_DIR         DEFAULT
 #define RVC_HIDDEN      YELLOW
blob - 376bbb56211c83e64fd005014ce830f1af016e0c
blob + 4e79093b48d7a04da1ae16a64f6c06d702ea4601
--- rover.c
+++ rover.c
@@ -47,6 +47,7 @@ typedef struct Row {
     char *name;
     off_t size;
     mode_t mode;
+    int islink;
     int marked;
 } Row;
 
@@ -83,6 +84,7 @@ static struct Rover {
 #define ENAME(I)    rover.rows[I].name
 #define ESIZE(I)    rover.rows[I].size
 #define EMODE(I)    rover.rows[I].mode
+#define ISLINK(I)   rover.rows[I].islink
 #define MARKED(I)   rover.rows[I].marked
 #define SCROLL      rover.scroll[rover.tab]
 #define ESEL        rover.esel[rover.tab]
@@ -341,7 +343,9 @@ update_view()
         isdir = S_ISDIR(EMODE(j));
         if (j == ESEL)
             wattr_on(rover.window, A_REVERSE, NULL);
-        if (ishidden)
+        if (ISLINK(j))
+            wcolor_set(rover.window, RVC_LINK, NULL);
+        else if (ishidden)
             wcolor_set(rover.window, RVC_HIDDEN, NULL);
         else if (isdir)
             wcolor_set(rover.window, RVC_DIR, NULL);
@@ -456,6 +460,8 @@ ls(Row **rowsp, uint8_t flags)
             continue;
         if (!(flags & SHOW_HIDDEN) && ep->d_name[0] == '.')
             continue;
+        lstat(ep->d_name, &statbuf);
+        rows[i].islink = S_ISLNK(statbuf.st_mode);
         stat(ep->d_name, &statbuf);
         if (S_ISDIR(statbuf.st_mode)) {
             if (flags & SHOW_DIRS) {