From e537a0ee628341741f20a7d2d96ea1c4fac74c4a Mon Sep 17 00:00:00 2001 From: romkatv Date: Tue, 20 Aug 2019 14:56:43 +0200 Subject: [PATCH] better utf-8 handling --- config/p10k-classic.zsh | 3 ++- config/p10k-lean.zsh | 3 ++- internal/icons.zsh | 12 +++++++----- internal/p10k.zsh | 16 ++++++++-------- internal/wizard.zsh | 3 ++- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/config/p10k-classic.zsh b/config/p10k-classic.zsh index 5eb4f7de..6be7c45c 100644 --- a/config/p10k-classic.zsh +++ b/config/p10k-classic.zsh @@ -16,7 +16,8 @@ fi () { emulate -L zsh setopt no_unset - if [[ ${LC_ALL:-${LANG:-}} != *.(utf|UTF)(-|)8 ]]; then + zmodload zsh/langinfo + if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} fi diff --git a/config/p10k-lean.zsh b/config/p10k-lean.zsh index 8704c59b..696d6a4e 100644 --- a/config/p10k-lean.zsh +++ b/config/p10k-lean.zsh @@ -16,7 +16,8 @@ fi () { emulate -L zsh setopt no_unset - if [[ ${LC_ALL:-${LANG:-}} != *.(utf|UTF)(-|)8 ]]; then + zmodload zsh/langinfo + if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} fi diff --git a/internal/icons.zsh b/internal/icons.zsh index e93712c4..fd2ab1be 100755 --- a/internal/icons.zsh +++ b/internal/icons.zsh @@ -3,9 +3,11 @@ typeset -gA icons function _p9k_init_icons() { [[ $+_p9k_icon_mode == 1 && $_p9k_icon_mode == $POWERLEVEL9K_MODE ]] && return typeset -g _p9k_icon_mode=$POWERLEVEL9K_MODE - typeset -g _p9k_locale=${LC_ALL:-$LANG} - if [[ $_p9k_locale != *.(utf|UTF)(-|)8 ]]; then - _p9k_locale=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} + zmodload zsh/langinfo + if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then + typeset -g _p9k_locale=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} + else + typeset -g _p9k_locale= fi case $POWERLEVEL9K_MODE in @@ -535,7 +537,7 @@ function _p9k_init_icons() { function print_icon() { emulate -L zsh && setopt no_hist_expand extended_glob no_prompt_bang prompt_{cr,percent,subst,sp} _p9k_init_icons - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale local icon_name=$1 local var_name=POWERLEVEL9K_${icon_name} if [[ -n "${(tP)var_name}" ]]; then @@ -553,7 +555,7 @@ function print_icon() { function get_icon_names() { emulate -L zsh && setopt no_hist_expand extended_glob no_prompt_bang prompt_{cr,percent,subst,sp} _p9k_init_icons - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale # Iterate over a ordered list of keys of the icons array for key in ${(@kon)icons}; do echo -n "POWERLEVEL9K_$key: " diff --git a/internal/p10k.zsh b/internal/p10k.zsh index 30499b66..255919a4 100755 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -147,7 +147,7 @@ function _p9k_declare() { (( set )) && typeset -g _$2=${(P)2} || typeset -g _$2=$3 ;; -e) - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale if (( set )); then local v=${(P)2} typeset -g _$2=${(g::)v} @@ -330,7 +330,7 @@ _p9k_get_icon() { if [[ $_p9k_ret == $'\1'* ]]; then _p9k_ret=${_p9k_ret[2,-1]} else - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale _p9k_ret=${(g::)_p9k_ret} [[ $_p9k_ret != $'\b'? ]] || _p9k_ret="%{$_p9k_ret%}" # penance for past sins fi @@ -551,7 +551,7 @@ _p9k_left_prompt_segment() { p+='${${_p9k_e:#00}:+${${_p9k_t[$_p9k_n]/'$ss'/$_p9k_ss}/'$s'/$_p9k_s}' - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale _p9k_param $1 ICON_BEFORE_CONTENT '' if [[ $_p9k_ret != false ]]; then _p9k_param $1 PREFIX '' @@ -752,7 +752,7 @@ _p9k_right_prompt_segment() { p+='${${_p9k_e:#00}:+${_p9k_t[$_p9k_n]/'$w'/$_p9k_w}' - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale _p9k_param $1 ICON_BEFORE_CONTENT '' if [[ $_p9k_ret != true ]]; then _p9k_param $1 PREFIX '' @@ -1091,7 +1091,7 @@ prompt_context() { if [[ -z $content ]]; then local var=POWERLEVEL9K_CONTEXT_${state}_TEMPLATE if (( $+parameters[$var] )); then - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale content=${(P)var} content=${(g::)content} else @@ -3570,7 +3570,7 @@ _p9k_init_params() { if [[ $parameters[POWERLEVEL9K_BATTERY_STAGES] == scalar ]]; then _p9k_declare -e POWERLEVEL9K_BATTERY_STAGES else - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale _p9k_declare -a POWERLEVEL9K_BATTERY_STAGES -- _POWERLEVEL9K_BATTERY_STAGES=("${(@g::)_POWERLEVEL9K_BATTERY_STAGES}") fi @@ -3833,7 +3833,7 @@ _p9k_build_gap_post() { } _p9k_init_lines() { - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale local -a left_segments=($_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS) local -a right_segments=($_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS) @@ -4250,7 +4250,7 @@ _p9k_init() { if _p9k_segment_in_use dir; then if (( $+_POWERLEVEL9K_DIR_CLASSES )); then - local LC_ALL=$_p9k_locale + [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale local -i i=3 for ((; i <= $#_POWERLEVEL9K_DIR_CLASSES; i+=3)); do _POWERLEVEL9K_DIR_CLASSES[i]=${(g::)_POWERLEVEL9K_DIR_CLASSES[i]} diff --git a/internal/wizard.zsh b/internal/wizard.zsh index b6bbd445..9941f7ed 100755 --- a/internal/wizard.zsh +++ b/internal/wizard.zsh @@ -5,7 +5,8 @@ setopt noaliases () { setopt extended_glob no_prompt_{bang,subst} prompt_{cr,percent,sp} -if [[ ${LC_ALL:-$LANG} != *.(utf|UTF)(-|)8 ]]; then +zmodload zsh/langinfo +if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} fi