mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 13:21:19 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 |