]> Sergey Matveev's repositories - nnn.git/commitdiff
Selection should work across contexts
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 29 Nov 2019 22:58:09 +0000 (04:28 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 29 Nov 2019 22:58:09 +0000 (04:28 +0530)
src/nnn.c

index af5325400d5bca66367a4415edd7f68335378f9d..758f06dd017ecd0d677e0258d012f594339201a7 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -936,7 +936,8 @@ static bool listselbuf(const char *path, char *newpath)
        size_t pos;
        uint oldpos = selbufpos;
 
-       updateselbuf(path, newpath);
+       if (cfg.selmode)
+               updateselbuf(path, newpath);
 
        if (!selbufpos)
                return FALSE;
@@ -4141,7 +4142,7 @@ static void browse(char *ipath, const char *session)
        char *path, *lastdir, *lastname, *dir, *tmp;
        MEVENT event;
        struct timespec mousetimings[2] = {{.tv_sec = 0, .tv_nsec = 0}, {.tv_sec = 0, .tv_nsec = 0} };
-       bool currentmouse = 1;
+       bool currentmouse = 1, ctx_changed = FALSE;
 
        atexit(dentfree);
 
@@ -4173,8 +4174,10 @@ static void browse(char *ipath, const char *session)
                errexit();
 
 begin:
-       if (cfg.selmode && nselected && lastdir[0])
+       if (cfg.selmode && lastdir[0] && !ctx_changed)
                updateselbuf(lastdir, newpath);
+       else if (ctx_changed)
+               ctx_changed = FALSE;
 
 #ifdef LINUX_INOTIFY
        if ((presel == FILTER || dir_changed) && inotify_wd >= 0) {
@@ -4577,6 +4580,11 @@ nochange:
                                                continue;
                                }
 
+                               if (cfg.selmode) {
+                                       updateselbuf(path, newpath);
+                                       ctx_changed = TRUE;
+                               }
+
                                savecurctx(&cfg, path, dents[cur].name, r);
 
                                /* Reset the pointers */