#!/usr/bin/env sh # Description: 'cd' to the directory from CDPATH # # Details: If the CDPATH environmet variable is not set, the default value of # ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/bookmarks will be used. # You can create this directory and fill it with symbolic links to your # favorite directories. It's a good idea to add it to CDPATH so that it # could also be used from the command line outside of nnn. # The fzf search is done on the directory basename (the first column). # # This plugin is an extended version of the bookmarks plugin. # # Shell: POSIX compliant # Author: Yuri Kloubakov . "$(dirname "$0")"/.nnn-plugin-helper get_dirs() { # Get a list of directories and symbolic links to directories IFS=':' for path in $CDPATH; do for entry in "$path"/*; do if [ -d "$entry" ]; then name="$(basename "$entry")" if [ -h "$entry" ]; then l="$(ls -dl "$entry")" entry="${l#*"${entry} -> "}" fi printf "%-24s :%s\n" "${name}" "$entry" fi done done } abort() { echo "$1" read -r _ exit 1 } if [ -z "$CDPATH" ]; then CDPATH="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/bookmarks" [ -d "$CDPATH" ] || abort "CDPATH is not set and there is no \"$CDPATH\" directory" fi dir_list="$(get_dirs)" [ -n "$dir_list" ] || abort "There are no directories to choose from. Check your \"$CDPATH\"." dir="$(echo "$dir_list" | fzf --nth=1 --delimiter=':' | awk -F: 'END { print $2 }')" if [ -n "$dir" ]; then nnn_cd "$dir" 0 fi