From f451f1be1fb59c92d6b693b7fdd540ec5c47d101 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 22 Sep 2014 12:06:02 -0400 Subject: [PATCH] Refactor zsh-git integration --- bash/aliases | 12 +--- zsh/functions/prompt_my_setup | 102 +++++++++++++++++----------------- zsh/preztorc | 2 +- zshrc | 3 - 4 files changed, 55 insertions(+), 64 deletions(-) diff --git a/bash/aliases b/bash/aliases index 443e8c84..5c4ddda7 100644 --- a/bash/aliases +++ b/bash/aliases @@ -12,14 +12,7 @@ alias wget='wget -c' # Resume download if possible alias rsyncd='rsync -va --delete' # Hard sync two directories # Shortcut for git -g() { - if [[ $# -gt 0 ]]; then - ${aliases[git]:-git} $@ - else - ${aliases[git]:-git} status --short - fi -} - +alias g=git is-callable 'hub' && alias git='hub' alias gi='git init' @@ -33,7 +26,8 @@ alias gp='git push' alias gpl='git pull' alias gb='git branch' alias gt='git tag' -alias gs='git status' +alias gs='git status --short' +alias gS='git status' alias gr='git reset "HEAD^"' alias gd='git diff' diff --git a/zsh/functions/prompt_my_setup b/zsh/functions/prompt_my_setup index 3d24eb8b..83a1c0fc 100644 --- a/zsh/functions/prompt_my_setup +++ b/zsh/functions/prompt_my_setup @@ -8,73 +8,73 @@ pmodload 'helper' # Show the hostname if this is an SSH session _prompt_my_host="" if [ ! -z "$SSH_CLIENT" ]; then - _prompt_my_host=" %B%F{blue}| $(hostname | sed -e 's/\.local$//')%f%b" + _prompt_my_host=" %B%F{blue}| $(hostname | sed -e 's/\.local$//')%f%b" fi function _prompt_my_pwd { - local pwd="${PWD/#$HOME/~}" + local pwd="${PWD/#$HOME/~}" - if [[ "$pwd" == (#m)[/~] ]]; then - __prompt_my_pwd="$MATCH" - unset MATCH - else - __prompt_my_pwd="${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}/${pwd:t}" - fi + if [[ "$pwd" == (#m)[/~] ]]; then + __prompt_my_pwd="$MATCH" + unset MATCH + else + __prompt_my_pwd="${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}/${pwd:t}" + fi } -function _prompt_my_precmd { - setopt LOCAL_OPTIONS - unsetopt XTRACE KSH_ARRAYS +# Only run git-info if a) the last command used git/hub or b) the pwd +# has changed. +function _prompt_git_preexec { + [[ $2 =~ (git|hub) ]] && _EXEC_GIT_COMMAND=1 +} - # Format PWD. - _prompt_my_pwd +function _prompt_git_precmd { + if [ -n "$_EXEC_GIT_COMMAND" ]; then + _prompt_git_chpwd + unset _EXEC_GIT_COMMAND + fi +} - # Get Git repository information. - if (( $+functions[git-info] )); then - git-info - fi +function _prompt_git_chpwd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + (( $+functions[git-info] )) && git-info } function prompt_my_setup { - setopt LOCAL_OPTIONS - unsetopt XTRACE KSH_ARRAYS - prompt_opts=(cr percent subst) + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) - # Load required functions. - autoload -Uz add-zsh-hook + # Load required functions. + autoload -Uz add-zsh-hook - # Add hook for calling git-info before each command. - add-zsh-hook precmd _prompt_my_precmd + # Add hook for calling git-info before each command. + add-zsh-hook precmd _prompt_git_precmd + add-zsh-hook chpwd _prompt_git_chpwd + add-zsh-hook preexec _prompt_git_preexec - # Set editor-info parameters. - zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' - zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{red}$%f%b' - zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{red}♺%f' - zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{green}#%f%b' + add-zsh-hook precmd _prompt_my_pwd - # Set git-info parameters. - zstyle ':prezto:module:git:info' verbose 'yes' - zstyle ':prezto:module:git:info:action' format ':%%B%F{yellow}%s%f%%b' - zstyle ':prezto:module:git:info:added' format ' %%B%F{green}✚%f%%b' - zstyle ':prezto:module:git:info:ahead' format ' %%B%F{yellow}⬆%f%%b' - zstyle ':prezto:module:git:info:behind' format ' %%B%F{yellow}⬇%f%%b' - zstyle ':prezto:module:git:info:branch' format ':%F{green}%b%f' - zstyle ':prezto:module:git:info:commit' format ':%F{green}%.7c%f' - zstyle ':prezto:module:git:info:deleted' format ' %%B%F{red}✖%f%%b' - zstyle ':prezto:module:git:info:modified' format ' %%B%F{blue}✱%f%%b' - zstyle ':prezto:module:git:info:position' format ':%F{red}%p%f' - zstyle ':prezto:module:git:info:renamed' format ' %%B%F{magenta}➜%f%%b' - zstyle ':prezto:module:git:info:stashed' format ' %%B%F{cyan}✭%f%%b' - zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{yellow}═%f%%b' - zstyle ':prezto:module:git:info:untracked' format ' %%B%F{white}◼%f%%b' - zstyle ':prezto:module:git:info:keys' format \ - 'prompt' ' %F{blue}%f$(coalesce "%b" "%p" "%c")%s' \ - 'rprompt' '%A%B%S%a%d%m%r%U%u' + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{red}$%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{red}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{green}#%f%b' - # Define prompts. - PROMPT='%F{cyan}${__prompt_my_pwd}%f${git_info:+${(e)git_info[prompt]}}%(!. %B%F{red}#%f%b.)${editor_info[keymap]} ' - RPROMPT='${editor_info[overwrite]}%(?:: %F{red}⏎%f)${VIM:+" %B%F{green}V%f%b"}${git_info[rprompt]}${_prompt_my_host}' - # SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format ':%F{green}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%F{red}+%f' + + zstyle ':prezto:module:git:info:keys' format 'prompt' '' 'rprompt' '%b%D' + + # Define prompts. + PROMPT='%F{cyan}${__prompt_my_pwd}%f${git_info:+${(e)git_info[prompt]}}%(!. %B%F{red}#%f%b.)${editor_info[keymap]} ' + RPROMPT='${editor_info[overwrite]}${VIM:+" %B%F{green}V%f%b"}${git_info[rprompt]}${_prompt_my_host}%(?:: %F{red}⏎%f)' + + _prompt_git_chpwd } prompt_my_setup "$@" diff --git a/zsh/preztorc b/zsh/preztorc index 567ff13d..71d5d844 100644 --- a/zsh/preztorc +++ b/zsh/preztorc @@ -29,10 +29,10 @@ if [[ -z "$EMACS" ]]; then 'directory' \ 'spectrum' \ 'utility' \ - 'git' \ 'completion' \ 'prompt' \ 'syntax-highlighting' \ + 'git' \ 'osx' else zstyle ':prezto:load' pmodule \ diff --git a/zshrc b/zshrc index d536209b..1d95ecc4 100644 --- a/zshrc +++ b/zshrc @@ -22,6 +22,3 @@ if is-callable 'go'; then export GOPATH="$HOME/Dropbox/Projects/dev/go" export PATH="$GOPATH/bin:$PATH" fi - -# Restore git completion with g() -compdef g=git