aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-13 22:44:11 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-13 22:44:23 +0530
commitc8f080f0b5375d1428b30dc1c7cc6b564afdc7bf (patch)
tree5a472dca1b047da97063e765a096f3d143de4309 /src
parent573c61f3300d0146c0bfd31d556e752e753f52d6 (diff)
downloadnnn-c8f080f0b5375d1428b30dc1c7cc6b564afdc7bf.tar.gz
Update context switch logic
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 449de4f..117d329 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -3176,11 +3176,11 @@ nochange:
r = cfg.curctx;
if (fd == '>' || fd == '.')
do
- (r == CTX_MAX - 1) ? (r = 0) : ++r;
+ r = (r + 1) & ~CTX_MAX;
while (!g_ctx[r].c_cfg.ctxactive);
else
do
- (r == 0) ? (r = CTX_MAX - 1) : --r;
+ r = (r + (CTX_MAX - 1)) & (CTX_MAX - 1);
while (!g_ctx[r].c_cfg.ctxactive); // fallthrough
fd = '1' + r; // fallthrough
case '1': // fallthrough
@@ -3919,26 +3919,28 @@ nochange:
presel = MSGWAIT;
goto nochange;
}
- } // fallthrough
+ }
+
+ dentfree(dents);
+ return;
case SEL_QUITCTX:
- if (sel == SEL_QUITCTX) {
- r = cfg.curctx;
- for (fd = 1; fd < CTX_MAX; ++fd) {
- (r == CTX_MAX - 1) ? (r = 0) : ++r;
- if (g_ctx[r].c_cfg.ctxactive) {
- g_ctx[cfg.curctx].c_cfg.ctxactive = 0;
+ fd = cfg.curctx;
+ for (r = (fd + 1) & ~CTX_MAX;
+ (r != fd) && !g_ctx[r].c_cfg.ctxactive;
+ r = ((r + 1) & ~CTX_MAX));
- /* Switch to next active context */
- path = g_ctx[r].c_path;
- lastdir = g_ctx[r].c_last;
- lastname = g_ctx[r].c_name;
- cfg = g_ctx[r].c_cfg;
+ if (r != fd) {
+ g_ctx[fd].c_cfg.ctxactive = 0;
- cfg.curctx = r;
- setdirwatch();
- goto begin;
- }
- }
+ /* Switch to next active context */
+ path = g_ctx[r].c_path;
+ lastdir = g_ctx[r].c_last;
+ lastname = g_ctx[r].c_name;
+ cfg = g_ctx[r].c_cfg;
+
+ cfg.curctx = r;
+ setdirwatch();
+ goto begin;
}
dentfree(dents);