diff options
author | romkatv <roman.perepelitsa@gmail.com> | 2019-07-23 16:47:25 +0300 |
---|---|---|
committer | romkatv <roman.perepelitsa@gmail.com> | 2019-07-23 16:47:25 +0300 |
commit | d63fd9a8733876d0cbe3dd0e591b76aecb504d7e (patch) | |
tree | 50347b08cb10f30e5ee626dbacc26d586fd27cdc /functions | |
parent | 5ef0ec415eefbc8b4431a6e4b8e2a5e0d299176a (diff) |
start massive refactoring of config params
Diffstat (limited to 'functions')
-rwxr-xr-x | functions/colors.zsh | 28 | ||||
-rwxr-xr-x | functions/icons.zsh | 55 | ||||
-rwxr-xr-x | functions/utilities.zsh | 109 | ||||
-rwxr-xr-x | functions/vcs.zsh | 74 |
4 files changed, 110 insertions, 156 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh index d8b7cbe8..e5477aef 100755 --- a/functions/colors.zsh +++ b/functions/colors.zsh @@ -1,14 +1,6 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# Color functions -# This file holds some color-functions for -# the powerlevel9k-ZSH-theme -# https://github.com/bhilburn/powerlevel9k -################################################################ - -# https://jonasjacek.github.io/colors/ -# use color names by default to allow dark/light themes to adjust colors based on names -typeset -gAh __P9K_COLORS=( +# For compatibility with Powerlevel9k. It's not recommended to use mnemonic color +# names in the configuration except for colors 0-7 as these are standard. +typeset -grA __p9k_colors=( black 000 red 001 green 002 @@ -269,23 +261,25 @@ typeset -gAh __P9K_COLORS=( grey93 255 ) -# For user convenience: type `getColorCode background` or `getColorCode foreground` to see -# the list of predefined colors. +# For compatibility with Powerlevel9k. +# +# Type `getColorCode background` or `getColorCode foreground` to see the list of predefined colors. function getColorCode() { + emulate -L zsh if (( ARGC == 1 )); then case $1 in foreground) local k - for k in "${(k@)__P9K_COLORS}"; do - local v=${__P9K_COLORS[$k]} + for k in "${(k@)__p9k_colors}"; do + local v=${__p9k_colors[$k]} print -P "%F{$v}$v - $k%f" done return ;; background) local k - for k in "${(k@)__P9K_COLORS}"; do - local v=${__P9K_COLORS[$k]} + for k in "${(k@)__p9k_colors}"; do + local v=${__p9k_colors[$k]} print -P "%K{$v}$v - $k%k" done return diff --git a/functions/icons.zsh b/functions/icons.zsh index 64f6a04e..9349b8cc 100755 --- a/functions/icons.zsh +++ b/functions/icons.zsh @@ -1,34 +1,15 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# icons -# This file holds the icon definitions and -# icon-functions for the powerlevel9k-ZSH-theme -# https://github.com/bhilburn/powerlevel9k -################################################################ - -# These characters require the Powerline fonts to work properly. If you see -# boxes or bizarre characters below, your fonts are not correctly installed. If -# you do not want to install a special font, you can set `POWERLEVEL9K_MODE` to -# `compatible`. This shows all icons in regular symbols. - -# Initialize the icon list according to the user's `POWERLEVEL9K_MODE`. -typeset -gAH icons - -set_default POWERLEVEL9K_HIDE_BRANCH_ICON false -set_default POWERLEVEL9K_MODE "" - -typeset -gi _P9K_ICONS_INITIALIZED=0 +typeset -gA icons function _p9k_init_icons() { - (( _P9K_ICONS_INITIALIZED )) && return - _P9K_ICONS_INITIALIZED=1 + [[ $+_p9k_icon_mode && $_p9k_icon_mode == $POWERLEVEL9K_MODE ]] && return + typeset -g _p9k_icon_mode=$POWERLEVEL9K_MODE + + local LC_ALL=C.UTF-8 case $POWERLEVEL9K_MODE in 'flat'|'awesome-patched') # Awesome-Patched Font required! See: # https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" icons=( RULER_CHAR $'\u2500' # ─ LEFT_SEGMENT_SEPARATOR $'\uE0B0' # @@ -131,8 +112,6 @@ function _p9k_init_icons() { 'awesome-fontconfig') # fontconfig with awesome-font required! See # https://github.com/gabrielelana/awesome-terminal-fonts - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" icons=( RULER_CHAR $'\u2500' # ─ LEFT_SEGMENT_SEPARATOR $'\uE0B0' # @@ -232,16 +211,12 @@ function _p9k_init_icons() { # mapped fontconfig with awesome-font required! See # https://github.com/gabrielelana/awesome-terminal-fonts # don't forget to source the font maps in your startup script - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" - if [ -z "$AWESOME_GLYPHS_LOADED" ]; then echo "Powerlevel9k warning: Awesome-Font mappings have not been loaded. Source a font mapping in your shell config, per the Awesome-Font docs (https://github.com/gabrielelana/awesome-terminal-fonts), Or use a different Powerlevel9k font configuration."; fi - icons=( RULER_CHAR $'\u2500' # ─ LEFT_SEGMENT_SEPARATOR $'\uE0B0' # @@ -337,8 +312,6 @@ function _p9k_init_icons() { # nerd-font patched (complete) font required! See # https://github.com/ryanoasis/nerd-fonts # http://nerdfonts.com/#cheat-sheet - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" icons=( RULER_CHAR $'\u2500' # ─ LEFT_SEGMENT_SEPARATOR $'\uE0B0' # @@ -437,8 +410,6 @@ function _p9k_init_icons() { *) # Powerline-Patched Font required! # See https://github.com/Lokaltog/powerline-fonts - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" icons=( RULER_CHAR $'\u2500' # ─ LEFT_SEGMENT_SEPARATOR $'\uE0B0' # @@ -539,30 +510,22 @@ function _p9k_init_icons() { # Override the above icon settings with any user-defined variables. case $POWERLEVEL9K_MODE in 'flat') - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" icons[LEFT_SEGMENT_SEPARATOR]='' icons[RIGHT_SEGMENT_SEPARATOR]='' icons[LEFT_SUBSEGMENT_SEPARATOR]='|' icons[RIGHT_SUBSEGMENT_SEPARATOR]='|' ;; 'compatible') - # Set the right locale to protect special characters - local LC_ALL="" LC_CTYPE="en_US.UTF-8" icons[LEFT_SEGMENT_SEPARATOR]=$'\u2B80' # ⮀ icons[RIGHT_SEGMENT_SEPARATOR]=$'\u2B82' # ⮂ icons[VCS_BRANCH_ICON]='@' ;; esac - - if [[ "$POWERLEVEL9K_HIDE_BRANCH_ICON" == true ]]; then - icons[VCS_BRANCH_ICON]='' - fi } -# Safety function for printing icons -# Prints the named icon, or if that icon is undefined, the string name. +# Sadly, this is a part of public API. Its use is emphatically discouraged. function print_icon() { + emulate -L zsh _p9k_init_icons local icon_name=$1 local var_name=POWERLEVEL9K_${icon_name} @@ -573,11 +536,13 @@ function print_icon() { fi } -# Get a list of configured icons +# Prints a list of configured icons. +# # * $1 string - If "original", then the original icons are printed, # otherwise "print_icon" is used, which takes the users # overrides into account. function get_icon_names() { + emulate -L zsh _p9k_init_icons # Iterate over a ordered list of keys of the icons array for key in ${(@kon)icons}; do diff --git a/functions/utilities.zsh b/functions/utilities.zsh index 5d32370c..f0263ce6 100755 --- a/functions/utilities.zsh +++ b/functions/utilities.zsh @@ -1,48 +1,46 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# Utility functions -# This file holds some utility-functions for -# the powerlevel9k-ZSH-theme -# https://github.com/bhilburn/powerlevel9k -################################################################ - -# Usage: set_default [OPTION]... NAME [VALUE]... -# -# Options are the same as in `typeset`. -function set_default() { - emulate -L zsh - local -a flags=(-g) - while true; do - case $1 in - --) shift; break;; - -*) flags+=$1; shift;; - *) break; - esac - done - - local varname=$1 - shift - if [[ -n ${(tP)varname} ]]; then - typeset $flags $varname - elif [[ "$flags" == *[aA]* ]]; then - eval "typeset ${(@q)flags} ${(q)varname}=(${(qq)@})" - else - typeset $flags $varname="$*" - fi -} - -function _p9k_g_expand() { - (( $+parameters[$1] )) || return - local -a ts=("${=$(typeset -p $1)}") - shift ts - local x - for x in "${ts[@]}"; do - [[ $x == -* ]] || break - # Don't change readonly variables. Ideally, we shouldn't modify any variables at all, - # but for now this will do. - [[ $x == -*r* ]] && return - done - typeset -g $1=${(g::)${(P)1}} +# _p9k_declare <type> <uppercase-name> [default]... +function _p9k_declare() { + local -i set=$+parameters[$2] + (( ARGC > 2 || set )) || return 0 + case $1 in + -b) + if (( set )); then + [[ ${(P)2} == true ]] && typeset -gi _$2=1 || typeset -gi _$2=0 + else + typeset -gi _$2=$3 + fi + ;; + -a) + local -a v=(${(P)2}) + if (( set )); then + eval "typeset -ga _${(q)2}=(${(@qq)v})"; + else + if [[ $3 != '--' ]]; then + echo "internal error in _p9k_declare " "${(qqq)@}" >&2 + fi + eval "typeset -ga _${(q)2}=(${(@qq)*[4,-1]})" + fi + ;; + -i) + (( set )) && typeset -gi _$2=$2 || typeset -gi _$2=$3 + ;; + -F) + (( set )) && typeset -gF _$2=$2 || typeset -gF _$2=$3 + ;; + -s) + (( set )) && typeset -g _$2=${(P)2} || typeset -g _$2=$3 + ;; + -e) + if (( set )); then + local v=${(P)2} + typeset -g _$2=${(g::)v} + else + typeset -g _$2=${(g::)3} + fi + ;; + *) + echo "internal error in _p9k_declare " "${(qqq)@}" >&2 + esac } # If we execute `print -P $1`, how many characters will be printed on the last line? @@ -69,21 +67,21 @@ function _p9k_prompt_length() { typeset ${${(%):-$1%$m(l.x.y)}[-1]}=$m done fi - _P9K_RETVAL=$x + _p9k_ret=$x } -typeset -g _P9K_BYTE_SUFFIX=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y') +typeset -gr __p9k_byte_suffix=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y') # 42 => 42B # 1536 => 1.5K function _p9k_human_readable_bytes() { typeset -F 2 n=$1 local suf - for suf in $_P9K_BYTE_SUFFIX; do + for suf in $__p9k_byte_suffix; do (( n < 100 )) && break (( n /= 1024 )) done - _P9K_RETVAL=$n$suf + _p9k_ret=$n$suf } # Determine if the passed segment is used in the prompt @@ -92,11 +90,10 @@ function _p9k_human_readable_bytes() { # either the LEFT or RIGHT prompt arrays. # * $1: The segment to be tested. segment_in_use() { - local key=$1 - [[ -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)${key}]}" || - -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)${key}_joined]}" || - -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)${key}]}" || - -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)${key}_joined]}" ]] + [[ -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)${1}]}" || + -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)${1}_joined]}" || + -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)${1}]}" || + -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)${1}_joined]}" ]] } function _p9k_parse_ip() { @@ -120,7 +117,7 @@ function _p9k_parse_ip() { local ipFound="${match[3]}" local -a interfaceStates=(${(s:,:)match[1]}) if (( ${interfaceStates[(I)UP]} )); then - _P9K_RETVAL=$ipFound + _p9k_ret=$ipFound return fi fi @@ -132,7 +129,7 @@ function _p9k_parse_ip() { local interface for interface in "${(@)interfaces}"; do if [[ "$interface" =~ $pattern ]]; then - _P9K_RETVAL=$match[1] + _p9k_ret=$match[1] return fi done diff --git a/functions/vcs.zsh b/functions/vcs.zsh index d89525fd..7c431067 100755 --- a/functions/vcs.zsh +++ b/functions/vcs.zsh @@ -1,12 +1,3 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# vcs -# This file holds supplemental VCS functions -# for the powerlevel9k-ZSH-theme -# https://github.com/bhilburn/powerlevel9k -################################################################ - -set_default POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY false function +vi-git-untracked() { [[ -z "${vcs_comm[gitdir]}" || "${vcs_comm[gitdir]}" == "." ]] && return @@ -17,7 +8,7 @@ function +vi-git-untracked() { local untrackedFiles=$(command git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null) - if [[ -z $untrackedFiles && "$POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY" == "true" ]]; then + if [[ -z $untrackedFiles && $_POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY == 1 ]]; then untrackedFiles+=$(command git submodule foreach --quiet --recursive 'command git ls-files --others --exclude-standard' 2> /dev/null) fi @@ -51,20 +42,24 @@ function +vi-git-remotebranch() { # Are we on a remote-tracking branch? remote=${$(command git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/} - if [[ -n "$POWERLEVEL9K_VCS_SHORTEN_LENGTH" ]] && [[ -n "$POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH" ]]; then - if [ ${#hook_com[branch]} -gt ${POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH} ] && [ ${#hook_com[branch]} -gt ${POWERLEVEL9K_VCS_SHORTEN_LENGTH} ]; then - case "$POWERLEVEL9K_VCS_SHORTEN_STRATEGY" in + if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH )); then + if (( ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )); then + case $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY in truncate_middle) - hook_com[branch]="${branch_name:0:$POWERLEVEL9K_VCS_SHORTEN_LENGTH}${POWERLEVEL9K_VCS_SHORTEN_DELIMITER}${branch_name: -$POWERLEVEL9K_VCS_SHORTEN_LENGTH}" + hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}${branch_name: -$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}" ;; truncate_from_right) - hook_com[branch]="${branch_name:0:$POWERLEVEL9K_VCS_SHORTEN_LENGTH}${POWERLEVEL9K_VCS_SHORTEN_DELIMITER}" + hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}" ;; esac fi fi - hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}" + if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then + hook_com[branch]="${hook_com[branch]}" + else + hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}" + fi # Always show the remote #if [[ -n ${remote} ]] ; then # Only show the remote if it differs from the local @@ -73,30 +68,33 @@ function +vi-git-remotebranch() { fi } -set_default POWERLEVEL9K_VCS_HIDE_TAGS false function +vi-git-tagname() { - if [[ "$POWERLEVEL9K_VCS_HIDE_TAGS" == "false" ]]; then - # If we are on a tag, append the tagname to the current branch string. - local tag - tag=$(command git describe --tags --exact-match HEAD 2>/dev/null) - - if [[ -n "${tag}" ]] ; then - # There is a tag that points to our current commit. Need to determine if we - # are also on a branch, or are in a DETACHED_HEAD state. - if [[ -z $(command git symbolic-ref HEAD 2>/dev/null) ]]; then - # DETACHED_HEAD state. We want to append the tag name to the commit hash - # and print it. Unfortunately, `vcs_info` blows away the hash when a tag - # exists, so we have to manually retrieve it and clobber the branch - # string. - local revision - revision=$(command git rev-list -n 1 --abbrev-commit --abbrev=${POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH} HEAD) + if (( !_POWERLEVEL9K_VCS_HIDE_TAGS )); then + # If we are on a tag, append the tagname to the current branch string. + local tag + tag=$(command git describe --tags --exact-match HEAD 2>/dev/null) + + if [[ -n "${tag}" ]] ; then + # There is a tag that points to our current commit. Need to determine if we + # are also on a branch, or are in a DETACHED_HEAD state. + if [[ -z $(command git symbolic-ref HEAD 2>/dev/null) ]]; then + # DETACHED_HEAD state. We want to append the tag name to the commit hash + # and print it. Unfortunately, `vcs_info` blows away the hash when a tag + # exists, so we have to manually retrieve it and clobber the branch + # string. + local revision + revision=$(command git rev-list -n 1 --abbrev-commit --abbrev=${_POWERLEVEL9K_CHANGESET_HASH_LENGTH} HEAD) + if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then + hook_com[branch]="${revision} $(print_icon 'VCS_TAG_ICON')${tag}" + else hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}" - else - # We are on both a tag and a branch; print both by appending the tag name. - hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}" - fi - fi - fi + fi + else + # We are on both a tag and a branch; print both by appending the tag name. + hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}" + fi + fi + fi } # Show count of stashed changes |