diff --git a/README.md b/README.md
index f1313033..047d977f 100644
--- a/README.md
+++ b/README.md
@@ -50,8 +50,8 @@ It runs on Linux, macOS, Raspberry Pi, BSD, Cygwin, Linux subsystem for Windows
- [Quickstart](#quickstart)
- [Usage](#usage)
- [Cmdline options](#cmdline-options)
- - [Keyboard shortcuts](#keyboard-shortcuts)
- - [Leader key](#leader-key)
+ - [Keyboard and mouse](#keyboard-and-mouse)
+ - [Leader key](#leader-key)
- [Contexts](#contexts)
- [Context-specific color](#context-specific-color)
- [Selection](#selection)
@@ -230,7 +230,7 @@ optional args:
-h show help
```
-#### Keyboard shortcuts
+#### Keyboard and mouse
Press ? in `nnn` to see the list anytime.
@@ -270,7 +270,13 @@ Press ? in `nnn` to see the list anytime.
Note: Help & settings, file details, media info and archive listing are shown in the PAGER. Use the PAGER-specific keys in these screens.
-#### Leader key
+| Mouse click | Function |
+|:---:| --- |
+| Left single | Select context or entry |
+| Left double | Select context or open file/directory |
+| Middle single | Visit parent directory |
+
+##### Leader key
The Leader key provides a powerful multi-functional navigation mechanism. It is case-sensitive and understands contexts, bookmarks and location shortcuts.
diff --git a/src/nnn.c b/src/nnn.c
index 65c65622..75df0e7f 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -874,7 +874,7 @@ static bool initcurses(void)
nonl();
//intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
- mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED, NULL);
+ mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED | BUTTON2_CLICKED, NULL);
curs_set(FALSE); /* Hide cursor */
start_color();
use_default_colors();
@@ -3116,24 +3116,28 @@ nochange:
presel = 0;
switch (sel) {
- case SEL_BACK:
- dir = visit_parent(path, newpath, &presel);
- if (!dir)
- goto nochange;
-
- /* Save last working directory */
- xstrlcpy(lastdir, path, PATH_MAX);
-
- /* Save history */
- xstrlcpy(lastname, xbasename(path), NAME_MAX + 1);
-
- xstrlcpy(path, dir, PATH_MAX);
-
- setdirwatch();
- goto begin;
case SEL_CLICK:
if (getmouse(&event) != OK)
- goto nochange;
+ goto nochange; // fallthrough
+ case SEL_BACK:
+ // Handle right click to go to parent
+ if ((sel == SEL_BACK)
+ || (sel == SEL_CLICK && event.bstate == BUTTON2_CLICKED)) {
+ dir = visit_parent(path, newpath, &presel);
+ if (!dir)
+ goto nochange;
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, PATH_MAX);
+
+ /* Save history */
+ xstrlcpy(lastname, xbasename(path), NAME_MAX + 1);
+
+ xstrlcpy(path, dir, PATH_MAX);
+
+ setdirwatch();
+ goto begin;
+ }
// Handle clicking on a context at the top:
if (event.y == 0) {