sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

fzopen (2263B)


      1 #!/usr/bin/env sh
      2 
      3 # Description: Regular mode:
      4 #                Fuzzy find a file in directory subtree.
      5 #                Opens in $VISUAL or $EDITOR if text.
      6 #                Opens other type of files with xdg-open.
      7 #                Work only with a single file selected.
      8 #
      9 #              Picker mode:
     10 #                If picker mode output file is passed, it
     11 #                will be overwritten with any picked files.
     12 #                Leaves untouched if no file is picked.
     13 #                Works with single/multiple files selected.
     14 #
     15 # Dependencies: fd/find, fzf/skim, xdg-open/open (on macOS)
     16 #
     17 # Shell: POSIX compliant
     18 # Author: Arun Prakash Jana
     19 
     20 NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
     21 USE_NUKE=0
     22 
     23 # shellcheck disable=SC1090,SC1091
     24 . "$(dirname "$0")"/.nnn-plugin-helper
     25 
     26 if type fzf >/dev/null 2>&1; then
     27     cmd="$FZF_DEFAULT_COMMAND"
     28     if type fd >/dev/null 2>&1; then
     29         [ -z "$cmd" ] && cmd="fd -t f 2>/dev/null"
     30     else
     31         [ -z "$cmd" ] && cmd="find . -type f 2>/dev/null"
     32     fi
     33     entry="$(eval "$cmd" | fzf -m)"
     34     # To show only the file name
     35     # entry=$(find . -type f 2>/dev/null | fzf --delimiter / --with-nth=-1 --tiebreak=begin --info=hidden)
     36 elif type sk >/dev/null 2>&1; then
     37 	entry=$(find . -type f 2>/dev/null | sk)
     38 else
     39     exit 1
     40 fi
     41 
     42 # Check for picker mode
     43 if [ "$3" ]; then
     44     if [ "$entry" ]; then
     45         case "$entry" in
     46             /*) fullpath="$entry" ;;
     47             *)  fullpath="$PWD/$entry" ;;
     48         esac
     49         if [ "-" = "$3" ]; then
     50             printf "%s\n" "$fullpath"
     51         else
     52             printf "%s\n" "$fullpath" > "$3"
     53         fi
     54 
     55         # Tell `nnn` to clear its internal selection
     56         printf "%s" "0p" > "$NNN_PIPE"
     57     fi
     58 
     59     exit 0
     60 fi
     61 
     62 if [ "$entry" ]; then
     63     if [ "$USE_NUKE" -ne 0 ]; then
     64         "$NUKE" "$entry"
     65         exit 0
     66     fi
     67 
     68     # Open the file (works for a single file only)
     69     cmd_file=""
     70     cmd_open=""
     71     if uname | grep -q "Darwin"; then
     72         cmd_file="file -bIL"
     73         cmd_open="open"
     74     else
     75         cmd_file="file -biL"
     76         cmd_open="xdg-open"
     77     fi
     78 
     79     case "$($cmd_file "$entry")" in
     80         *text*)
     81             "${VISUAL:-$EDITOR}" "$entry" ;;
     82         *)
     83             $cmd_open "$entry" >/dev/null 2>&1 ;;
     84     esac
     85 fi