prezto/modules/prompt/functions/prompt_sorin_setup
Matthew Crenshaw 17a57fcda0 sorin prompt improvements - rbenv/pyenv support
cleaned up unnecessary prompt async functions

autoload async

rewrote sorin prompt to use zsh-async

removing dead variables

actually working now

moving code for a saner diff

fixed last async issues
2017-04-16 20:20:22 -04:00

162 lines
4.5 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
# A simple theme that displays relevant, contextual information.
#
# - Git branch
# - Python environment
# - Ruby environment (gemset)
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
# Matthew Crenshaw <sgt@squig.gs>
#
# Screenshots:
# http://i.imgur.com/nrGV6pg.png
# http://i.imgur.com/w2ein8H.png
#
#
# 16 Terminal Colors
# -- ---------------
# 0 black
# 1 red
# 2 green
# 3 yellow
# 4 blue
# 5 magenta
# 6 cyan
# 7 white
# 8 bright black
# 9 bright red
# 10 bright green
# 11 bright yellow
# 12 bright blue
# 13 bright magenta
# 14 bright cyan
# 15 bright white
#
# Load dependencies.
pmodload 'helper'
function _prompt_sorin_async_job {
prompt_sorin_style
local output=''
builtin cd -q $1
if (( $+functions[python-info] )); then
python-info
output+=" ${python_info:+${(e)python_info[virtualenv]}}"
fi
if (( $+functions[ruby-info] )); then
ruby-info
output+=" ${ruby_info:+${(e)ruby_info[version]}}"
fi
if (( $+functions[git-info] )); then
git-info
output+=" ${git_info:+${(e)git_info[status]}}"
fi
print $output
}
function _prompt_sorin_callback {
local job=$1 code=$2 output=$3 exec_time=$4
if [[ -n $output ]]; then
# Append to rprompt
RPROMPT+=$output
# Redisplay prompt.
zle && zle reset-prompt
fi
}
function _prompt_sorin_precmd {
setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
# Format PWD.
_prompt_sorin_pwd=$(promptpwd)
# Define prompts.
RPROMPT='${editor_info[overwrite]}%(?:: %F{1}⏎%f)${VIM:+" %B%F{6}V%f%b"}'
# Kill any currently running async jobs
async_flush_jobs 'prompt_sorin'
# We need the worker's env to be up to date, so here we are restarting the worker
async_stop_worker 'prompt_sorin'
async_start_worker 'prompt_sorin' -n -u
async_register_callback 'prompt_sorin' _prompt_sorin_callback
# Kick off async jobs
async_job 'prompt_sorin' _prompt_sorin_async_job "$(pwd)"
}
function prompt_sorin_setup {
setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
prompt_opts=(cr percent subst)
# Load required functions.
autoload -Uz add-zsh-hook
autoload -Uz async && async
# Start async worker
# async_start_worker 'prompt_sorin' -n -u
# Register callback
# async_register_callback 'prompt_sorin' _prompt_sorin_callback
# Add hook for calling git-info before each command.
add-zsh-hook precmd _prompt_sorin_precmd
# Apply styles
prompt_sorin_style
# Define prompts.
PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} '
RPROMPT=''
SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? '
}
function prompt_sorin_style {
# Set editor-info parameters.
zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b'
zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}%F{3}%F{2}%f%b'
zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f'
zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}%F{3}%F{1}%f%b'
# Set git-info parameters.
zstyle ':prezto:module:git:info' verbose 'yes'
zstyle ':prezto:module:git:info:action' format '%F{7}:%f%%B%F{9}%s%f%%b'
zstyle ':prezto:module:git:info:added' format ' %%B%F{2}✚%f%%b'
zstyle ':prezto:module:git:info:ahead' format ' %%B%F{13}⬆%f%%b'
zstyle ':prezto:module:git:info:behind' format ' %%B%F{13}⬇%f%%b'
zstyle ':prezto:module:git:info:branch' format ' %%B%F{2}%b%f%%b'
zstyle ':prezto:module:git:info:commit' format ' %%B%F{3}%.7c%f%%b'
zstyle ':prezto:module:git:info:deleted' format ' %%B%F{1}✖%f%%b'
zstyle ':prezto:module:git:info:modified' format ' %%B%F{4}✱%f%%b'
zstyle ':prezto:module:git:info:position' format ' %%B%F{13}%p%f%%b'
zstyle ':prezto:module:git:info:renamed' format ' %%B%F{5}➜%f%%b'
zstyle ':prezto:module:git:info:stashed' format ' %%B%F{6}✭%f%%b'
zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{3}═%f%%b'
zstyle ':prezto:module:git:info:untracked' format ' %%B%F{7}◼%f%%b'
zstyle ':prezto:module:git:info:keys' format \
'status' '$(coalesce "%b" "%p" "%c")%s%A%B%S%a%d%m%r%U%u'
# Set ruby-info parameters.
zstyle ':prezto:module:ruby:info:version' format ' %F{4}rbenv%f:%F{2}%v%f'
# Set python-info parameters.
zstyle ':prezto:module:python:info:virtualenv' format ' %F{4}pyenv%f:%F{2}%v%f'
}
function prompt_sorin_preview {
local +h PROMPT=''
local +h RPROMPT=''
local +h SPROMPT=''
editor-info 2>/dev/null
prompt_preview_theme 'sorin'
}
prompt_sorin_setup "$@"