Unverified Commit 869eb209 authored by wilkis's avatar wilkis Committed by GitHub
Browse files

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


Co-authored-by: default avatarMarc Cornellà <hello@mcornella.com>
parent fae34b38
# 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...
```
...@@ -5,16 +5,18 @@ typeset -g ZSH_LAST_WORKING_DIRECTORY ...@@ -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:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment