From abc2509e9205306305a9d098abaaaaf351274de0 Mon Sep 17 00:00:00 2001 From: Manuel Amago Date: Sun, 23 Nov 2014 12:26:33 +0000 Subject: Initial commit --- bin/navigation.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 bin/navigation.sh (limited to 'bin/navigation.sh') diff --git a/bin/navigation.sh b/bin/navigation.sh new file mode 100644 index 0000000..f98fb52 --- /dev/null +++ b/bin/navigation.sh @@ -0,0 +1,43 @@ +# +# Navigation +# +export MARKPATH=$HOME/.marks +function go { + #echo "$MARKPATH/$1" + if [[ ! -e "$MARKPATH/$1" ]]; then + echo "No such mark: $1" + elif [[ -h "$MARKPATH/$1" ]]; then + pushd "$(readlink "$MARKPATH/$1")" 2>/dev/null + elif [[ -x "$MARKPATH/$1" ]]; then + local cmd="$MARKPATH/$1" + shift + . $cmd $@ + fi +} +function mark { + mkdir -p "$MARKPATH"; ln -s "$(pwd)" "$MARKPATH/$1" +} +function unmark { + rm "$MARKPATH/$1" +} +function marks { + for f in "$MARKPATH"/*; do + local name="$(basename "$f")" + if [[ -h "$f" ]]; then + local target="$(readlink "$f")" + echo "${name} -> ${target}" + elif [[ -x "$f" ]]; then + echo "${name}*" + fi + done +} +# Tab completion +_completemarks() { + local curw=${COMP_WORDS[COMP_CWORD]} + local wordlist=$(ls -p $MARKPATH) + local IFS=$'\n' + COMPREPLY=($(compgen -W "${wordlist[@]}" -- "$curw")) + return 0 +} + +complete -o filenames -F _completemarks go unmark -- cgit v1.2.1