From a6a2d9a4815534a0ddbd8f76e5e17b33af75d700 Mon Sep 17 00:00:00 2001 From: romkatv Date: Tue, 18 Feb 2020 16:11:34 +0100 Subject: [PATCH] stop loading icons.zsh lazily; print boundaries in get_icon_names --- internal/icons.zsh | 37 +++++++++++++++++++++++-------------- internal/p10k.zsh | 30 ++---------------------------- internal/wizard.zsh | 1 - 3 files changed, 25 insertions(+), 43 deletions(-) diff --git a/internal/icons.zsh b/internal/icons.zsh index 21d421b1..f7476e41 100644 --- a/internal/icons.zsh +++ b/internal/icons.zsh @@ -636,14 +636,18 @@ function _p9k_init_icons() { } # Sadly, this is a part of public API. Its use is emphatically discouraged. -function _p9k_print_icon() { +function print_icon() { + eval "$__p9k_intro" + if (( ! $+_p9k__locale )); then + _p9k_init_locale + [[ -z $_p9k__locale ]] || local LC_ALL=$_p9k__locale + fi _p9k_init_icons - local icon_name=$1 - local var_name=POWERLEVEL9K_${icon_name} - if [[ -n "${(tP)var_name}" ]]; then - echo -n "${(P)var_name}" + local var=POWERLEVEL9K_$1 + if (( $+parameters[$var] )); then + echo -n - ${(P)var} else - echo -n "${icons[$icon_name]}" + echo -n - $icons[$1] fi } @@ -652,17 +656,22 @@ function _p9k_print_icon() { # * $1 string - If "original", then the original icons are printed, # otherwise "print_icon" is used, which takes the users # overrides into account. -function _p9k_get_icon_names() { +function get_icon_names() { + eval "$__p9k_intro" + if (( ! $+_p9k__locale )); then + _p9k_init_locale + [[ -z $_p9k__locale ]] || local LC_ALL=$_p9k__locale + fi _p9k_init_icons - # Iterate over a ordered list of keys of the icons array + local key for key in ${(@kon)icons}; do - echo -n "POWERLEVEL9K_$key: " - if [[ "${1}" == "original" ]]; then - # print the original icons as they are defined in the array above - echo "${icons[$key]}" + echo -n - "POWERLEVEL9K_$key: " + print -nP "%K{red} %k" + if [[ $1 == original ]]; then + echo -n - $icons[$key] else - # print the icons as they are configured by the user - echo "$(print_icon "$key")" + print_icon $key fi + print -P "%K{red} %k" done } diff --git a/internal/p10k.zsh b/internal/p10k.zsh index 6b72dba5..9867982d 100644 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -52,6 +52,7 @@ fi source "${__p9k_root_dir}/internal/configure.zsh" source "${__p9k_root_dir}/internal/worker.zsh" source "${__p9k_root_dir}/internal/parser.zsh" +source "${__p9k_root_dir}/internal/icons.zsh" # 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. @@ -137,32 +138,6 @@ function getColorCode() { return 1 } -# Sadly, this is a part of public API. Its use is emphatically discouraged. -function print_icon() { - eval "$__p9k_intro" - if (( ! $+_p9k__locale )); then - _p9k_init_locale - [[ -z $_p9k__locale ]] || local LC_ALL=$_p9k__locale - fi - (( $+functions[_p9k_print_icon] )) || source "${__p9k_root_dir}/internal/icons.zsh" - _p9k_print_icon "$@" -} - -# 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() { - eval "$__p9k_intro" - if (( ! $+_p9k__locale )); then - _p9k_init_locale - [[ -z $_p9k__locale ]] || local LC_ALL=$_p9k__locale - fi - (( $+functions[_p9k_get_icon_names] )) || source "${__p9k_root_dir}/internal/icons.zsh" - _p9k_get_icon_names "$@" -} - # _p9k_declare [default]... function _p9k_declare() { local -i set=$+parameters[$2] @@ -7055,7 +7030,7 @@ _p9k_must_init() { [[ $sig == $_p9k__param_sig ]] && return 1 _p9k_deinit fi - _p9k__param_pat=$'v50\1'${ZSH_VERSION}$'\1'${ZSH_PATCHLEVEL}$'\1' + _p9k__param_pat=$'v51\1'${ZSH_VERSION}$'\1'${ZSH_PATCHLEVEL}$'\1' _p9k__param_pat+=$'${#parameters[(I)POWERLEVEL9K_*]}\1${(%):-%n%#}\1$GITSTATUS_LOG_LEVEL\1' _p9k__param_pat+=$'$GITSTATUS_ENABLE_LOGGING\1$GITSTATUS_DAEMON\1$GITSTATUS_NUM_THREADS\1' _p9k__param_pat+=$'$DEFAULT_USER\1${ZLE_RPROMPT_INDENT:-1}\1$P9K_SSH\1$__p9k_ksh_arrays' @@ -7075,7 +7050,6 @@ function _p9k_set_os() { } function _p9k_init_cacheable() { - (( $+functions[_p9k_init_icons] )) || source "${__p9k_root_dir}/internal/icons.zsh" _p9k_init_icons _p9k_init_params _p9k_init_prompt diff --git a/internal/wizard.zsh b/internal/wizard.zsh index d7e664a6..87256f13 100755 --- a/internal/wizard.zsh +++ b/internal/wizard.zsh @@ -1827,7 +1827,6 @@ fi zmodload zsh/terminfo || return autoload -Uz is-at-least || return -source $__p9k_root_dir/internal/icons.zsh || return if is-at-least 5.7.1 && [[ $COLORTERM == (24bit|truecolor) ]]; then local -ir has_truecolor=1