aboutsummaryrefslogtreecommitdiff
path: root/files/.config/nnn/plugins/fzopen
diff options
context:
space:
mode:
Diffstat (limited to 'files/.config/nnn/plugins/fzopen')
-rwxr-xr-xfiles/.config/nnn/plugins/fzopen83
1 files changed, 83 insertions, 0 deletions
diff --git a/files/.config/nnn/plugins/fzopen b/files/.config/nnn/plugins/fzopen
new file mode 100755
index 0000000..17b0585
--- /dev/null
+++ b/files/.config/nnn/plugins/fzopen
@@ -0,0 +1,83 @@
+#!/usr/bin/env sh
+
+# Description: Regular mode:
+# Fuzzy find a file in directory subtree.
+# Opens in $VISUAL or $EDITOR if text.
+# Opens other type of files with xdg-open.
+# Work only with a single file selected.
+#
+# Picker mode:
+# If picker mode output file is passed, it
+# will be overwritten with any picked files.
+# Leaves untouched if no file is picked.
+# Works with single/multiple files selected.
+#
+# Dependencies: fd/find, fzf/skim, xdg-open/open (on macOS)
+#
+# Shell: POSIX compliant
+# Author: Arun Prakash Jana
+
+NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
+USE_NUKE=0
+
+# shellcheck disable=SC1090,SC1091
+. "$(dirname "$0")"/.nnn-plugin-helper
+
+if type fzf >/dev/null 2>&1; then
+ cmd="$FZF_DEFAULT_COMMAND"
+ if type fd >/dev/null 2>&1; then
+ [ -z "$cmd" ] && cmd="fd -t f 2>/dev/null"
+ else
+ [ -z "$cmd" ] && cmd="find . -type f 2>/dev/null"
+ fi
+ entry="$(eval "$cmd" | fzf -m)"
+ # To show only the file name
+ # entry=$(find . -type f 2>/dev/null | fzf --delimiter / --with-nth=-1 --tiebreak=begin --info=hidden)
+elif type sk >/dev/null 2>&1; then
+ entry=$(find . -type f 2>/dev/null | sk)
+else
+ exit 1
+fi
+
+# Check for picker mode
+if [ "$3" ]; then
+ if [ "$entry" ]; then
+ case "$entry" in
+ /*) fullpath="$entry" ;;
+ *) fullpath="$PWD/$entry" ;;
+ esac
+ if [ "-" = "$3" ]; then
+ printf "%s\n" "$fullpath"
+ else
+ printf "%s\n" "$fullpath" > "$3"
+ fi
+
+ # Tell `nnn` to clear its internal selection
+ printf "%s" "0p" > "$NNN_PIPE"
+ fi
+
+ exit 0
+fi
+
+if [ "$USE_NUKE" -ne 0 ]; then
+ "$NUKE" "$entry"
+ exit 0
+fi
+
+# Open the file (works for a single file only)
+cmd_file=""
+cmd_open=""
+if uname | grep -q "Darwin"; then
+ cmd_file="file -bIL"
+ cmd_open="open"
+else
+ cmd_file="file -biL"
+ cmd_open="xdg-open"
+fi
+
+case "$($cmd_file "$entry")" in
+ *text*)
+ "${VISUAL:-$EDITOR}" "$entry" ;;
+ *)
+ $cmd_open "$entry" >/dev/null 2>&1 ;;
+esac