# # A two line customizable theme (colored in blue and white by default). # # Author: # shura # # Features: # - Two lines. # - VCS integration. # - Customizable. # # Settings (:prezto:module:prompt:theme:borra): # - plugins: list of plugins (array) # - prefix: right-side of plugin wrapper (string) # - separator: plugin separator (string) # - suffix: left-side of plugin wrapper (string) # - top: beginning of first line (string) # - bottom: beginning of second line (string) # - prompt: right-side of second line (string) # - rprompt: right prompt enable or disable (bool) # # Plugins settings (:prezto:module:prompt:theme:borra:plugin:$plugin): # Version Control Systems: # - enable: vcs enable backends (array) # - format: vcs backends format (string): # * %b: backend name (to write a bold-end, escape it using %%b) # * %i: formatted text according to zstyle ':vcs_info:*' formats (or actionformats) # User and Host: # - format: username and hostname format (string): # * %u: username # * %h: hostname # Example: # zstyle ':prezto:module:prompt:theme:borra' separator ' ' # # Screenshots: # http://i.imgur.com/rEgWv.png # http://ascii.io/a/1310 # function +borra-pts { print -n '/dev/%y' } function +borra-rvm-info { if (( ! $+functions[rvm] )); then return 1 fi local rb="$(rvm-prompt s)" if [[ -z "${rb}" ]]; then print "$(rvm-prompt i v p r)" || print "${rb}" fi } function +borra-userhost { local format local res zstyle -s ':prezto:module:prompt:theme:borra:plugin:userhost' format 'format' zformat -f res "$format" u:'%(!.%SROOT%s.%n)' h:'%m' print -n "$res" } function +borra-vcs-info { local res="" local sep="$1" local backend local enabled local format local s vcs_info # need VCS_INFO_backends zstyle -a ':prezto:module:prompt:theme:borra:plugin:vcs' enable 'enabled' zstyle -s ':prezto:module:prompt:theme:borra:plugin:vcs' format 'format' for backend in ${VCS_INFO_backends[@]}; do if (( $+enabled[$backend] )); then continue fi zstyle ':vcs_info:*' enable "$backend" vcs_info || continue if [[ -z "${vcs_info_msg_0_}" ]]; then continue fi zformat -f s "$format" "b:$backend" "i:$vcs_info_msg_0_" res+="$(prompt_borra_wrap_plugin "$s" "$sep")" if [[ -z "$sep" && ! -z "$res" ]]; then zstyle -s ':prezto:module:prompt:theme:borra' separator 'sep' fi done print -n -- "$res" return 23 } function +vi-git-status-untracked { if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then hook_com[unstaged]=' %F{red}⚑%f' fi } function prompt_borra_set_zstyle_if_not_set { zstyle -T "$1" "$2" && zstyle "$@" } function prompt_borra_wrap_plugin { local prefix local suffix zstyle -s ':prezto:module:prompt:theme:borra' prefix 'prefix' zstyle -s ':prezto:module:prompt:theme:borra' suffix 'suffix' print -n -- "${2}${prefix}${1}${suffix}" } function prompt_borra_render_item { local res res="$($1 "$2" 2>/dev/null)" case "$?" in (0) prompt_borra_wrap_plugin "$res" "$2" ;; (23) print -n "$res" ;; (*) return 1 ;; esac } function prompt_borra_render_plugins { local res="" local plugin local -a plugins local sep zstyle -a ':prezto:module:prompt:theme:borra' plugins 'plugins' for plugin in "$plugins[@]"; do res+="$(prompt_borra_render_item "+borra-$plugin" "$sep")" if [[ -z "$sep" && ! -z "$res" ]]; then zstyle -s ':prezto:module:prompt:theme:borra' separator 'sep' fi done print -n "$res" } function prompt_borra_create_prompt { local plugins="$(prompt_borra_render_plugins)" local res="" local top local bottom local prompt if [[ ! -z "$plugins" ]]; then zstyle -s ':prezto:module:prompt:theme:borra' top 'top' zstyle -s ':prezto:module:prompt:theme:borra' bottom 'bottom' res=" ${top}${plugins} ${bottom}" fi zstyle -s ':prezto:module:prompt:theme:borra' prompt 'prompt' print -n "${res}${prompt}" } function prompt_borra_precmd { local rprompt PROMPT="$(prompt_borra_create_prompt)" zstyle -b ':prezto:module:prompt:theme:borra' rprompt 'rprompt' if [[ "$rprompt" = yes ]]; then RPROMPT='%(?..%F{red}%? ↵%f)' else RPROMPT='' fi } function prompt_borra_setup { setopt LOCAL_OPTIONS unsetopt XTRACE KSH_ARRAYS prompt_opts=(cr percent subst) # Load required functions. autoload -Uz add-zsh-hook autoload -Uz vcs_info # Add hook for calling git-info before each command. add-zsh-hook precmd prompt_borra_precmd # Call vcs_info to populate $VCS_INFO_backends. vcs_info prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' plugins 'userhost' 'pts' 'rvm-info' 'vcs-info' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' prefix '%F{blue}(%f' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' separator '%F{blue}-%f' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' suffix '%F{blue}%)%f' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' top '%F{blue}╭-%f' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' bottom '%F{blue}╰─%f' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' prompt '%F{blue}(%f%B%$((COLUMNS / 2))<...<%~%<<%b%F{blue})%F{yellow}>%f ' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra' rprompt 'yes' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra:plugin:vcs' enable "$VCS_INFO_backends[@]" prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra:plugin:vcs' format '%b: %i' prompt_borra_set_zstyle_if_not_set ':prezto:module:prompt:theme:borra:plugin:userhost' format '%u%F{blue}@%f%h' # Set vcs_info parameters. zstyle ':vcs_info:*' check-for-changes 'true' zstyle ':vcs_info:*' unstagedstr ' %F{yellow}⚑%f' zstyle ':vcs_info:*' stagedstr ' %F{green}⚑%f' zstyle ':vcs_info:*' actionformats '%b%u%c [%a]' zstyle ':vcs_info:*' formats '%b%u%c' zstyle ':vcs_info:*+set-message:*' hooks 'git-status-untracked' } prompt_borra_setup "$@"