My build of nnn with minor changes
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- #!/usr/bin/env sh
-
- # Description: Use named bookmarks using symlinks
- #
- # Dependencies: fzf
- #
- # Usage:
- # 1. Create a $BOOKMARKS_DIR directory
- # By default, $BOOKMARKS_DIR is set to: ${XDG_CACHE_HOME:-$HOME/.cache}/nnn/bookmarks
- #
- # 2. Create symlinks to directories
- # `cd $BOOKMARKS_DIR`
- # `ln -s /path/to/useful/directory bookmark_name`
- # `ln -s $XDG_CONFIG_HOME/nnn/plugins nnn_plugins"
- # `ln -s /path/to/documents docs`
- # `ln -s /path/to/media media`
- # `ln -s /path/to/movies movies`
- #
- # Bonus tip: Add `$BOOKMARKS_DIR` to your `$CDPATH`
- # https://linux.101hacks.com/cd-command/cdpath/
- #
- # TODO:
- # 1. Remove `fzf` dependency
- #
- # Shell: POSIX compliant
- # Author: Todd Yamakawa
-
- if [ -z "$BOOKMARKS_DIR" ]; then
- BOOKMARKS_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/nnn/bookmarks"
- fi
-
- # Check if NNN_PIPE is set
- if [ -z "$NNN_PIPE" ]; then
- echo 'ERROR: NNN_PIPE is not set' | ${PAGER:-less}
- exit 2
- fi
-
- # Get all directory symlinks
- get_links() {
- for entry in "$1"/*; do
-
- # Skip unless directory symlink
- [ -h "$entry" ] || continue
- [ -d "$entry" ] || continue
-
- printf "%20s -> %s\n" "$(basename "$entry")" "$(readlink -f "$entry")"
- done | fzf |
- awk 'END {
- if (length($1) == 0) { print "'"$PWD"'" }
- else { print "'"$BOOKMARKS_DIR"'/"$1 }
- }'
- }
-
- # Choose symlink with fzf
- cddir="$(get_links "$BOOKMARKS_DIR")"
-
- # Writing result to NNN_PIPE will change nnn's active directory
- # https://github.com/jarun/nnn/tree/master/plugins#send-data-to-nnn
- context=0
- printf "%s" "${context}c$(readlink -f "$cddir")" > "$NNN_PIPE"
|