diff options
Diffstat (limited to '%HOME%/.config/nnn/plugins/myfzcd')
-rwxr-xr-x | %HOME%/.config/nnn/plugins/myfzcd | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/%HOME%/.config/nnn/plugins/myfzcd b/%HOME%/.config/nnn/plugins/myfzcd new file mode 100755 index 0000000..36bfb24 --- /dev/null +++ b/%HOME%/.config/nnn/plugins/myfzcd @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# Like the fzcd plugin, but better. + +set -o errexit -o pipefail + +if command -v fzf > /dev/null 2>&1; then + sel="$( fzf )" +else + exit 1 +fi + +nnn_cd() { + dir="$1" + + if [ -z "$NNN_PIPE" ]; then + echo "No pipe file found" >&2 + return + fi + + printf -- '%s' "0c$dir" > "$NNN_PIPE" +} + + +if [ -n "$sel" ]; then + if [ ! -d "$sel" ]; then + sel="$( dirname -- "$sel" )" + elif [ "$sel" = . ]; then + exit 0 + fi + + case "$sel" in + /*) + nnn_cd "$sel" + ;; + *) + sel="${sel#./}" + + if [ "$PWD" = "/" ]; then + nnn_cd "/$sel" + else + nnn_cd "$PWD/$sel" + fi + ;; + esac +fi |