aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Bruce Hill <bruce@bruce-hill.com>2019-05-07 17:38:07 -0700
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-05-22 08:44:19 +0530
commit0eec240260a69ac6388cea962435099a2ff0fd34 (patch)
tree5ae7d2aebbd7cd59a907e0587b6b0444852cfcc7
parentece7654221f3e26f6574f83b2df9e8c4f6d18c63 (diff)
downloadnnn-0eec240260a69ac6388cea962435099a2ff0fd34.tar.gz
Added mouse support
-rw-r--r--src/nnn.c41
-rw-r--r--src/nnn.h2
2 files changed, 43 insertions, 0 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 8d14114..fe62eb3 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 312473c..9ef1a7e 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 },
};