diff options
Diffstat (limited to 'src/nnn.c')
-rw-r--r-- | src/nnn.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -871,6 +871,7 @@ static bool initcurses(void) nonl(); //intrflush(stdscr, FALSE); keypad(stdscr, TRUE); + mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED, NULL); curs_set(FALSE); /* Hide cursor */ start_color(); use_default_colors(); @@ -3034,6 +3035,7 @@ static void browse(char *ipath) bool dir_changed = FALSE; struct stat sb; char *path, *lastdir, *lastname, *dir, *tmp; + MEVENT event; atexit(dentfree); @@ -3131,6 +3133,45 @@ nochange: setdirwatch(); goto begin; + case SEL_CLICK: + if (getmouse(&event) != OK) + break; + // Handle clicking on a context at the top: + if (event.y == 0) { + // Get context from: "[1 2 3 4]..." + r = event.x/2; + if (event.x != 1 + 2*r) + break; // The character after the context number + if (0 <= r && r < CTX_MAX && r != cfg.curctx) { + savecurctx(&cfg, path, dents[cur].name, r); + + /* Reset the pointers */ + path = g_ctx[r].c_path; + lastdir = g_ctx[r].c_last; + lastname = g_ctx[r].c_name; + + setdirwatch(); + goto begin; + } + break; + } + // Handle clicking on a file: + if (2 <= event.y && event.y < LINES - 2) { + r = 0; + if (cur-(LINES-4)/2 > 0) + r = cur-(LINES-4)/2; + if (ndents >= LINES-4 && ndents - (LINES-4) < r) + r = ndents - (LINES-4); + r += event.y - 2; + if (r >= ndents) + break; + cur = r; + // Single click just selects, double click also opens + if (event.bstate != BUTTON1_DOUBLE_CLICKED) + break; + } else { + break; + } case SEL_NAV_IN: // fallthrough case SEL_GOIN: /* Cannot descend in empty directories */ |