function sail argparse --name=sail 'a/add=' 'e/edit' 'p/print' -- $argv or return 1 set -l jumpfile (__sailfish_print_jumpfile) if set -q _flag_add set -l dir (string replace -r "^$HOME" '~' (pwd)) printf '%s\t%s\n' $_flag_a $dir >> $jumpfile printf '%s -> %s\n' $_flag_a $dir return 0 end if set -q _flag_edit $EDITOR $jumpfile return 0 end if set -q _flag_print sort $jumpfile | column -t return 0 end set query $argv[1] if test -z $query cd - return 0 end if not set -l jump (__sailfish_print_jump $query) echo "sailfish: no such jump: $query"; return 1 end cd $jump end function __sailfish_print_jumpfile set -l jumps $HOME/.config/sailfish/jumps set -q XDG_CONFIG_HOME; and set jumps $XDG_CONFIG_HOME/sailfish/jumps if not test -r $jumps mkdir -p (dirname $jumps); and touch $jumps end echo $jumps end function __sailfish_print_jump -a query set -l jumps (__sailfish_print_jumpfile) test -z $query; and return 1 while read -d \t -al jump if test $jump[1] = $query test -z $jump[2]; and continue echo (string replace -r '^~' $HOME $jump[2]) return 0 end end < $jumps return 1 end