aboutsummaryrefslogtreecommitdiffstats
path: root/functions/sail.fish
diff options
context:
space:
mode:
Diffstat (limited to 'functions/sail.fish')
-rw-r--r--functions/sail.fish64
1 files changed, 64 insertions, 0 deletions
diff --git a/functions/sail.fish b/functions/sail.fish
new file mode 100644
index 0000000..69548b1
--- /dev/null
+++ b/functions/sail.fish
@@ -0,0 +1,64 @@
+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