login

<     >

2014-11-13 12:49:37 (UTC-02:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Remove mark inversion.

File operations need to know the path of all marked entries. But
if the marks are inverted, then paths are only available when
the file operation occurs on the same directory as the marks.

diff --git a/config.h b/config.h
index eb86aa7..b32bf65 100644
--- a/config.h
+++ b/config.h
@@ -18,7 +18,7 @@
 #define RVK_TG_HIDDEN   "s"
 #define RVK_TG_MARK     "m"
 #define RVK_INVMARK     "M"
-#define RVK_TG_MARKALL  "a"
+#define RVK_MARKALL     "a"
 
 /* Colors available: DEFAULT, RED, GREEN, YELLOW, BLUE, CYAN, MAGENTA, WHITE. */
 #define RVC_CWD         GREEN

diff --git a/rover.c b/rover.c
index 876f172..ab6b85f 100644
--- a/rover.c
+++ b/rover.c
@@ -48,7 +48,6 @@ typedef struct {
 
 typedef struct {
     char dirpath[FILENAME_MAX];
-    int inverse;
     int bulk;
     int nentries;
     char **entries;
@@ -80,13 +79,11 @@ void
 init_marks(marks_t *marks)
 {
     strcpy(marks->dirpath, "");
-    marks->inverse = 0;
     marks->bulk = BULK_INIT;
     marks->nentries = 0;
     marks->entries = (char **) calloc(marks->bulk, sizeof(char *));
 }
 
-/* If marks->inverse is nonzero, this will actually mark all! */
 void
 mark_none(marks_t *marks)
 {
@@ -105,7 +102,6 @@ mark_none(marks_t *marks)
     }
 }
 
-/* If marks->inverse is nonzero, this will actually unmark entry! */
 void
 add_mark(marks_t *marks, char *dirpath, char *entry)
 {
@@ -141,7 +137,6 @@ add_mark(marks_t *marks, char *dirpath, char *entry)
     marks->nentries++;
 }
 
-/* If marks->inverse is nonzero, this will actually mark entry! */
 void
 del_mark(marks_t *marks, char *entry)
 {
@@ -260,7 +255,7 @@ update()
         else
             strcpy(ROW, FNAME(j));
         mvwhline(rover.window, i + 1, 1, ' ', COLS - 2);
-        if (marking && (MARKED(i) ^ rover.marks.inverse))
+        if (marking && MARKED(i))
             mvwaddch(rover.window, i + 1, 1, '*');
         else
             mvwaddch(rover.window, i + 1, 1, ' ');
@@ -699,19 +694,21 @@ main(int argc, char *argv[])
             update();
         }
         else if (!strcmp(key, RVK_INVMARK)) {
-            rover.marks.inverse = !rover.marks.inverse;
+            for (i = 0; i < rover.nfiles; i++) {
+                if (MARKED(i))
+                    del_mark(&rover.marks, FNAME(i));
+                else
+                    add_mark(&rover.marks, CWD, FNAME(i));
+                MARKED(i) = !MARKED(i);
+            }
             update();
         }
-        else if (!strcmp(key, RVK_TG_MARKALL)) {
-            strcpy(rover.marks.dirpath, CWD);
-            if (rover.marks.nentries) {
-                for (i = 0; i < rover.nfiles; i++)
-                    MARKED(i) = 0;
-                mark_none(&rover.marks);
-                rover.marks.inverse = 0;
-            }
-            else
-                rover.marks.inverse = !rover.marks.inverse;
+        else if (!strcmp(key, RVK_MARKALL)) {
+            for (i = 0; i < rover.nfiles; i++)
+                if (!MARKED(i)) {
+                    add_mark(&rover.marks, CWD, FNAME(i));
+                    MARKED(i) = 1;
+                }
             update();
         }
     }