diff --git a/home.nix b/home.nix index c93d563..51de202 100644 --- a/home.nix +++ b/home.nix @@ -1054,7 +1054,7 @@ in suspend = "systemctl suspend"; logout = "sudo pkill -u fredrikr"; lock = "/home/fredrikr/.logout.sh"; - n = "nvim"; + nv = "nvim"; e = "emacsclient -c -a 'emacs'"; nnn = "nnn -e"; jl = "jj l"; @@ -1130,6 +1130,39 @@ in # compinit source <(jj util completion zsh) source <(COMPLETE=zsh jj) + + # --------- autocd on nnn quit ---------- + n () + { + # Block nesting of nnn in subshells + [ "''${NNNLVL:-0}" -eq 0 ] || { + echo "nnn is already running" + return + } + + # The behaviour is set to cd on quit (nnn checks if NNN_TMPFILE is set) + # If NNN_TMPFILE is set to a custom path, it must be exported for nnn to + # see. To cd on quit only on ^G, remove the "export" and make sure not to + # use a custom path, i.e. set NNN_TMPFILE *exactly* as follows: + # NNN_TMPFILE="''${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd" + NNN_TMPFILE="''${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd" + + # Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn + # stty start undef + # stty stop undef + # stty lwrap undef + # stty lnext undef + + # The command builtin allows one to alias nnn to n, if desired, without + # making an infinitely recursive alias + command nnn -e "$@" + + [ ! -f "$NNN_TMPFILE" ] || { + . "$NNN_TMPFILE" + rm -f -- "$NNN_TMPFILE" > /dev/null + } + } + # --------------------------------------- ''; };