diff --git a/functions/utils.zsh b/functions/utils.zsh new file mode 100644 index 0000000000000000000000000000000000000000..d9a2c6b38325d5b6d861f59396968b587970d2ba --- /dev/null +++ b/functions/utils.zsh @@ -0,0 +1,54 @@ +# +# functions/utils.zsh - provide useful functions +# +# This work is free. You can redistribute it and/or modify it under the terms of +# the Do What The Fuck You Want To Public License, Version 2, as published by Sam +# Hocevar. See the COPYING file or http://www.wtfpl.net/ for more details. +# + +# Given the name of a variable and a default value, sets the variable value to the +# default if and only if it has not been defined. +# +# @param $1 : name of the variable to be filled +# @param $2 : default value set if $1 is not already defined +function set_default() { + + # /!\ compute differently with color variables + # TODO make the regex case-insensitive + if [[ $1 =~ '_COLOR(_.*)?$' ]]; then + set_default_color $1 $2 + else + # See http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags + [[ -z ${(P)1} ]] && typeset -g $1=$2 + fi +} + +# Given the name of a variable and a default value, overwrites the variable value +# if and only if it has not been properly set as a visual effect. +# +# @param $1 : name of the variable to be filled +# @param $2 : default value set if $1 is not already a visual effect or a color code +function set_default_color() { + + # See http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects + if [[ ! ${(P)1} =~ '%' ]]; then + + # If the variable whose name is $1 has already been overwritten, + # use this color instead of the default one provided in $2 + if [[ -n ${(P)1} ]]; then + typeset -g $1="%F{${(P)1}}" + else + + # Distinguish case in which $2 is already a visual effect + # and case in which it is only a color code + if [[ $2 =~ '%' ]]; then + typeset -g $1=$2 + else + typeset -g $1="%F{$2}" + fi + fi + fi +} + +# vim: ft=zsh fenc=utf-8 + diff --git a/via.zsh-theme b/via.zsh-theme index 175f5f613585f0c1f6aaf27e6676b3c2487cb46c..f2808ecca48fea9dfe9e0fe7fd8981af21258174 100644 --- a/via.zsh-theme +++ b/via.zsh-theme @@ -13,6 +13,7 @@ OHMYVIA_INSTALLATION_PATH="$(dirname "$0")" +source $OHMYVIA_INSTALLATION_PATH/functions/utils.zsh source $OHMYVIA_INSTALLATION_PATH/functions/vcs_themes.zsh source $OHMYVIA_INSTALLATION_PATH/functions/vcs_utils.zsh @@ -49,11 +50,11 @@ zstyle ':vcs_info:*' max-exports 1 # vcs_info only sets vcs_info_msg_0_ zstyle ':vcs_info:*' enable git zstyle ':vcs_info:*' check-for-changes true # enable %c and %u sequences usage -OHMYVIA_VCS_COLOR_UNSTAGED=${OHMYVIA_VCS_COLOR_UNSTAGED:-"%F{red}"} -OHMYVIA_VCS_COLOR_STAGED=${OHMYVIA_VCS_COLOR_STAGED:-"%F{yellow}"} -OHMYVIA_VCS_COLOR_UNTRACKED=${OHMYVIA_VCS_COLOR_UNTRACKED:-"%F{blue}"} -OHMYVIA_VCS_COLOR_STASH=${OHMYVIA_VCS_COLOR_STASH:-"%F{cyan}"} -OHMYVIA_VCS_COLOR_CLEAN=${OHMYVIA_VCS_COLOR_CLEAN:-"%F{green}"} +set_default OHMYVIA_VCS_COLOR_UNSTAGED "red" +set_default OHMYVIA_VCS_COLOR_STAGED "yellow" +set_default OHMYVIA_VCS_COLOR_UNTRACKED "blue" +set_default OHMYVIA_VCS_COLOR_STASH "cyan" +set_default OHMYVIA_VCS_COLOR_CLEAN "green" zstyle ':vcs_info:*' unstagedstr $OHMYVIA_VCS_COLOR_UNSTAGED zstyle ':vcs_info:*' stagedstr $OHMYVIA_VCS_COLOR_STAGED @@ -61,7 +62,7 @@ zstyle ':vcs_info:*' stagedstr $OHMYVIA_VCS_COLOR_STAGED zstyle ':vcs_info:git*+set-message:*' hooks misc-init git-stash git-untracked # Load VCS theme -OHMYVIA_VCS_THEME=${OHMYVIA_VCS_THEME:-"default"} +set_default OHMYVIA_VCS_THEME "default" eval +vi-theme-$OHMYVIA_VCS_THEME zstyle ':vcs_info:*' formats " $OHMYVIA_VCS_PROMPT_NORMAL"