From 0eec240260a69ac6388cea962435099a2ff0fd34 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 7 May 2019 17:38:07 -0700 Subject: [PATCH] Added mouse support --- src/nnn.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/nnn.h | 2 ++ 2 files changed, 43 insertions(+) diff --git a/src/nnn.c b/src/nnn.c index 8d141147..fe62eb39 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -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 */ diff --git a/src/nnn.h b/src/nnn.h index 312473c0..9ef1a7ed 100644 --- a/src/nnn.h +++ b/src/nnn.h @@ -102,6 +102,7 @@ enum action { SEL_QUITCTX, SEL_QUITCD, SEL_QUIT, + SEL_CLICK, }; /* Associate a pressed key to an action */ @@ -256,4 +257,5 @@ static struct key bindings[] = { /* Quit */ { 'Q', SEL_QUIT }, { CONTROL('Q'), SEL_QUIT }, + { KEY_MOUSE, SEL_CLICK }, };