nnn/plugins/fzopen

86 lines
2.2 KiB
Plaintext
Raw Permalink Normal View History

2019-01-03 17:35:51 +00:00
#!/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.
2019-01-03 17:35:51 +00:00
#
# Dependencies: fd/find, fzf/skim, xdg-open/open (on macOS)
2019-12-09 13:06:48 +00:00
#
# Shell: POSIX compliant
2019-01-03 17:35:51 +00:00
# Author: Arun Prakash Jana
NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
USE_NUKE=0
2022-07-16 17:47:32 +00:00
# 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
2020-04-26 18:35:11 +00:00
[ -z "$cmd" ] && cmd="fd -t f 2>/dev/null"
else
[ -z "$cmd" ] && cmd="find . -type f 2>/dev/null"
fi
2021-06-11 13:48:29 +00:00
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)
2019-12-09 13:06:48 +00:00
else
exit 1
fi
# Check for picker mode
if [ "$3" ]; then
if [ "$entry" ]; then
2021-11-01 08:05:18 +00:00
case "$entry" in
2021-11-01 08:15:49 +00:00
/*) fullpath="$entry" ;;
*) fullpath="$PWD/$entry" ;;
2021-11-01 08:05:18 +00:00
esac
if [ "-" = "$3" ]; then
2021-11-01 08:05:18 +00:00
printf "%s\n" "$fullpath"
else
2021-11-01 08:05:18 +00:00
printf "%s\n" "$fullpath" > "$3"
fi
# Tell `nnn` to clear its internal selection
printf "%s" "0p" > "$NNN_PIPE"
fi
exit 0
fi
if [ "$entry" ]; then
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
fi