From 277f156c370bfca23ec87e41bf42ff2a37f7eb6d Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Mon, 24 Jun 2019 21:45:02 +0530 Subject: [PATCH] Fix #291 --- README.md | 7 +++++++ nnn.1 | 7 +++++++ src/nnn.c | 21 ++++++++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a9d2148a..81fc3b16 100644 --- a/README.md +++ b/README.md @@ -204,6 +204,7 @@ Option completion scripts for Bash, Fish and Zsh can be found in respective subd | `NNN_BMS='d:~/Documents;D:~/Docs archive/'` | specify bookmarks (max 10) | | `NNN_USE_EDITOR=1` | open text files in `$VISUAL` (else `$EDITOR`, fallback vi) | | `NNN_CONTEXT_COLORS='1234'` | specify per context color [default: '4444' (all blue)] | +| `NNN_SSHFS_OPTS='sshfs -o reconnect,idmap=user'` | specify SSHFS options | | `NNN_NOTE=/home/user/Dropbox/notes` | path to note file [default: none] | | `NNN_OPENER=mimeopen` | custom file opener | | `NNN_IDLE_TIMEOUT=300` | idle seconds before locking terminal [default: disabled] | @@ -399,6 +400,12 @@ Host phone The above host `phone` will be mounted at `${XDG_CONFIG_HOME:-$HOME/.config}/nnn/phone`. `nnn` creates the directory `phone` if it doesn't exist. +If you need to pass options to the `sshfs` command, you can do so: + + export NNN_SSHFS_OPTS='sshfs -o reconnect,idmap=user,cache_timeout=3600' + +The options must be preceded by `sshfs` and comma-separated without any space between them. + Notes: 1. `nnn` takes you to the mount point after successful mounts. To jump back to the last directory, press the usual -. diff --git a/nnn.1 b/nnn.1 index 9de15022..ad525074 100644 --- a/nnn.1 +++ b/nnn.1 @@ -157,6 +157,13 @@ when dealing with the !, e and p commands respectively. A single combination to codes: 0-black, 1-red, 2-green, 3-yellow, 4-blue (default), 5-magenta, 6-cyan, 7-white .Ed .Pp +\fBNNN_SSHFS_OPTS:\fR Pass additional options to sshfs command: +.Bd -literal + export NNN_SSHFS_OPTS='sshfs -o reconnect,idmap=user,cache_timeout=3600' + + NOTE: The options must be preceded by `sshfs` and comma-separated without any space between them. +.Ed +.Pp \fBNNN_IDLE_TIMEOUT:\fR set idle timeout (in seconds) to invoke terminal locker (default: disabled). .Pp \fBNNN_COPIER:\fR system clipboard copier script. The project page has some sample copier scripts. diff --git a/src/nnn.c b/src/nnn.c index 92188384..b00b9024 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -2569,8 +2569,14 @@ static bool create_dir(const char *path) static bool sshfs_mount(char *path, char *newpath, int *presel) { + uchar flag = F_NORMAL; int r; - char *tmp; + char *tmp, *env, *cmd = "sshfs"; + + if (!getutil(cmd)) { + printwait("sshfs missing", presel); + return FALSE; + } tmp = xreadline(NULL, "host: "); if (!tmp[0]) @@ -2583,18 +2589,19 @@ static bool sshfs_mount(char *path, char *newpath, int *presel) return FALSE; } - if (!getutil("sshfs")) { - printwait("sshfs missing", presel); - return FALSE; - } - /* Convert "Host" to "Host:" */ r = strlen(tmp); tmp[r] = ':'; tmp[r + 1] = '\0'; + env = getenv("NNN_SSHFS_OPTS"); + if (env) + flag |= F_MULTI; + else + env = cmd; + /* Connect to remote */ - if (spawn("sshfs", tmp, newpath, NULL, F_NORMAL)) { + if (spawn(env, tmp, newpath, NULL, flag)) { printwait("mount failed", presel); return FALSE; }