Browse Source

feat(last-working-dir): log separate `lwd`s for different SSH keys on the same user account (#9534)

Co-authored-by: Marc Cornellà <hello@mcornella.com>
wilkis 3 years ago
parent
commit
869eb20913

+ 23 - 5
plugins/last-working-dir/README.md

@@ -1,15 +1,33 @@
 # last-working-dir plugin
 
 Keeps track of the last used working directory and automatically jumps into it
-for new shells, unless:
+for new shells, unless the starting directory is not `$HOME`.
 
-- The plugin is already loaded.
-- The current `$PWD` is not `$HOME`.
-
-Also adds `lwd` function to jump to the last working directory.
+Also adds a `lwd` function to jump to the last working directory.
 
 To use it, add `last-working-dir` to the plugins array in your zshrc file:
 
 ```zsh
 plugins=(... last-working-dir)
 ```
+
+## Features
+
+### Use separate last-working-dir files with different SSH keys
+
+If the same user account is used by multiple users connecting via different SSH keys, you can
+configure SSH to map them to different `SSH_USER`s and the plugin will use separate lwd files
+for each one.
+
+Make sure that your SSH server allows environment variables. You can enable this feature
+within the `/etc/sshd/sshd_config` file:
+
+```
+PermitUserEnvironment yes
+```
+
+Then, add `environment="SSH_USER=<SSH_USERNAME>"` before the SSH keys in your `authorized_keys` file:
+
+```
+environment="SSH_USER=a.test@example.com" ssh-ed25519 AAAAC3Nz...
+```

+ 8 - 6
plugins/last-working-dir/last-working-dir.plugin.zsh

@@ -5,16 +5,18 @@ typeset -g ZSH_LAST_WORKING_DIRECTORY
 autoload -U add-zsh-hook
 add-zsh-hook chpwd chpwd_last_working_dir
 chpwd_last_working_dir() {
-	if [ "$ZSH_SUBSHELL" = 0 ]; then
-		local cache_file="$ZSH_CACHE_DIR/last-working-dir"
-		pwd >| "$cache_file"
-	fi
+  # Don't run in subshells
+  [[ "$ZSH_SUBSHELL" -eq 0 ]] || return 0
+  # Add ".$SSH_USER" suffix to cache file if $SSH_USER is set and non-empty
+  local cache_file="$ZSH_CACHE_DIR/last-working-dir${SSH_USER:+.$SSH_USER}"
+  pwd >| "$cache_file"
 }
 
 # Changes directory to the last working directory
 lwd() {
-	local cache_file="$ZSH_CACHE_DIR/last-working-dir"
-	[[ -r "$cache_file" ]] && cd "$(cat "$cache_file")"
+  # Add ".$SSH_USER" suffix to cache file if $SSH_USER is set and non-empty
+  local cache_file="$ZSH_CACHE_DIR/last-working-dir${SSH_USER:+.$SSH_USER}"
+  [[ -r "$cache_file" ]] && cd "$(cat "$cache_file")"
 }
 
 # Jump to last directory automatically unless: