From 55645cca0735f89f0f1460d574960821ea9ac456 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Tue, 27 Aug 2013 01:47:22 +0200 Subject: [PATCH] Closure over the local variables by wrapping everything in a anonymous function Also namespace all the functions as they will always be global --- pure.zsh | 87 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/pure.zsh b/pure.zsh index 97912c0..f25ed40 100644 --- a/pure.zsh +++ b/pure.zsh @@ -17,51 +17,54 @@ # %m => shortname host # %(?..) => prompt conditional - %(condition.true.false) -autoload -Uz add-zsh-hook -autoload -Uz vcs_info -add-zsh-hook precmd pure_precmd -add-zsh-hook preexec pure_preexec +() { + autoload -Uz add-zsh-hook + autoload -Uz vcs_info -zstyle ':vcs_info:*' enable git # You can add hg too if needed: `git hg` -zstyle ':vcs_info:git*' formats ' %b' -zstyle ':vcs_info:git*' actionformats ' %b|%a' + add-zsh-hook precmd pure_precmd + add-zsh-hook preexec pure_preexec -# enable prompt substitution -setopt PROMPT_SUBST + zstyle ':vcs_info:*' enable git # You can add hg too if needed: `git hg` + zstyle ':vcs_info:git*' formats ' %b' + zstyle ':vcs_info:git*' actionformats ' %b|%a' -# only show username if not default -[ $USER != "$PURE_DEFAULT_USERNAME" ] && local username='%n@%m ' + # enable prompt substitution + setopt PROMPT_SUBST -# fastest possible way to check if repo is dirty -git_dirty() { - # check if we're in a git repo - command git rev-parse --is-inside-work-tree &>/dev/null || return - # check if it's dirty - command git diff --quiet --ignore-submodules HEAD &>/dev/null; [ $? -eq 1 ] && echo '*' + # only show username if not default + [ $USER != "$PURE_DEFAULT_USERNAME" ] && local username='%n@%m ' + + # fastest possible way to check if repo is dirty + pure_git_dirty() { + # check if we're in a git repo + command git rev-parse --is-inside-work-tree &>/dev/null || return + # check if it's dirty + command git diff --quiet --ignore-submodules HEAD &>/dev/null; [ $? -eq 1 ] && echo '*' + } + + # displays the exec time of the last command if set threshold was exceeded + pure_cmd_exec_time() { + local stop=`date +%s` + local start=${cmd_timestamp:-$stop} + let local elapsed=$stop-$start + [ $elapsed -gt "${PURE_CMD_MAX_EXEC_TIME:=5}" ] && echo ${elapsed}s + } + + pure_preexec() { + cmd_timestamp=`date +%s` + } + + pure_precmd() { + vcs_info + # add `%*` to display the time + print -P '\n%F{blue}%~%F{8}$vcs_info_msg_0_`pure_git_dirty` $username%f %F{yellow}`pure_cmd_exec_time`%f' + # reset value since `preexec` isn't always triggered + unset cmd_timestamp + } + + # prompt turns red if the previous command didn't exit with 0 + PROMPT='%(?.%F{magenta}.%F{red})❯%f ' + # can be disabled: + # PROMPT='%F{magenta}❯%f ' } - -# displays the exec time of the last command if set threshold was exceeded -cmd_exec_time() { - local stop=`date +%s` - local start=${cmd_timestamp:-$stop} - let local elapsed=$stop-$start - [ $elapsed -gt "${PURE_CMD_MAX_EXEC_TIME:=5}" ] && echo ${elapsed}s -} - -pure_preexec() { - cmd_timestamp=`date +%s` -} - -pure_precmd() { - vcs_info - # add `%*` to display the time - print -P '\n%F{blue}%~%F{8}$vcs_info_msg_0_`git_dirty` $username%f %F{yellow}`cmd_exec_time`%f' - # reset value since `preexec` isn't always triggered - unset cmd_timestamp -} - -# prompt turns red if the previous command didn't exit with 0 -PROMPT='%(?.%F{magenta}.%F{red})❯%f ' -# can be disabled: -# PROMPT='%F{magenta}❯%f '