mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-11-11 11:11:50 -05:00
feat(updater): draw the logo left to right after updating
The logo now sweeps in over ~300ms on a terminal. Non-tty output and shells without zsh/zselect print it at once as before. The installer keeps its static banner since it runs under POSIX sh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9f9b28a13d
commit
657ef5744d
+49
-6
@@ -202,6 +202,54 @@ if is_tty; then
|
|||||||
RESET=$(printf '\033[0m')
|
RESET=$(printf '\033[0m')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Logo lines, split by `|` into one segment per rainbow color
|
||||||
|
BANNER=(
|
||||||
|
' |__ | | | | |__ '
|
||||||
|
' ____ |/ /_ | ____ ___ |__ __ | ____ |_____|/ /_ '
|
||||||
|
' / __ \|/ __ \ | / __ `__ \|/ / / / | /_ / |/ ___/| __ \ '
|
||||||
|
'/ /_/ /| / / / | / / / / / /| /_/ / | / /_|(__ )| / / / '
|
||||||
|
'\____/|_/ /_/ | /_/ /_/ /_/|\__, / | /___/|____/|_/ /_/ '
|
||||||
|
' | | | /____/ | | | '
|
||||||
|
)
|
||||||
|
|
||||||
|
# Print the first $1 columns of the logo
|
||||||
|
print_banner_frame() {
|
||||||
|
local line i
|
||||||
|
local -i remaining
|
||||||
|
local -a segments
|
||||||
|
for line in $BANNER; do
|
||||||
|
remaining=$1
|
||||||
|
segments=("${(@s:|:)line}")
|
||||||
|
for (( i = 1; i <= $#segments && remaining > 0; i++ )); do
|
||||||
|
printf '%s%s' "${RAINBOW[i]}" "${segments[i][1,remaining]}"
|
||||||
|
(( remaining -= ${#segments[i]} ))
|
||||||
|
done
|
||||||
|
printf '%s\n' "$RESET"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Draw the logo left to right on a terminal, all at once otherwise
|
||||||
|
print_banner() {
|
||||||
|
local -i width=${#${BANNER[2]//|}} step=4 col
|
||||||
|
|
||||||
|
if ! is_tty || ! zmodload zsh/zselect 2>/dev/null; then
|
||||||
|
print_banner_frame $width
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
setopt localtraps
|
||||||
|
trap 'printf "\033[?25h"; exit 130' INT
|
||||||
|
printf '\033[?25l'
|
||||||
|
for (( col = step; ; col += step )); do
|
||||||
|
(( col > width )) && col=width
|
||||||
|
print_banner_frame $col
|
||||||
|
(( col == width )) && break
|
||||||
|
printf '\033[%dA' $#BANNER
|
||||||
|
zselect -t 2
|
||||||
|
done
|
||||||
|
printf '\033[?25h'
|
||||||
|
}
|
||||||
|
|
||||||
# Update upstream remote to ohmyzsh org
|
# Update upstream remote to ohmyzsh org
|
||||||
git remote -v | while read remote url extra; do
|
git remote -v | while read remote url extra; do
|
||||||
case "$url" in
|
case "$url" in
|
||||||
@@ -303,12 +351,7 @@ if perform_update; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $verbose_mode == default ]]; then
|
if [[ $verbose_mode == default ]]; then
|
||||||
printf '%s %s__ %s %s %s %s %s__ %s\n' $RAINBOW $RESET
|
print_banner
|
||||||
printf '%s ____ %s/ /_ %s ____ ___ %s__ __ %s ____ %s_____%s/ /_ %s\n' $RAINBOW $RESET
|
|
||||||
printf '%s / __ \\%s/ __ \\ %s / __ `__ \\%s/ / / / %s /_ / %s/ ___/%s __ \\ %s\n' $RAINBOW $RESET
|
|
||||||
printf '%s/ /_/ /%s / / / %s / / / / / /%s /_/ / %s / /_%s(__ )%s / / / %s\n' $RAINBOW $RESET
|
|
||||||
printf '%s\\____/%s_/ /_/ %s /_/ /_/ /_/%s\\__, / %s /___/%s____/%s_/ /_/ %s\n' $RAINBOW $RESET
|
|
||||||
printf '%s %s %s %s /____/ %s %s %s %s\n' $RAINBOW $RESET
|
|
||||||
printf '\n'
|
printf '\n'
|
||||||
printf "${BLUE}%s${RESET}\n\n" "$message"
|
printf "${BLUE}%s${RESET}\n\n" "$message"
|
||||||
printf "${BLUE}${BOLD}%s %s %s %s${RESET}\n" \
|
printf "${BLUE}${BOLD}%s %s %s %s${RESET}\n" \
|
||||||
|
|||||||
Reference in New Issue
Block a user