dotfiles

Dash Eclipse's dotfiles
git clone git://ezup.dev/dotfiles.git
Log | Files | Refs | README | LICENSE

fv (1844B)


      1#!/bin/env sh
      2#
      3# fuzzy finder based File Viewer
      4#
      5: "${progname:="${0##*/}"}"
      6: "${WRKDIR:=./}"
      7
      8which sk bat fd >/dev/null || exit 1
      9
     10fuzzy_git() {
     11	local HEADER="[ENTER] Print [TAB] Toggle [ALT-F] View [ALT-H] Log [ALT-L] Log 1L"
     12	local REPO=$(git -C "$WRKDIR" rev-parse --show-toplevel 2>/dev/null) #|| { echo "${WRKDIR} is not a git repo"; exit 1; }
     13	git -C "$REPO" ls-tree --full-tree -r --name-only HEAD \
     14		| GREP_COLORS="sl=0;34;49:ms=0;37;49" grep --color=always '^\|[^/]*$' \
     15		| sk --ansi \
     16			--header="${HEADER} | $REPO" \
     17			--prompt "[git] > " \
     18			--layout=reverse-list \
     19			--preview="git -C \"${WRKDIR}\" show master:{1} | bat --color=always -p" \
     20			--preview-window=up:40% \
     21			-m \
     22			--bind "alt-f:execute[ git -C \"${REPO}\" show master:{} | bat -p --color=always --paging=always ]" \
     23			--bind "alt-l:execute[ git -C \"${REPO}\" log --oneline -- {} ]" \
     24			--bind "alt-h:execute[ git -C \"${REPO}\" log -p -- {} ]" \
     25			${1:+--query "$@"}
     26}
     27
     28fuzzy_find() {
     29	[ -d "$WRKDIR" ] || exit 0
     30	fd --type file --color=always . "$WRKDIR" \
     31		| sk \
     32			--ansi \
     33			--layout=reverse-list \
     34			--preview="bat --color=always --paging=always {}" \
     35			--preview-window=up \
     36			--prompt "$WRKDIR > " \
     37			--bind "alt-f:execute[ bat --color=always --paging=always {} ]" \
     38			${1:+--query "$@"}
     39}
     40
     41usage() {
     42	cat <<_EOF
     43Usage: $progname [options]
     44
     45Options:
     46 -d <repo-dir>		Set git repository to this directory
     47 -f			Force to use find instead of git
     48 -h			Show this page
     49_EOF
     50	exit 0
     51}
     52
     53while getopts "d:fh" opt; do
     54	case $opt in
     55		d) WRKDIR="$OPTARG";;
     56		f) readonly FORCE_DIR=1;;
     57		h) usage;;
     58	*) usage;;
     59	esac
     60done
     61shift $((OPTIND - 1))
     62
     63
     64[ -d "$WRKDIR" ] || { echo "$WRKDIR: no such directory"; return 0; }
     65if [ "$FORCE_DIR" = 1 ]; then
     66	fuzzy_find
     67elif git -C "$WRKDIR" rev-parse 2>/dev/null; then
     68	fuzzy_git "$@"
     69else
     70	fuzzy_find
     71fi