diff --git a/functions/alias.zsh b/functions/alias.zsh index 62af43c..436b805 100644 --- a/functions/alias.zsh +++ b/functions/alias.zsh @@ -2,7 +2,7 @@ setopt correct # Correct commands. setopt correct_all # Correct all arguments. # The 'ls' Family -if [[ "$DISABLE_COLOR" != 'true' ]]; then +if ! check-bool "$DISABLE_COLOR"; then if [[ -f "$HOME/.dir_colors" ]] && ( (( $+commands[dircolors] )) || ( (( $+plugins[(er)gnu-utils] )) && (( $+commands[gdircolors] )) ) ); then eval $("${commands[dircolors]:-$commands[gdircolors]}" "$HOME/.dir_colors") alias ls='ls -hF --group-directories-first --color=auto' @@ -80,7 +80,7 @@ else fi # Diff/Make -if [[ "$DISABLE_COLOR" != 'true' ]]; then +if ! check-bool "$DISABLE_COLOR"; then if (( $+commands[colordiff] )); then alias diff='colordiff -u' compdef colordiff=diff diff --git a/functions/environment.zsh b/functions/environment.zsh index 4909ea9..ec725ff 100644 --- a/functions/environment.zsh +++ b/functions/environment.zsh @@ -64,7 +64,7 @@ export VISUAL="vim" export PAGER='less' # Grep -if [[ "$DISABLE_COLOR" != 'true' ]]; then +if ! check-bool "$DISABLE_COLOR"; then export GREP_COLOR='37;45' export GREP_OPTIONS='--color=auto' fi @@ -89,7 +89,7 @@ if (( $+commands[lesspipe.sh] )); then fi # Termcap -if [[ "$DISABLE_COLOR" != 'true' ]]; then +if ! check-bool "$DISABLE_COLOR"; then export LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking export LESS_TERMCAP_md=$'\E[01;31m' # begin bold export LESS_TERMCAP_me=$'\E[0m' # end mode diff --git a/functions/helper.zsh b/functions/helper.zsh new file mode 100644 index 0000000..89e7514 --- /dev/null +++ b/functions/helper.zsh @@ -0,0 +1,50 @@ +# Checks if a file can be autoloaded by trying to load it in a subshell. +function autoloadable() { + ( unfunction $1 ; autoload -U +X $1 ) &> /dev/null +} + +# Checks boolean variable for "true" (case insensitive "1", "y", "yes", "t", "true", "o", and "on"). +function check-bool { + [[ -n "$1" && "$1" == (1|[Yy]([Ee][Ss]|)|[Tt]([Rr][Uu][Ee]|)|[Oo]([Nn]|)) ]] +} + +# Trap signals were generated with 'kill -l'. +# DEBUG, EXIT, and ZERR are ZSH signals. +TRAP_SIGNALS=( + ABRT ALRM BUS CHLD CONT EMT FPE HUP ILL INFO INT IO KILL PIPE PROF QUIT + SEGV STOP SYS TERM TRAP TSTP TTIN TTOU URG USR1 USR2 VTALRM WINCH XCPU XFSZ + DEBUG EXIT ZERR +) + +# Adds a function to a list to be called when a trap is triggered. +function add-zsh-trap { + if (( $# < 2 )); then + echo "Usage: $0 type function" + return 1 + fi + + if [[ -z "$TRAP_SIGNALS[(r)$1]" ]]; then + echo "$0: unknown signal: $1" + return 1 + fi + + local trap_functions="TRAP${1}_FUNCTIONS" + if (( ! ${(P)+trap_functions} )); then + typeset -gaU "$trap_functions" + fi + eval "$trap_functions+="$2"" + + if (( ! $+functions[TRAP${1}] )); then + eval " + function TRAP${1}() { + for trap_function in \"\$TRAP${1}_FUNCTIONS[@]\"; do + if (( \$+functions[\$trap_function] )); then + \"\$trap_function\" \"\$1\" + fi + done + return \$(( 128 + \$1 )) + } + " + fi +} + diff --git a/functions/terminal.zsh b/functions/terminal.zsh index bdd71cc..ab5071a 100644 --- a/functions/terminal.zsh +++ b/functions/terminal.zsh @@ -14,7 +14,7 @@ fi # Partially supports Mac OS X Terminal since it can't set window and tab separately. # Usage: title "tab title" "window title" function terminal-title { - if [[ "$DISABLE_AUTO_TITLE" != 'true' ]]; then + if ! check-bool "$DISABLE_AUTO_TITLE"; then if [[ "$TERM" == screen* ]]; then # Set GNU Screen's hardstatus (usually truncated at 20 characters). printf "\ek%s\e\\" ${(V)1} diff --git a/plugins/compleat/compleat.plugin.zsh b/plugins/compleat/compleat.plugin.zsh index 6601310..1010733 100644 --- a/plugins/compleat/compleat.plugin.zsh +++ b/plugins/compleat/compleat.plugin.zsh @@ -2,14 +2,14 @@ # FILE: compleat.plugin.zsh # DESCRIPTION: oh-my-zsh plugin file. # AUTHOR: Sorin Ionescu -# VERSION: 1.0.1 +# VERSION: 1.0.2 # ------------------------------------------------------------------------------ if (( ${+commands[compleat]} )); then compleat_setup="${commands[compleat]:h:h}/share/compleat-1.0/compleat_setup" if [[ -f "$compleat_setup" ]]; then - if ! bashcompinit >/dev/null 2>&1; then + if autoloadable bashcompinit; then autoload -Uz bashcompinit && bashcompinit fi diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index cbf0039..c89ce01 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -85,27 +85,27 @@ function git-prompt-status() { fi while IFS=$'\n' read line; do - if [[ "$line" == \?\?\ * ]] && [[ untracked != 'yes' ]]; then + if [[ "$line" == \?\?\ * ]] && ! check-bool "$untracked"; then untracked='yes' indicators="${ZSH_THEME_GIT_PROMPT_UNTRACKED}${indicators}" fi - if [[ "$line" == (((A|M|D|T) )|(AD|AM|AT|MM))\ * ]] && [[ added != 'yes' ]]; then + if [[ "$line" == (((A|M|D|T) )|(AD|AM|AT|MM))\ * ]] && ! check-bool "$added"; then added='yes' indicators="${ZSH_THEME_GIT_PROMPT_ADDED}${indicators}" fi - if [[ "$line" == (( (M|T))|(AM|AT|MM))\ * ]] && [[ modified != 'yes' ]]; then + if [[ "$line" == (( (M|T))|(AM|AT|MM))\ * ]] && ! check-bool "$modified"; then modified='yes' indicators="${ZSH_THEME_GIT_PROMPT_MODIFIED}${indicators}" fi - if [[ "$line" == R\ \ * ]] && [[ renamed != 'yes' ]]; then + if [[ "$line" == R\ \ * ]] && ! check-bool "$renamed"; then renamed='yes' indicators="${ZSH_THEME_GIT_PROMPT_RENAMED}${indicators}" fi - if [[ "$line" == ( D|AD)\ * ]] && [[ deleted != 'yes' ]]; then + if [[ "$line" == ( D|AD)\ * ]] && ! check-bool "$deleted"; then deleted='yes' indicators="${ZSH_THEME_GIT_PROMPT_DELETED}${indicators}" fi - if [[ "$line" == UU\ * ]] && [[ unmerged != 'yes' ]]; then + if [[ "$line" == UU\ * ]] && ! check-bool "$unmerged"; then unmerged='yes' indicators="${ZSH_THEME_GIT_PROMPT_UNMERGED}${indicators}" fi