summaryrefslogtreecommitdiff
path: root/internal/wizard.zsh
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 /internal/wizard.zsh
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
Diffstat (limited to 'internal/wizard.zsh')
-rwxr-xr-xinternal/wizard.zsh124
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)