aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/README.md1
-rwxr-xr-xplugins/bookmarks51
2 files changed, 52 insertions, 0 deletions
diff --git a/plugins/README.md b/plugins/README.md
index b6384d3..ff168a2 100644
--- a/plugins/README.md
+++ b/plugins/README.md
@@ -27,6 +27,7 @@ Plugins are installed to `${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins`.
| Plugin (a-z) | Description | Lang | Dependencies |
| --- | --- | --- | --- |
| autojump | Navigate to dir/path | sh | autojump |
+| bookmarks | Use named bookmarks managed with symlinks | sh | fzf |
| boom | Play random music from dir | sh | [moc](http://moc.daper.net/) |
| dups | List non-empty duplicate files in current dir | sh | find, md5sum,<br>sort uniq xargs |
| chksum | Create and verify checksums | sh | md5sum,<br>sha256sum |
diff --git a/plugins/bookmarks b/plugins/bookmarks
new file mode 100755
index 0000000..c17d9e2
--- /dev/null
+++ b/plugins/bookmarks
@@ -0,0 +1,51 @@
+#!/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`
+#
+# TODO:
+# 1. Remove `fzf` dependency
+#
+# Shell: POSIX compliant
+# Author: Todd Yamakawa
+
+BOOKMARKS_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/nnn/bookmarks"
+
+# Check if NNN_PIPE is set
+[ -z "$NNN_PIPE" ] && { echo 'NNN_PIPE is not set'; exit 2; }
+
+# Get all directory symlinks
+get_links() {
+ for entry in "$1"/*; do
+
+ # Skip unless directory symlink
+ [ -h "$entry" ] || continue
+ [ -d "$entry" ] || continue
+
+ echo "$(basename "$entry") -> $(readlink -f "$entry")"
+ done | column -t
+}
+
+# Choose symlink with fzf
+cddir="$(get_links "$BOOKMARKS_DIR" | fzf | awk 'END { print "'"$BOOKMARKS_DIR"'/"$1 }')"
+
+# 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"
+