]> Sergey Matveev's repositories - nnn.git/commitdiff
Added mouse support
authorBruce Hill <bruce@bruce-hill.com>
Wed, 8 May 2019 00:38:07 +0000 (17:38 -0700)
committerArun Prakash Jana <engineerarun@gmail.com>
Wed, 22 May 2019 03:14:19 +0000 (08:44 +0530)
src/nnn.c
src/nnn.h

index 8d1411473c06bf7cc03d2393e0ac70ce90f94125..fe62eb395a152f6f81819ac9500e84ede66063b2 100644 (file)
--- 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 */
index 312473c010c7439024820b54ef9c470ee5712425..9ef1a7ed08e5f2b015de7e0d3181b81b8a4802a7 100644 (file)
--- 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 },
 };