refactor(pygmalion): simplify theme logic and prompt sequences (#12550)

* Simplify Pygmalion Theme

The Pygmalion theme previously had some logic for counting line length and taking action based on line length. The action was removed in c52441b624, but the counting still needlessly happens. 

This commit removes the code to count line length, and simplifies the Pygmalion theme by moving the "precmd" into the setup. 

As a bonus unintended side effect, this makes the Pygmalion theme compatible with the current async prompting logic (i.e. after this change, Pygmalion is no longer affected by https://github.com/ohmyzsh/ohmyzsh/issues/12328)

* refactor(pygmalion): redo and simplify prompt sequences

With this commit we put the minimal needed color resets, i.e. only
when we don't control the previous text we need to do a full reset.
Otherwise we can just use %F{} to change only the foreground color.

Co-authored-by: Marc Cornellà <marc@mcornella.com>
This commit is contained in:
Marc Khouri 2024-07-12 12:18:20 -04:00 committed by GitHub
parent 5b37e218e5
commit fa583cfb87
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,32 +1,12 @@
# Yay! High voltage and arrows! # Yay! High voltage and arrows!
prompt_setup_pygmalion(){ ZSH_THEME_GIT_PROMPT_PREFIX="%{${reset_color}%}%F{green}"
setopt localoptions extendedglob ZSH_THEME_GIT_PROMPT_SUFFIX="%{${reset_color}%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%F{yellow}⚡%f"
ZSH_THEME_GIT_PROMPT_CLEAN=""
ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}" base_prompt="%{${reset_color}%}%F{magenta}%n%F{cyan}@%F{yellow}%m%F{red}:%F{cyan}%0~%F{red}|%f"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} " post_prompt="%{${reset_color}%}%F{cyan}⇒%f "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}⚡%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN=""
base_prompt='%{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}' PROMPT="${base_prompt}\$(git_prompt_info)${post_prompt}"
post_prompt='%{$fg[cyan]%}⇒%{$reset_color%} ' unset base_prompt post_prompt
base_prompt_nocolor=${base_prompt//\%\{[^\}]##\}}
post_prompt_nocolor=${post_prompt//\%\{[^\}]##\}}
autoload -U add-zsh-hook
add-zsh-hook precmd prompt_pygmalion_precmd
}
prompt_pygmalion_precmd(){
setopt localoptions nopromptsubst extendedglob
local gitinfo=$(git_prompt_info)
local gitinfo_nocolor=${gitinfo//\%\{[^\}]##\}}
local exp_nocolor="$(print -P \"${base_prompt_nocolor}${gitinfo_nocolor}${post_prompt_nocolor}\")"
local prompt_length=${#exp_nocolor}
PROMPT="${base_prompt}\$(git_prompt_info)${post_prompt}"
}
prompt_setup_pygmalion