1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- alias-finder() {
- local cmd="" exact="" longer="" wordStart="" wordEnd="" multiWordEnd=""
- for i in $@; do
- case $i in
- -e|--exact) exact=true;;
- -l|--longer) longer=true;;
- *)
- if [[ -z $cmd ]]; then
- cmd=$i
- else
- cmd="$cmd $i"
- fi
- ;;
- esac
- done
- cmd=$(sed 's/[].\|$(){}?+*^[]/\\&/g' <<< $cmd) # adds escaping for grep
- if (( $(wc -l <<< $cmd) == 1 )); then
- while [[ $cmd != "" ]]; do
- if [[ $longer = true ]]; then
- wordStart="'{0,1}"
- else
- wordEnd="$"
- multiWordEnd="'$"
- fi
- if [[ $cmd == *" "* ]]; then
- local finder="'$cmd$multiWordEnd"
- else
- local finder=$wordStart$cmd$wordEnd
- fi
- alias | grep -E "=$finder"
- if [[ $exact = true || $longer = true ]]; then
- break
- else
- cmd=$(sed -E 's/ {0,1}[^ ]*$//' <<< $cmd) # removes last word
- fi
- done
- fi
- }
- preexec_alias-finder() {
- if [[ $ZSH_ALIAS_FINDER_AUTOMATIC = true ]]; then
- alias-finder $1
- fi
- }
- autoload -U add-zsh-hook
- add-zsh-hook preexec preexec_alias-finder
|