diff options
author | Alan Pearce | 2013-09-15 16:47:18 +0100 |
---|---|---|
committer | Alan Pearce | 2013-09-15 17:18:33 +0100 |
commit | 6cc5e9856fd0875f767f17a6494eb4a174538ebd (patch) | |
tree | 6582a5b02e3de72186eb8347683f4a5405e2779b /zsh/functions | |
parent | c8dfdd15c8712ff5ca24dc713b585e9a568adbdb (diff) | |
download | dotfiles-6cc5e9856fd0875f767f17a6494eb4a174538ebd.tar.lz dotfiles-6cc5e9856fd0875f767f17a6494eb4a174538ebd.tar.zst dotfiles-6cc5e9856fd0875f767f17a6494eb4a174538ebd.zip |
zsh: Install and use the pure prompt
Diffstat (limited to 'zsh/functions')
-rw-r--r-- | zsh/functions/pure/prompt_pure_setup | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/zsh/functions/pure/prompt_pure_setup b/zsh/functions/pure/prompt_pure_setup new file mode 100644 index 0000000..9c2a752 --- /dev/null +++ b/zsh/functions/pure/prompt_pure_setup @@ -0,0 +1,78 @@ +# Pure +# by Sindre Sorhus +# https://github.com/sindresorhus/pure +# MIT License + +# For my own and others sanity +# git: +# %b => current branch +# %a => current action (rebase/merge) +# prompt: +# %F => color dict +# %f => reset color +# %~ => current path +# %* => time +# %n => username +# %m => shortname host +# %(?..) => prompt conditional - %(condition.true.false) + +# fastest possible way to check if repo is dirty +prompt_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 + + (($? == 1)) && echo '*' +} + +# displays the exec time of the last command if set threshold was exceeded +prompt_pure_cmd_exec_time() { + local stop=`date +%s` + local start=${cmd_timestamp:-$stop} + integer elapsed=$stop-$start + (($elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5})) && echo ${elapsed}s +} + +prompt_pure_preexec() { + cmd_timestamp=`date +%s` + + # shows the current dir and executed command in the title when a process is active + print -Pn "\e]0;$PWD:t: $2\a" +} + +prompt_pure_precmd() { + # shows the full path in the title + print -Pn '\e]0;%~\a' + + # git info + vcs_info + + print -P '\n%F{blue}%~%F{8}$vcs_info_msg_0_`prompt_pure_git_dirty` $prompt_pure_username%f %F{yellow}`prompt_pure_cmd_exec_time`%f' + + # reset value since `preexec` isn't always triggered + unset cmd_timestamp +} + + +prompt_pure_setup() { + prompt_opts=(cr subst percent) + + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + add-zsh-hook precmd prompt_pure_precmd + add-zsh-hook preexec prompt_pure_preexec + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:git*' formats ' %b' + zstyle ':vcs_info:git*' actionformats ' %b|%a' + + # show username@host if logged in through SSH + [[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username='%n@%m ' + + # prompt turns red if the previous command didn't exit with 0 + PROMPT='%(?.%F{magenta}.%F{red})❯%f ' +} + +prompt_pure_setup "$@" |