diff options
author | romkatv <roman.perepelitsa@gmail.com> | 2020-03-27 10:28:08 +0300 |
---|---|---|
committer | romkatv <roman.perepelitsa@gmail.com> | 2020-03-27 10:28:08 +0300 |
commit | a380b8d51c342cc52aa72b662c4f9addda88c04e (patch) | |
tree | 50414a18d27d01c4ff91e2c3a96cb5c23eb47d97 /internal/wizard.zsh | |
parent | 597b8051dfcb3ce5bce089ea39811575a22ec3da (diff) |
add padding after slanted separators when using non-monospace font; count width savings to be able to show more styles on narrow terminals
Diffstat (limited to 'internal/wizard.zsh')
-rwxr-xr-x | internal/wizard.zsh | 124 |
1 files changed, 84 insertions, 40 deletions
diff --git a/internal/wizard.zsh b/internal/wizard.zsh index 735213c2..7ecda182 100755 --- a/internal/wizard.zsh +++ b/internal/wizard.zsh @@ -19,7 +19,6 @@ fi local -ri force local -r font_base_url='https://github.com/romkatv/powerlevel10k-media/raw/master' -local -ri wizard_columns=$((COLUMNS < 83 ? COLUMNS : 83)) local -ri prompt_indent=2 @@ -37,12 +36,9 @@ local -r left_triangle='\uE0B2' local -r right_triangle='\uE0B0' local -r left_angle='\uE0B3' local -r right_angle='\uE0B1' -local -r down_triangle='\uE0BC' -local -r up_triangle='\uE0BA' local -r fade_in='░▒▓' local -r fade_out='▓▒░' local -r vertical_bar='\u2502' -local -r slanted_bar='\u2571' local -r cursor='%1{\e[07m \e[27m%}' @@ -134,20 +130,27 @@ function print_prompt() { (( left_frame )) || left=('' $left[2] '' "%F{$c}$prompt_char%f ${buffer:-$cursor}") (( right_frame )) || right=($right[1] '' '' '') fi + local -i left_indent=prompt_indent local -i right_indent=prompt_indent prompt_length ${(g::):-$left[1]$left[2]$right[1]$right[2]} local -i width=REPLY - while (( wizard_columns - width <= prompt_indent + right_indent )); do - (( --right_indent )) + while (( wizard_columns - width <= left_indent + right_indent )); do + if (( right_indent )); then + (( --right_indent )) + elif (( left_indent )); then + (( --left_indent )) + else + break # not supposed to happen; will result in overflow if it does + fi done local -i i for ((i = 1; i < $#left; i+=2)); do local l=${(g::):-$left[i]$left[i+1]} local r=${(g::):-$right[i]$right[i+1]} prompt_length $l$r - local -i gap=$((wizard_columns - prompt_indent - right_indent - REPLY)) + local -i gap=$((wizard_columns - left_indent - right_indent - REPLY)) (( num_lines == 2 && i == 1 )) && local fill=$gap_char || local fill=' ' - print -n -- ${(pl:$prompt_indent:: :)} + print -n -- ${(pl:$left_indent:: :)} print -nP -- $l print -nP -- "%$frame_color[$color]F${(pl:$gap::$fill:)}%f" print -P -- $r @@ -623,8 +626,10 @@ function ask_debian() { } function ask_icon_padding() { + local -i saves=5 if [[ $POWERLEVEL9K_MODE == (powerline|compatible|ascii) ]]; then POWERLEVEL9K_ICON_PADDING=none + (( saved_columns += saves )) return 0 fi local text="X" @@ -655,8 +660,20 @@ function ask_icon_padding() { case $key in q) quit;; r) return 1;; - y) POWERLEVEL9K_ICON_PADDING=none; options+='small icons'; break;; - n) POWERLEVEL9K_ICON_PADDING=moderate; options+='large icons'; break;; + y) + POWERLEVEL9K_ICON_PADDING=none + options+='small icons' + (( saved_columns += saves )) + break + ;; + n) + POWERLEVEL9K_ICON_PADDING=moderate + options+='large icons' + up_triangle+=' ' + down_triangle+=' ' + slanted_bar='\uE0BD ' + break + ;; esac done } @@ -669,6 +686,7 @@ function ask_style() { frame_color=(0 7 2 4) color_name=(Black White Green Blue) options+=lean_8colors + (( saved_columns += 5 )) return fi @@ -711,7 +729,7 @@ function ask_style() { case $key in q) quit;; r) return 1;; - 1) style=lean; left_frame=0; right_frame=0; options+=lean; break;; + 1) style=lean; left_frame=0; right_frame=0; options+=lean; (( saved_columns += 5 )); break;; 2) style=classic; options+=classic; break;; 3) style=rainbow; options+=rainbow; break;; 4) @@ -719,6 +737,7 @@ function ask_style() { style=pure empty_line=1 options+=pure + (( saved_columns += 5 )) break fi ;; @@ -936,11 +955,6 @@ function ask_ornaments_color() { } function ask_time() { - if (( wizard_columns < 80 )) && [[ $style != pure ]]; then - time= - return 0 - fi - while true; do local extra= clear @@ -954,31 +968,22 @@ function ask_time() { print -P "" time=$time_24h print_prompt print -P "" - if [[ $wizard_columns -ge 83 || $style == lean* || $POWERLEVEL9K_ICON_PADDING == none ]]; then - extra+=3 - print -P "%B(3) 12-hour format.%b" - print -P "" - time=$time_12h print_prompt - print -P "" - fi + print -P "%B(3) 12-hour format.%b" + print -P "" + time=$time_12h print_prompt + print -P "" print -P "(r) Restart from the beginning." print -P "(q) Quit and do nothing." print -P "" local key= - read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit -c + read -k key${(%):-"?%BChoice [123rq]: %b"} || quit -c case $key in q) quit;; r) return 1;; - 1) time=; break;; - 2) time=$time_24h; options+='24h time'; break;; - 3) - if [[ $extra == *3* ]]; then - time=$time_12h - options+='12h time' - break - fi - ;; + 1) time=; (( saved_columns += 12 )); break;; + 2) time=$time_24h; options+='24h time'; (( saved_columns += 3 )); break;; + 3) time=$time_12h; options+='12h time'; break;; esac done } @@ -1058,7 +1063,15 @@ function os_icon_name() { } function ask_extra_icons() { + local -i saves=12 if [[ $style == pure || $POWERLEVEL9K_MODE == (powerline|compatible|ascii) ]]; then + (( saved_columns += saves )) + return 0 + fi + if (( wizard_columns + saved_columns < 69 )); then + prefixes=("$concise[@]") + options+=concise + (( saved_columns += saves )) return 0 fi local os_icon=${(g::)icons[$(os_icon_name)]} @@ -1091,21 +1104,26 @@ function ask_extra_icons() { case $key in q) quit;; r) return 1;; - 1) extra_icons=("$few[@]"); options+='few icons'; break;; + 1) extra_icons=("$few[@]"); options+='few icons'; (( saved_columns += saves )); break;; 2) extra_icons=("$many[@]"); options+='many icons'; break;; esac done } function ask_prefixes() { - [[ $style == pure ]] && return - local concise=('' '' '') - local fluent=('on ' 'took ' 'at ') - if (( wizard_columns < 80 )); then + local -i saves=11 + if [[ $style == pure ]]; then + (( saved_columns += saves )) + return 0 + fi + if (( wizard_columns + saved_columns < 84 )); then prefixes=("$concise[@]") options+=concise + (( saved_columns += saves )) return 0 fi + local concise=('' '' '') + local fluent=('on ' 'took ' 'at ') while true; do clear flowing -c "%BPrompt Flow%b" @@ -1127,7 +1145,7 @@ function ask_prefixes() { case $key in q) quit;; r) return 1;; - 1) prefixes=("$concise[@]"); options+=concise; break;; + 1) prefixes=("$concise[@]"); options+=concise; (( saved_columns += saves )); break;; 2) prefixes=("$fluent[@]"); options+=fluent; break;; esac done @@ -1135,6 +1153,7 @@ function ask_prefixes() { function ask_separators() { if [[ $style != (classic|rainbow) || $cap_diamond != 1 ]]; then + (( saved_columns += 5 )) return 0 fi if [[ $POWERLEVEL9K_MODE == nerdfont-complete && $LINES -lt 26 ]]; then @@ -1218,10 +1237,17 @@ function ask_separators() { ;; esac done + + prompt_length $left_sep + (( saved_columns += (2 - REPLY) * 2 )) + prompt_length $right_sep + (( saved_columns += (2 - REPLY) * 1 )) + return 0 } function ask_heads() { if [[ $style != (classic|rainbow) || $POWERLEVEL9K_MODE == ascii ]]; then + (( saved_columns += 6 )) return 0 fi if [[ $POWERLEVEL9K_MODE == nerdfont-complete && $LINES -lt 26 ]]; then @@ -1311,10 +1337,17 @@ function ask_heads() { ;; esac done + + prompt_length $left_head + (( saved_columns += 3 - REPLY )) + prompt_length $right_head + (( saved_columns += 3 - REPLY )) + return 0 } function ask_tails() { if [[ $style != (classic|rainbow) || $POWERLEVEL9K_MODE == ascii ]]; then + (( saved_columns += 6 )) return 0 fi if [[ $POWERLEVEL9K_MODE == nerdfont-complete && $LINES -lt 31 ]]; then @@ -1393,6 +1426,12 @@ function ask_tails() { ;; esac done + + prompt_length $left_tail + (( saved_columns += 3 - REPLY )) + prompt_length $right_tail + (( saved_columns += 3 - REPLY )) + return 0 } function ask_num_lines() { @@ -1466,6 +1505,7 @@ function ask_gap_char() { function ask_frame() { if [[ $style != (classic|rainbow|lean*) || $num_lines != 2 || $POWERLEVEL9K_MODE == ascii ]]; then + (( saved_columns += 4 )) return 0 fi @@ -1505,6 +1545,9 @@ function ask_frame() { 4) left_frame=1; right_frame=1; options+='full frame'; break;; esac done + + (( left_frame )) || (( saved_columns += 2 )) + (( right_frame )) || (( saved_columns += 2 )) } function ask_empty_line() { @@ -2072,9 +2115,10 @@ while true; do local instant_prompt=verbose zshrc_content= zshrc_backup= zshrc_backup_u= local -i zshrc_has_cfg=0 zshrc_has_instant_prompt=0 write_zshrc=0 local POWERLEVEL9K_MODE= POWERLEVEL9K_ICON_PADDING=moderate style= config_backup= config_backup_u= - local gap_char=' ' prompt_char='❯' + local gap_char=' ' prompt_char='❯' down_triangle='\uE0BC' up_triangle='\uE0BA' slanted_bar='\u2571' local left_subsep= right_subsep= left_tail= right_tail= left_head= right_head= time= local -i num_lines=0 empty_line=0 color=2 left_frame=1 right_frame=1 transient_prompt=0 + local -i wizard_columns=$((COLUMNS < 88 ? COLUMNS : 88)) saved_columns=0 local -i cap_diamond=0 cap_python=0 cap_debian=0 cap_lock=0 cap_arrow=0 local -a extra_icons=('' '' '') local -a frame_color=(244 242 240 238) |