39 lines
1.2 KiB
Bash
39 lines
1.2 KiB
Bash
|
# Default commands
|
||
|
: ${MAGIC_ENTER_GIT_COMMAND:="git status -u ."} # run when in a git repository
|
||
|
: ${MAGIC_ENTER_OTHER_COMMAND:="ls -lh ."} # run anywhere else
|
||
|
|
||
|
magic-enter() {
|
||
|
# Only run MAGIC_ENTER commands when in PS1 and command line is empty
|
||
|
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#User_002dDefined-Widgets
|
||
|
if [[ -n "$BUFFER" || "$CONTEXT" != start ]]; then
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
if command git rev-parse --is-inside-work-tree &>/dev/null; then
|
||
|
BUFFER="$MAGIC_ENTER_GIT_COMMAND"
|
||
|
else
|
||
|
BUFFER="$MAGIC_ENTER_OTHER_COMMAND"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Wrapper for the accept-line zle widget (run when pressing Enter)
|
||
|
|
||
|
# If the wrapper already exists don't redefine it
|
||
|
(( ! ${+functions[_magic-enter_accept-line]} )) || return 0
|
||
|
|
||
|
case "$widgets[accept-line]" in
|
||
|
# Override the current accept-line widget, calling the old one
|
||
|
user:*) zle -N _magic-enter_orig_accept-line "${widgets[accept-line]#user:}"
|
||
|
function _magic-enter_accept-line() {
|
||
|
magic-enter
|
||
|
zle _magic-enter_orig_accept-line -- "$@"
|
||
|
} ;;
|
||
|
# If no user widget defined, call the original accept-line widget
|
||
|
builtin) function _magic-enter_accept-line() {
|
||
|
magic-enter
|
||
|
zle .accept-line
|
||
|
} ;;
|
||
|
esac
|
||
|
|
||
|
zle -N accept-line _magic-enter_accept-line
|