This commit is contained in:
Seth Milliken 2017-05-02 02:23:33 +00:00 committed by GitHub
commit fb748ade5a

View file

@ -0,0 +1,191 @@
# =====[ NAME ]=================================================================
#
# Shell Plugin
# =====[ DESCRIPTION ]==========================================================
#
# Functions for providing cleanly themeable values for basic prompt information.
#
# Each essentially exposes a simple shell parameter from `man zshparam` and
# wraps it in a prefix and suffix, so you can more cleanly apply style
# directives (i.e. color and spacing) rather than including them directly
# inline in your PROMPT.
#
# required plugins: none
# =====[ FUNCTIONS ]============================================================
#
# $(exit_status) : %? exit status of the previous command
#
# $(prompt_displayed_time) : %* time prompt was rendered
# : useful for seeing the approximate time of execution
# : for each command
#
# $(command_number) : %! command number associated with command
# : useful for using the shell's history functionality
#
# $(shell_depth) : $SHLVL derived current shell depth; by default
# : ignores the shell underlying a terminal multiplexer
# : (i.e. tmux, screen)
#
# $(jobs_info) : %j number of background jobs
#
# $(user_info) : %n the current user
#
# $(host_info) : %m the current host
#
# $(user_host_info) : %n@%m current user and current host
# : with themeable separator (default is "@")
#
# $(path_info) : %~ cwd
#
# $(prompt_character) : %# prompt indicator
# =====[ CONFIGURABLE SETTINGS (and default values) ]===========================
# Associative array for plugin settings
typeset -gA SHELL_PLUGIN
SHELL_PLUGIN[exit_status_failure_prefix]="%{$reset_color%}%{$fg[white]%}%{$bg[red]%} "
SHELL_PLUGIN[exit_status_failure_suffix]=" %{$reset_color%}"
SHELL_PLUGIN[exit_status_success_prefix]="%{$reset_color%}%{$fg[white]%}%{$bg[green]%} "
SHELL_PLUGIN[exit_status_success_suffix]=" %{$reset_color%}"
SHELL_PLUGIN[exit_status_success_hidden]=true
#SHELL_PLUGIN[exit_status_success_hidden]=
SHELL_PLUGIN[shell_level_prefix]="%{$fg[red]%}%{$bg[white]%}"
SHELL_PLUGIN[shell_level_prefix]+="⇣"
SHELL_PLUGIN[shell_level_suffix]="%{$reset_color%}"
SHELL_PLUGIN[shell_level_includes_multiplexer]=
#SHELL_PLUGIN[shell_level_includes_multiplexer]=true
SHELL_PLUGIN[prompt_displayed_time_prefix]="%{$fg_bold[green]%}["
SHELL_PLUGIN[prompt_displayed_time_suffix]="]%{$reset_color%}"
SHELL_PLUGIN[command_number_prefix]="%{$bg[white]%}%{$fg_bold[grey]%} "
SHELL_PLUGIN[command_number_suffix]=" %{$reset_color%}"
SHELL_PLUGIN[user_info_prefix]=
SHELL_PLUGIN[user_info_suffix]=
SHELL_PLUGIN[host_info_prefix]=
SHELL_PLUGIN[host_info_suffix]=
SHELL_PLUGIN[user_host_info_prefix]=
SHELL_PLUGIN[user_host_info_suffix]=
SHELL_PLUGIN[user_host_info_divider_symbol_prefix]="%{$fg[white]%}"
SHELL_PLUGIN[user_host_info_divider_symbol]="@"
SHELL_PLUGIN[user_host_info_divider_symbol_suffix]="%{$reset_color%}"
SHELL_PLUGIN[jobs_info_prefix]=
SHELL_PLUGIN[jobs_info_suffix]=
SHELL_PLUGIN[path_info_prefix]=
SHELL_PLUGIN[path_info_suffix]=
SHELL_PLUGIN[prompt_character_prefix]=" "
SHELL_PLUGIN[prompt_character_suffix]="%{$reset_color%} "
# =====[ IMPLEMENTATION ]=======================================================
# TODO: DRY up these implementations
function exit_status() {
local exit_status=$?
local result=''
if [[ $exit_status == 0 ]]; then
[[ -n "$SHELL_PLUGIN[exit_status_success_hidden]" ]] && return
result+=$SHELL_PLUGIN[exit_status_success_prefix]
result+="%?"
result+=$SHELL_PLUGIN[exit_status_success_suffix]
else
result+=$SHELL_PLUGIN[exit_status_failure_prefix]
result+="%?"
result+=$SHELL_PLUGIN[exit_status_failure_suffix]
fi
echo $result
}
function shell_depth() {
local level=$SHLVL
((level--))
if [[ -z $SHELL_PLUGIN[shell_level_includes_multiplexer] ]]; then
if [[ $STY != "" || $TMUX != "" ]]; then # ignore screen and tmux
((level--))
fi
fi
if [[ $level -gt 0 ]]; then
local result=''
result+="$SHELL_PLUGIN[shell_level_prefix]"
result+="$level"
result+="$SHELL_PLUGIN[shell_level_suffix]"
echo $result
fi
}
function prompt_displayed_time() {
local result=''
result+="$SHELL_PLUGIN[prompt_displayed_time_prefix]"
result+="%*"
result+="$SHELL_PLUGIN[prompt_displayed_time_suffix]"
echo $result
}
function command_number() {
local result=''
result+="$SHELL_PLUGIN[command_number_prefix]"
result+="%!"
result+="$SHELL_PLUGIN[command_number_suffix]"
echo $result
}
function user_info() {
local result=''
result+="$SHELL_PLUGIN[user_info_prefix]"
result+="%n"
result+="$SHELL_PLUGIN[user_info_suffix]"
echo $result
}
function host_info() {
local result=''
result+="$SHELL_PLUGIN[host_info_prefix]"
result+="%m"
result+="$SHELL_PLUGIN[host_info_suffix]"
echo $result
}
function user_host_info() {
local result=''
result+="$SHELL_PLUGIN[user_host_info_prefix]"
result+="$(user_info)"
result+="$SHELL_PLUGIN[user_host_info_divider_symbol_prefix]"
result+="$SHELL_PLUGIN[user_host_info_divider_symbol]"
result+="$SHELL_PLUGIN[user_host_info_divider_symbol_suffix]"
result+="$(host_info)"
result+="$SHELL_PLUGIN[user_host_info_suffix]"
echo $result
}
function jobs_info() {
local result=''
result+="$SHELL_PLUGIN[jobs_info_prefix]"
result+="%j"
result+="$SHELL_PLUGIN[jobs_info_suffix]"
echo $result
}
function path_info() {
local result=''
result+="$SHELL_PLUGIN[path_info_prefix]"
result+="%~"
result+="$SHELL_PLUGIN[path_info_suffix]"
echo $result
}
function prompt_character() {
local result=''
result+="$SHELL_PLUGIN[prompt_character_prefix]"
result+="%#"
result+="$SHELL_PLUGIN[prompt_character_suffix]"
echo $result
}