#!/usr/bin/env sh # Description: Fuzzy find a file in directory subtree # Opens in $VISUAL or $EDITOR if text # Opens other type of files with xdg-open # # Dependencies: fd/find, fzf/skim, xdg-open # # Shell: POSIX compliant # Author: Arun Prakash Jana if which fzf >/dev/null 2>&1; then cmd="$FZF_DEFAULT_COMMAND" if which 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 --delimiter / --nth=-1 --tiebreak=begin --info=hidden)" # To show only the file name # entry=$(find . -type f 2>/dev/null | fzf --delimiter / --with-nth=-1 --tiebreak=begin --info=hidden) elif which sk >/dev/null 2>&1; then entry=$(find . -type f 2>/dev/null | sk) else exit 1 fi case "$(file -biL "$entry")" in *text*) "${VISUAL:-$EDITOR}" "$entry" ;; *) if uname | grep -q "Darwin"; then open "$entry" >/dev/null 2>&1 else xdg-open "$entry" >/dev/null 2>&1 fi ;; esac