fa583cfb87b80e3f7d7577c8b62b7d1385c01337

Author
Marc Khouri <marc@khouri.ca>
Committer
GitHub <noreply@github.com>
Date

Message

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 c52441b624c0b1fa075bc6110032bd4e75311909, 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>

Diff

 1diff --git a/themes/pygmalion.zsh-theme b/themes/pygmalion.zsh-theme
 2index be9ca38895882ea4e1b6be2061105c2783dea8d7..14fe6c4696fbaff6e792f538f69cbe894b219fc3 100644
 3--- a/themes/pygmalion.zsh-theme
 4+++ b/themes/pygmalion.zsh-theme
 5@@ -1,32 +1,12 @@
 6 # Yay! High voltage and arrows!
 7 
 8-prompt_setup_pygmalion(){
 9-  setopt localoptions extendedglob
10+ZSH_THEME_GIT_PROMPT_PREFIX="%{${reset_color}%}%F{green}"
11+ZSH_THEME_GIT_PROMPT_SUFFIX="%{${reset_color}%} "
12+ZSH_THEME_GIT_PROMPT_DIRTY="%F{yellow}⚡%f"
13+ZSH_THEME_GIT_PROMPT_CLEAN=""
14 
15-  ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}"
16-  ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
17-  ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}⚡%{$reset_color%}"
18-  ZSH_THEME_GIT_PROMPT_CLEAN=""
19+base_prompt="%{${reset_color}%}%F{magenta}%n%F{cyan}@%F{yellow}%m%F{red}:%F{cyan}%0~%F{red}|%f"
20+post_prompt="%{${reset_color}%}%F{cyan}⇒%f  "
21 
22-  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%}'
23-  post_prompt='%{$fg[cyan]%}⇒%{$reset_color%}  '
24-
25-  base_prompt_nocolor=${base_prompt//\%\{[^\}]##\}}
26-  post_prompt_nocolor=${post_prompt//\%\{[^\}]##\}}
27-
28-  autoload -U add-zsh-hook
29-  add-zsh-hook precmd prompt_pygmalion_precmd
30-}
31-
32-prompt_pygmalion_precmd(){
33-  setopt localoptions nopromptsubst extendedglob
34-
35-  local gitinfo=$(git_prompt_info)
36-  local gitinfo_nocolor=${gitinfo//\%\{[^\}]##\}}
37-  local exp_nocolor="$(print -P \"${base_prompt_nocolor}${gitinfo_nocolor}${post_prompt_nocolor}\")"
38-  local prompt_length=${#exp_nocolor}
39-
40-  PROMPT="${base_prompt}\$(git_prompt_info)${post_prompt}"
41-}
42-
43-prompt_setup_pygmalion
44+PROMPT="${base_prompt}\$(git_prompt_info)${post_prompt}"
45+unset base_prompt post_prompt