From a9715367d4547dabaa724f9907bc971078453528 Mon Sep 17 00:00:00 2001 From: romkatv Date: Sun, 26 Jan 2020 16:54:52 +0100 Subject: [PATCH] fix prompt_char (never showed error); unify options --- internal/configure.zsh | 5 +- internal/icons.zsh | 4 -- internal/p10k.zsh | 115 +++++++++++++++++----------------------- internal/wizard.zsh | 7 --- internal/worker.zsh | 12 ++--- powerlevel10k.zsh-theme | 11 ++-- 6 files changed, 62 insertions(+), 92 deletions(-) diff --git a/internal/configure.zsh b/internal/configure.zsh index a627ca6a..588dd02a 100644 --- a/internal/configure.zsh +++ b/internal/configure.zsh @@ -11,8 +11,6 @@ typeset -gr __p9k_zshrc_u=$__p9k_zd_u/.zshrc typeset -gr __p9k_root_dir_u=${${${(q)__p9k_root_dir}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} function _p9k_can_configure() { - emulate -L zsh - setopt extended_glob no_prompt_{bang,subst} prompt_percent [[ $1 == '-q' ]] && local -i q=1 || local -i q=0 function $0_error() { (( q )) || print -rP "%1F[ERROR]%f %Bp10k configure%b: $1" >&2 @@ -61,8 +59,7 @@ function _p9k_can_configure() { } function p9k_configure() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro ( set -- -f source $__p9k_root_dir/internal/wizard.zsh diff --git a/internal/icons.zsh b/internal/icons.zsh index f9dc4ed7..63e9e2e4 100644 --- a/internal/icons.zsh +++ b/internal/icons.zsh @@ -590,8 +590,6 @@ function _p9k_init_icons() { # Sadly, this is a part of public API. Its use is emphatically discouraged. function _p9k_print_icon() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} _p9k_init_icons [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale local icon_name=$1 @@ -609,8 +607,6 @@ function _p9k_print_icon() { # otherwise "print_icon" is used, which takes the users # overrides into account. function _p9k_get_icon_names() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} _p9k_init_icons [[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale # Iterate over a ordered list of keys of the icons array diff --git a/internal/p10k.zsh b/internal/p10k.zsh index 845f2037..7c80337d 100644 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -89,8 +89,7 @@ typeset -grA __p9k_colors=( # # Type `getColorCode background` or `getColorCode foreground` to see the list of predefined colors. function getColorCode() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro if (( ARGC == 1 )); then case $1 in foreground) @@ -117,8 +116,7 @@ function getColorCode() { # Sadly, this is a part of public API. Its use is emphatically discouraged. function print_icon() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro (( $+functions[_p9k_print_icon] )) || source "${__p9k_root_dir}/internal/icons.zsh" _p9k_print_icon "$@" } @@ -129,8 +127,7 @@ function print_icon() { # otherwise "print_icon" is used, which takes the users # overrides into account. function get_icon_names() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro (( $+functions[_p9k_get_icon_names] )) || source "${__p9k_root_dir}/internal/icons.zsh" _p9k_get_icon_names "$@" } @@ -1542,8 +1539,9 @@ prompt_dir() { # for "~[a/b]" it'll give the nonsensical "~[a". To solve this problem we have to # repeat what "${(%):-%~}" does and hope that it produces the same result. local func='' - local -a parts=() reply=() + local -a parts=() for func in zsh_directory_name $zsh_directory_name_functions; do + local reply=() if (( $+functions[$func] )) && $func d $_p9k__pwd && [[ $p == '~['$reply[1]']'* ]]; then parts+='~['$reply[1]']' break @@ -1905,7 +1903,6 @@ _p9k_prompt_docker_machine_init() { # GO prompt prompt_go_version() { _p9k_cached_cmd_stdout go version || return - local -a match [[ $_p9k_ret == (#b)*go([[:digit:].]##)* ]] || return local v=$match[1] if (( _POWERLEVEL9K_GO_VERSION_PROJECT_ONLY )); then @@ -2174,7 +2171,6 @@ function _p9k_nvm_ls_default() { (( $#matches )) || return local max path - local -a match for path in ${(Oa)matches}; do [[ ${path:t} == (#b)v(*).(*).(*) ]] || continue v=${(j::)${(@l:6::0:)match}} @@ -2351,7 +2347,6 @@ instant_prompt_os_icon() { prompt_os_icon; } # Segment to display PHP version number prompt_php_version() { _p9k_cached_cmd_stdout php --version || return - local -a match [[ $_p9k_ret == (#b)(*$'\n')#(PHP [[:digit:].]##)* ]] || return local v=$match[2] _p9k_prompt_segment "$0" "fuchsia" "grey93" '' 0 '' "${v//\%/%%}" @@ -2666,7 +2661,7 @@ prompt_rust_version() { local rustc=$commands[rustc] toolchain deps=() if (( $+commands[ldd] )); then if ! _p9k_cache_stat_get $0_so $rustc; then - local line match so + local line so for line in "${(@f)$(ldd $rustc 2>/dev/null)}"; do [[ $line == (#b)[[:space:]]#librustc_driver[^[:space:]]#.so' => '(*)' (0x'[[:xdigit:]]#')' ]] || continue so=$match[1] @@ -2812,6 +2807,11 @@ instant_prompt_status() { } prompt_prompt_char() { + local saved=$_p9k__prompt_char_saved[1+!_p9k__status] + if [[ -n $saved ]]; then + _p9k__prompt+=$saved + return + fi local -i len=$#_p9k__prompt if (( __p9k_sh_glob )); then if (( _p9k__status )); then @@ -2854,7 +2854,7 @@ prompt_prompt_char() { _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' fi fi - typeset -g "_p9k__segment_val_${_p9k_prompt_side}[_p9k_segment_index]"=$_p9k__prompt[len+1,-1] + _p9k__prompt_char_saved[1+!_p9k__status]=$_p9k__prompt[len+1,-1] } instant_prompt_prompt_char() { @@ -3526,8 +3526,7 @@ function _p9k_maybe_ignore_git_repo() { } function _p9k_vcs_resume() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro _p9k_maybe_ignore_git_repo @@ -3861,7 +3860,6 @@ prompt_kubecontext() { if ! _p9k_cache_stat_get $0 ${(s.:.)${KUBECONFIG:-$HOME/.kube/config}}; then local name namespace cluster user cloud_name cloud_account cloud_zone cloud_cluster text state - local -a match () { local cfg && cfg=(${(f)"$(kubectl config view -o=yaml 2>/dev/null)"}) || return local ctx=(${(@M)cfg:#current-context: [^\"\'\|\>]*}) @@ -4356,16 +4354,6 @@ _p9k_prompt_net_iface_sync() { } function _p9k_set_prompt() { - local ifs=$IFS - IFS=$' \t\n\0' - - if [[ $_p9k_refresh_reason == precmd ]]; then - local f_compute - for f_compute in "${_p9k__async_segments_compute[@]}"; do - _p9k_worker_invoke ${f_compute%% *} ${(e)f_compute} - done - fi - PROMPT= RPROMPT= [[ $1 == instant_ ]] || PROMPT+='${$((_p9k_on_expand()))+}' @@ -4508,7 +4496,6 @@ function _p9k_set_prompt() { _p9k_prompt_side= (( $#_p9k_cache < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k_cache=() (( $#_p9k__cache_ephemeral < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k__cache_ephemeral=() - IFS=$ifs } _p9k_set_instant_prompt() { @@ -4520,7 +4507,7 @@ _p9k_set_instant_prompt() { RPROMPT=$saved_rprompt } -typeset -gri __p9k_instant_prompt_version=17 +typeset -gri __p9k_instant_prompt_version=18 _p9k_dump_instant_prompt() { local user=${(%):-%n} @@ -4543,7 +4530,7 @@ _p9k_dump_instant_prompt() { display_v[2]=hide display_v[4]=hide >&$fd print -r -- "() { - emulate -L zsh + $__p9k_intro (( ! \$+__p9k_instant_prompt_disabled )) || return typeset -gi __p9k_instant_prompt_disabled=1 __p9k_instant_prompt_sourced=$__p9k_instant_prompt_version [[ -t 0 && -t 1 && -t 2 && \$ZSH_VERSION == ${(q)ZSH_VERSION} && \$ZSH_PATCHLEVEL == ${(q)ZSH_PATCHLEVEL} && @@ -4591,12 +4578,11 @@ _p9k_dump_instant_prompt() { local -A _p9k_display_k=('${(j: :)${(@q)${(kv)_p9k_display_k}}}') local -a _p9k__display_v=('${(j: :)${(@q)display_v}}') function p10k() { - emulate -L zsh - setopt no_hist_expand extended_glob prompt_percent prompt_subst no_aliases + '$__p9k_intro' [[ $1 == display ]] || return shift - local -i OPTIND k dump - local OPTARG opt match MATCH prev new pair list name var + local -i k dump + local opt prev new pair list name var while getopts ":ha" opt; do case $opt in a) dump=1;; @@ -4783,11 +4769,11 @@ _p9k_dump_instant_prompt() { _p9k_preinit fi function _p9k_instant_prompt_precmd_first() { - emulate -L zsh + '$__p9k_intro' function _p9k_instant_prompt_sched_last() { (( $+__p9k_instant_prompt_active )) || return 0 () { - emulate -L zsh + '$__p9k_intro' exec 0<&$__p9k_fd_0 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_0}>&- {__p9k_fd_1}>&- {__p9k_fd_2}>&- unset __p9k_fd_0 __p9k_fd_1 __p9k_fd_2 __p9k_instant_prompt_active typeset -gi __p9k_instant_prompt_erased=1 @@ -5059,7 +5045,6 @@ function _p9k_maybe_dump() { fi fi elif (( _p9k__state_dump_scheduled || ! (_p9k__instant_prompt_disabled || $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]) )); then - setopt no_bg_nice ( if ! (( _p9k__instant_prompt_disabled || $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )); then _p9k_set_instant_prompt @@ -5079,8 +5064,7 @@ function _p9k_on_expand() { (( _p9k__expanded && ! $+__p9k_instant_prompt_active )) && return () { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro _p9k_maybe_dump (( $+__p9k_instant_prompt_active )) && _p9k_clear_instant_prompt @@ -5169,8 +5153,7 @@ function _p9k_on_expand() { functions -M _p9k_on_expand _p9k_precmd_impl() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro (( __p9k_enabled )) || return @@ -5243,6 +5226,11 @@ _p9k_precmd_impl() { _p9k__pwd=${(%):-%/} _p9k__pwd_a=${_p9k__pwd:A} + local f_compute + for f_compute in "${_p9k__async_segments_compute[@]}"; do + _p9k_worker_invoke ${f_compute%% *} ${(e)f_compute} + done + _p9k_refresh_reason=precmd _p9k_set_prompt _p9k_refresh_reason='' @@ -5265,8 +5253,7 @@ _p9k_precmd_impl() { _p9k_trapint() { if (( __p9k_enabled )); then - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} + eval $__p9k_intro zle && _p9k_on_widget_zle-line-finish int fi return 0 @@ -5290,6 +5277,7 @@ _p9k_precmd() { function _p9k_reset_prompt() { if zle && [[ -z $_p9k__line_finished ]]; then + setopt prompt_subst (( __p9k_ksh_arrays )) && setopt ksh_arrays (( __p9k_sh_glob )) && setopt sh_glob (( _p9k__can_hide_cursor )) && echoti civis @@ -5319,6 +5307,7 @@ typeset -g _p9k__param_pat typeset -g _p9k__param_sig _p9k_init_vars() { + typeset -ga _p9k__prompt_char_saved typeset -g _p9k__worker_pid typeset -g _p9k__worker_req_fd typeset -g _p9k__worker_resp_fd @@ -5911,9 +5900,10 @@ function _p9k_parse_buffer() { [[ ${2:-0} == <-> ]] || return 2 local rcquotes - [[ -o rcquotes ]] && rcquotes=(-o rcquotes) + [[ -o rcquotes ]] && rcquotes=rcquotes - emulate -L zsh -o extended_glob -o no_nomatch $rcquotes + eval $__p9k_intro + setopt no_nomatch $rcquotes typeset -ga P9K_COMMANDS=() @@ -6230,8 +6220,7 @@ function _p9k_widget_hook() { fi fi - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} + eval $__p9k_intro (( _p9k__restore_prompt_fd )) && _p9k_restore_prompt $_p9k__restore_prompt_fd __p9k_reset_state=1 local pat idx var @@ -6305,8 +6294,7 @@ function _p9k_wrap_widgets() { } function _p9k_restore_prompt() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} + eval $__p9k_intro { (( _p9k__must_restore_prompt )) || return _p9k__must_restore_prompt=0 @@ -6664,7 +6652,7 @@ _p9k_must_init() { [[ $sig == $_p9k__param_sig ]] && return 1 _p9k_deinit fi - _p9k__param_pat=$'v28\1'${ZSH_VERSION}$'\1'${ZSH_PATCHLEVEL}$'\1' + _p9k__param_pat=$'v29\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' @@ -7095,13 +7083,12 @@ prompt_powerlevel9k_setup() { (( __p9k_enabled )) && return prompt_opts=(percent subst) - (( $+__p9k_instant_prompt_active )) || { - [[ ! -o prompt_sp ]] || prompt_opts+=sp - [[ ! -o prompt_cr ]] || prompt_opts+=cr - } + if (( ! $+__p9k_instant_prompt_active )); then + prompt_opts+=sp + prompt_opts+=cr + fi - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro prompt_powerlevel9k_teardown __p9k_enabled=1 typeset -ga preexec_functions=(_p9k_preexec1 $preexec_functions _p9k_preexec2) @@ -7109,8 +7096,7 @@ prompt_powerlevel9k_setup() { } prompt_powerlevel9k_teardown() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro add-zsh-hook -D precmd '(_p9k_|powerlevel9k_)*' add-zsh-hook -D preexec '(_p9k_|powerlevel9k_)*' PROMPT='%m%# ' @@ -7184,7 +7170,7 @@ Example: 'core' segment tells you if there is a file name 'core' in the current else local state=PROTECTED fi - p10k segment -s \\\$state -i '⭐' -f blue -t \\\${size[1]}b + p10k segment -s \$state -i '⭐' -f blue -t \${size[1]}b } To enable this segment, add 'core' to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or @@ -7223,8 +7209,8 @@ prompt is refreshed. Usage: %2Fp10k%f %Bdisplay%b -a [part-pattern]... -Populate array \\\`reply\\\` with states of prompt parts matching the patterns. -If no patterns are supplied, assume \\\`*\\\`. +Populate array \`reply\` with states of prompt parts matching the patterns. +If no patterns are supplied, assume \`*\`. Parts: empty_line empty line (duh) @@ -7244,7 +7230,7 @@ Part States: show the part is displayed hide the part is not displayed print the part is printed in precmd; only applicable to empty_line and - ruler; looks better than show after calling \\\`clear\\\`; unlike + ruler; looks better than show after calling \`clear\`; unlike show, the effects of print cannot be undone with hide part-pattern is a glob pattern for parts. Examples: @@ -7267,7 +7253,7 @@ Example: Print the state of all prompt parts: local -A reply p10k display -a '*' - printf '%%32s = %%q\n' \\\${(@kv)reply} + printf '%%32s = %%q\\n' \${(@kv)reply} " # 0 -- reset-prompt not blocked @@ -7278,8 +7264,7 @@ typeset -gi __p9k_reset_state function p10k() { [[ $# != 1 || $1 != finalize ]] || { p10k-instant-prompt-finalize; return 0 } - emulate -L zsh - setopt no_hist_expand extended_glob prompt_percent prompt_subst no_aliases + eval $__p9k_intro if (( !ARGC )); then print -rP -- $__p9k_p10k_usage >&2 @@ -7332,8 +7317,8 @@ function p10k() { return 1 fi shift - local -i OPTIND k dump - local OPTARG opt match MATCH prev new pair list name var + local -i k dump + local opt prev new pair list name var while getopts ':ha' opt; do case $opt in a) dump=1;; diff --git a/internal/wizard.zsh b/internal/wizard.zsh index d0077c73..4bdb44d7 100755 --- a/internal/wizard.zsh +++ b/internal/wizard.zsh @@ -1,8 +1,3 @@ -emulate -L zsh -setopt noaliases - -() { -setopt extended_glob no_prompt_{bang,subst} prompt_percent typeset_silent zmodload zsh/langinfo if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} @@ -1902,5 +1897,3 @@ change_zshrc || return print -rP "" flowing +c File feature requests and bug reports at "$(href https://github.com/romkatv/powerlevel10k/issues)." print -rP "" - -} "$@" diff --git a/internal/worker.zsh b/internal/worker.zsh index 952e2a06..518b34fd 100644 --- a/internal/worker.zsh +++ b/internal/worker.zsh @@ -5,8 +5,6 @@ function _p9k_worker_main() { exec 0<$_p9k__worker_file_prefix.fifo || return zf_rm $_p9k__worker_file_prefix.fifo || return - typeset -g IFS=$' \t\n\0' - local -i reset local req fd local -a ready @@ -87,15 +85,12 @@ function _p9k_worker_invoke() { } function _p9k_worker_cleanup() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro [[ $_p9k__worker_shell_pid == $sysparams[pid] ]] && _p9k_worker_stop return 0 } function _p9k_worker_stop() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases add-zsh-hook -D zshexit _p9k_worker_cleanup [[ -n $_p9k__worker_resp_fd ]] && zle -F $_p9k__worker_resp_fd [[ -n $_p9k__worker_resp_fd ]] && exec {_p9k__worker_resp_fd}>&- @@ -111,8 +106,7 @@ function _p9k_worker_stop() { } function _p9k_worker_receive() { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang prompt_{percent,subst} no_aliases + eval $__p9k_intro [[ -z $_p9k__worker_resp_fd ]] && return @@ -179,7 +173,7 @@ function _p9k_worker_receive() { } function _p9k_worker_start() { - setopt no_bgnice monitor + setopt monitor || return { [[ -n $_p9k__worker_resp_fd ]] && return _p9k__worker_file_prefix=${TMPDIR:-/tmp}/p10k.worker.$EUID.$$.$EPOCHSECONDS diff --git a/powerlevel10k.zsh-theme b/powerlevel10k.zsh-theme index 834edd6d..7bf6a2e3 100644 --- a/powerlevel10k.zsh-theme +++ b/powerlevel10k.zsh-theme @@ -18,10 +18,14 @@ 'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' (( $+__p9k_root_dir )) || typeset -gr __p9k_root_dir=${POWERLEVEL9K_INSTALLATION_DIR:-${${(%):-%x}:A:h}} +(( $+__p9k_intro )) || typeset -gr __p9k_intro='emulate -L zsh -o no_hist_expand -o extended_glob -o no_prompt_bang -o prompt_percent -o no_prompt_subst -o no_aliases -o no_bg_nice -o typeset_silent +local -a match mbegin mend reply +local -i MBEGIN MEND OPTIND +local MATCH REPLY OPTARG IFS=$'\'' \t\n\0'\'' +[[ -z $_p9k_locale ]] || local LC_ALL=$_p9k_locale' () { - emulate -L zsh - setopt no_hist_expand extended_glob no_prompt_bang no_prompt_subst prompt_percent no_aliases + eval $__p9k_intro if (( $+__p9k_sourced )); then prompt_powerlevel9k_setup return 0 @@ -40,7 +44,8 @@ source $__p9k_root_dir/internal/p10k.zsh || true } -(( ! $+__p9k_instant_prompt_active )) || unsetopt local_options prompt_cr prompt_sp +unsetopt local_options +(( $+__p9k_instant_prompt_active )) && unsetopt prompt_cr prompt_sp || setopt prompt_cr prompt_sp (( ${#__p9k_src_opts} )) && setopt ${__p9k_src_opts[@]} 'builtin' 'unset' '__p9k_src_opts'