From 7b7e80f6ae1842318fb0eadab0fe4b656842a9cb Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Thu, 12 Sep 2013 18:54:58 +0200 Subject: [PATCH] Close GH-14: Make pure.zsh loadable by the prompt system.. --- arch/PKGBUILD | 16 +++++++ pure.zsh | 118 +++++++++++++++++++++++++------------------------- readme.md | 28 +++++++++--- 3 files changed, 98 insertions(+), 64 deletions(-) create mode 100644 arch/PKGBUILD diff --git a/arch/PKGBUILD b/arch/PKGBUILD new file mode 100644 index 0000000..b21f3e5 --- /dev/null +++ b/arch/PKGBUILD @@ -0,0 +1,16 @@ +# Author: Sindre Sorhus +# Maintainer: Pat Brisbin +pkgname=pure +pkgver=0.0.1 +pkgrel=1 +pkgdesc='pure prompt for zsh' +arch=('any') +url='https://github.com/sindresorhus/pure' +license=('MIT') +source=(pure.zsh) + +package() { + install -Dm644 pure.zsh \ + "$pkgdir/usr/share/zsh/functions/Prompts/prompt_pure_setup" +} +md5sums=('673c5d65495ba6942938925ab4cff2d8') diff --git a/pure.zsh b/pure.zsh index f74f09e..3e4d740 100644 --- a/pure.zsh +++ b/pure.zsh @@ -3,7 +3,6 @@ # https://github.com/sindresorhus/pure # MIT License - # For my own and others sanity # git: # %b => current branch @@ -17,63 +16,64 @@ # %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 -() { - autoload -Uz add-zsh-hook - autoload -Uz vcs_info - - add-zsh-hook precmd pure_precmd - add-zsh-hook preexec pure_preexec - - zstyle ':vcs_info:*' enable git - zstyle ':vcs_info:git*' formats ' %b' - zstyle ':vcs_info:git*' actionformats ' %b|%a' - - # enable prompt substitution - setopt prompt_subst - - # show username@host if logged in through SSH - if [[ $SSH_CLIENT != '' || $SSH_TTY != '' ]]; then - local username='%n@%m ' - fi - - # 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} - integer elapsed=$stop-$start - [[ $elapsed -gt ${PURE_CMD_MAX_EXEC_TIME:=5} ]] && echo ${elapsed}s - } - - 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" - } - - pure_precmd() { - # shows the full path in the title - print -Pn '\e]0;%~\a' - - # git info - 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 ' + (( $? == 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 + + # add `%*` to display the time + 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 + [[ -n "$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/readme.md b/readme.md index 1bd04f4..0bc0e2b 100644 --- a/readme.md +++ b/readme.md @@ -22,9 +22,28 @@ Most prompts are cluttered, ugly and slow. I wanted something visually pleasing ## Getting started -- Submodule this repo or download `pure.zsh`. - *Submodule is recommended as it makes it easy to keep it up to date.* -- In your `.zshrc` add any of the below options, then import pure `. path/to/pure.zsh`. +- Place this file somewhere in `$fpath` with the name `prompt_pure_setup` + +For example: + +``` +$ sudo cp ./pure.zsh /usr/share/zsh/functions/Prompts/prompt_pure_setup +``` + +- Initialize the prompt system (if not so already): + +```sh +# .zshrc +autoload -U promptinit +promptinit +``` + +- Choose this prompt: + +```sh +# .zshrc +prompt pure +``` ## Options @@ -42,8 +61,7 @@ The max execution time of a process before its run time is shown when it exits. # optionally define some options PURE_CMD_MAX_EXEC_TIME=10 -# import the prompt -. pure.zsh +prompt pure ```