]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix 2 archive handling issues
authorArun Prakash Jana <engineerarun@gmail.com>
Tue, 31 Dec 2019 15:39:40 +0000 (21:09 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Tue, 31 Dec 2019 15:39:40 +0000 (21:09 +0530)
- when an archive is mounted, jump into the mount point
- while archiving the hovered file, exit if the archive name is same

src/nnn.c

index 93ef24d5627bea5a512eb9361c7c73d161c3da66..5bfa1f7f7dc41929c5976b1b47c87ac09cf3f49e 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -4566,6 +4566,11 @@ nochange:
                                        continue;
                                }
 
+                               if (!sb.st_size) {
+                                       printwait(messages[MSG_EMPTY_FILE], &presel);
+                                       goto nochange;
+                               }
+
                                if (!regexec(&archive_re, dents[cur].name, 0, NULL, 0)) {
                                        r = get_input(messages[MSG_ARCHIVE_OPTS]);
                                        if (r == 'l' || r == 'x') {
@@ -4575,24 +4580,31 @@ nochange:
                                                goto begin;
                                        }
 
-                                       fd = FALSE;
                                        if (r == 'm') {
-                                               if (!archive_mount(dents[cur].name, path, newpath, &presel))
-                                                       fd = MSG_FAILED;
-                                       } else if (r != 'd')
-                                               fd = MSG_INVALID_KEY;
+                                               if (archive_mount(dents[cur].name,
+                                                                 path, newpath, &presel)) {
+                                                       lastname[0] = '\0';
+
+                                                       /* Save last working directory */
+                                                       xstrlcpy(lastdir, path, PATH_MAX);
+
+                                                       /* Switch to mount point */
+                                                       xstrlcpy(path, newpath, PATH_MAX);
+
+                                                       setdirwatch();
+                                                       goto begin;
+                                               } else {
+                                                       printwait(messages[MSG_FAILED], &presel);
+                                                       goto nochange;
+                                               }
+                                       }
 
                                        if (r != 'd') {
-                                               fd ? printwait(messages[fd], &presel) : clearprompt();
+                                               printwait(messages[MSG_INVALID_KEY], &presel);
                                                goto nochange;
                                        }
                                }
 
-                               if (!sb.st_size) {
-                                       printwait(messages[MSG_EMPTY_FILE], &presel);
-                                       goto nochange;
-                               }
-
                                /* Invoke desktop opener as last resort */
                                spawn(opener, newpath, NULL, NULL, opener_flags);
                                continue;
@@ -5123,6 +5135,9 @@ nochange:
 
                        switch (sel) {
                        case SEL_ARCHIVE:
+                               if (r == 'c' && strcmp(tmp, dents[cur].name) == 0)
+                                       goto nochange;
+
                                mkpath(path, tmp, newpath);
                                if (access(newpath, F_OK) == 0) {
                                        fd = get_input(messages[MSG_OVERWRITE]);