From b2f2b78990acb2bc6b02808433d05cfd7ec50fca Mon Sep 17 00:00:00 2001 From: lvgx Date: Sun, 1 Mar 2020 08:10:35 +0100 Subject: [PATCH] Add right click file selection (#482) --- src/nnn.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 0d9ad8a2..b44ed61f 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1458,9 +1458,11 @@ static bool initcurses(void *oldmask) keypad(stdscr, TRUE); #ifndef NOMOUSE #if NCURSES_MOUSE_VERSION <= 1 - mousemask(BUTTON1_PRESSED | BUTTON1_DOUBLE_CLICKED, (mmask_t *)oldmask); + mousemask(BUTTON1_PRESSED | BUTTON1_DOUBLE_CLICKED | BUTTON3_PRESSED, + (mmask_t *)oldmask); #else - mousemask(BUTTON1_PRESSED | BUTTON4_PRESSED | BUTTON5_PRESSED, (mmask_t *)oldmask); + mousemask(BUTTON1_PRESSED | BUTTON3_PRESSED | BUTTON4_PRESSED | BUTTON5_PRESSED, + (mmask_t *)oldmask); #endif mouseinterval(0); #endif @@ -4949,6 +4951,7 @@ static bool browse(char *ipath, const char *session) MEVENT event; struct timespec mousetimings[2] = {{.tv_sec = 0, .tv_nsec = 0}, {.tv_sec = 0, .tv_nsec = 0} }; bool currentmouse = 1; + bool rightclicksel = 0; #endif #ifndef DIR_LIMITED_SELECTION @@ -5162,9 +5165,18 @@ nochange: } /* Handle clicking on a file */ - if (event.y >= 2 && event.y <= ndents + 1 && event.bstate == BUTTON1_PRESSED) { + if (event.y >= 2 && event.y <= ndents + 1 && + (event.bstate == BUTTON1_PRESSED || + event.bstate == BUTTON3_PRESSED)) { r = curscroll + (event.y - 2); move_cursor(r, 1); + + /* Handle right click selection */ + if (event.bstate == BUTTON3_PRESSED) { + rightclicksel = 1; + goto selection; + } + currentmouse ^= 1; clock_gettime( #if defined(CLOCK_MONOTONIC_RAW) @@ -5600,6 +5612,7 @@ nochange: /* Repopulate as directory content may have changed */ goto begin; } +selection: case SEL_SEL: if (!ndents) goto nochange; @@ -5629,7 +5642,12 @@ nochange: if (!nselected) unlink(g_selpath); - +#ifndef NOMOUSE + if (rightclicksel) { + rightclicksel = 0; + break; + } +#endif /* move cursor to the next entry if this is not the last entry */ if (!cfg.picker && cur != ndents - 1) move_cursor((cur + 1) % ndents, 0);