add padding after slanted separators when using non-monospace font; count width savings to be able to show more styles on narrow terminals

This commit is contained in:
romkatv 2020-03-27 08:28:08 +01:00
parent 597b8051df
commit a380b8d51c
2 changed files with 87 additions and 43 deletions

View file

@ -1294,7 +1294,7 @@ install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). Veri
The minimum screen size at which configuration wizard can function is 55 columns by 21 lines.
However, not all prompt styles are offered at such small screen size as there is simply not enough
space to present them. *Fix*: Resize your terminal to at least 80 columns by 25 lines prior to
space to present them. *Fix*: Resize your terminal to at least 84 columns by 25 lines prior to
running `p10k configure`. Verify with `print ${COLUMNS}x${LINES}`.
### Cannot install the recommended font

View file

@ -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
prefixes=("$concise[@]")
options+=concise
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)