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

Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
wilkis 2021-01-12 20:40:27 +01:00 committed by GitHub
parent fae34b383d
commit 869eb20913
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 11 deletions

View file

@ -1,15 +1,33 @@
# last-working-dir plugin # last-working-dir plugin
Keeps track of the last used working directory and automatically jumps into it 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. Also adds a `lwd` function to jump to the last working directory.
- The current `$PWD` is not `$HOME`.
Also adds `lwd` function to jump to the last working directory.
To use it, add `last-working-dir` to the plugins array in your zshrc file: To use it, add `last-working-dir` to the plugins array in your zshrc file:
```zsh ```zsh
plugins=(... last-working-dir) 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...
```

View file

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