diff options
| author | Manuel Amago <mamago@gmail.com> | 2014-11-23 12:26:33 +0000 |
|---|---|---|
| committer | Manuel Amago <mamago@gmail.com> | 2014-11-23 12:26:33 +0000 |
| commit | abc2509e9205306305a9d098abaaaaf351274de0 (patch) | |
| tree | 1e38fc548402f066dcb61a9243bb78ec6a2eb8c2 /bin/navigation.sh | |
| download | dotfiles-abc2509e9205306305a9d098abaaaaf351274de0.tar.gz dotfiles-abc2509e9205306305a9d098abaaaaf351274de0.zip | |
Initial commit
Diffstat (limited to 'bin/navigation.sh')
| -rw-r--r-- | bin/navigation.sh | 43 |
1 files changed, 43 insertions, 0 deletions
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 |
