aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorromkatv <roman.perepelitsa@gmail.com>2020-03-27 10:28:08 +0300
committerromkatv <roman.perepelitsa@gmail.com>2020-03-27 10:28:08 +0300
commita380b8d51c342cc52aa72b662c4f9addda88c04e (patch)
tree50414a18d27d01c4ff91e2c3a96cb5c23eb47d97
parent597b8051dfcb3ce5bce089ea39811575a22ec3da (diff)
add padding after slanted separators when using non-monospace font; count width savings to be able to show more styles on narrow terminals
-rw-r--r--README.md2
-rwxr-xr-xinternal/wizard.zsh124
2 files changed, 85 insertions, 41 deletions
diff --git a/README.md b/README.md
index 578ba93a..5a088538 100644
--- a/README.md
+++ b/README.md
@@ -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
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)