From f41e68742d82bcbfd6d541a07cdacee5417f48e7 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Tue, 31 Dec 2019 21:09:40 +0530 Subject: [PATCH] Fix 2 archive handling issues - 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 | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 93ef24d5..5bfa1f7f 100644 --- 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]);