From 6cc5e9856fd0875f767f17a6494eb4a174538ebd Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sun, 15 Sep 2013 16:47:18 +0100 Subject: zsh: Install and use the pure prompt --- zsh/functions/pure/prompt_pure_setup | 78 ++++++++++++++++++++++++++++++++++++ zsh/zshrc | 9 ++--- 2 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 zsh/functions/pure/prompt_pure_setup (limited to 'zsh') 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 "$@" diff --git a/zsh/zshrc b/zsh/zshrc index 3bf6e3b..18cc118 100755 --- a/zsh/zshrc +++ b/zsh/zshrc @@ -168,13 +168,10 @@ zstyle ':vcs_info:*' enable git hg zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~' '*?.old' '*?.pro' ## Prompt -if [[ $term = "putty" ]];then - prompt_char="›" -else - prompt_char=">" -fi +autoload -U promptinit +promptinit -PS1="%B%~%(!.%{$fg[red]%}.%{$fg[green]%})$prompt_char%f%b " +prompt pure # Options -- cgit 1.4.1