1
0
Fork 0

zsh: streamline and simplify zsh prompt

This commit is contained in:
Von Random 2023-08-03 17:48:30 +03:00
parent 9b2c8b65c7
commit 36925c573c

View file

@ -35,8 +35,15 @@ precmd.is_git_repo() {
[[ ! -e $prompt_git_dir/nozsh ]] [[ ! -e $prompt_git_dir/nozsh ]]
} }
precmd.prompt.init() { precmd.prompt.add_plain() {
typeset -g prompt_string= prev_color= (( $# < 1 )) && return 1
typeset data=$1 color=$2
[[ -n $prompt_string ]] && prompt_string+=" "
if [[ -n $color ]]; then
prompt_string+="%F{$color}$data%f"
else
prompt_string+="$data"
fi
} }
precmd.prompt.add() { precmd.prompt.add() {
@ -50,28 +57,11 @@ precmd.prompt.add() {
prev_color=$color prev_color=$color
} }
precmd.prompt.bang() {
prompt_string+="%F{$prev_color}%k$prompt_symbols[sep_a]%f$prompt_symbols[bang] "
}
precmd.prompt.apply() { precmd.prompt.apply() {
PROMPT=$prompt_string PROMPT=$prompt_string
unset prompt_string unset prompt_string
} }
precmd.prompt.user() {
(( UID )) || precmd.prompt.add '#' $prompt_colors[root]
}
precmd.prompt.cwd() {
precmd.prompt.add %~ $prompt_colors[cwd]
}
precmd.prompt.ssh() {
[[ -n $SSH_CONNECTION ]] || return 0
precmd.prompt.add %n@%m $prompt_colors[ssh]
}
precmd.prompt.pre_git() { precmd.prompt.pre_git() {
precmd.prompt.add "$prompt_symbols[git] $prompt_symbols[ellipsis]" $prompt_colors[git_branch] precmd.prompt.add "$prompt_symbols[git] $prompt_symbols[ellipsis]" $prompt_colors[git_branch]
} }
@ -104,16 +94,27 @@ precmd.prompt.git() {
} }
precmd.prompt() { precmd.prompt() {
precmd.prompt.init typeset -g prompt_string= prev_color=
precmd.prompt.user
precmd.prompt.ssh precmd.prompt.add \[ 7
precmd.prompt.cwd (( UID )) \
|| precmd.prompt.add '#' $prompt_colors[root]
[[ -n $SSH_CONNECTION ]]\
&& precmd.prompt.add %n@%m $prompt_colors[ssh]
precmd.prompt.add %~ $prompt_colors[cwd]
[[ $1 == pre_git ]]\
&& precmd.prompt.pre_git
[[ $1 == git ]]\
&& precmd.prompt.git
precmd.prompt.add \] 7
prompt_string+="%F{$prev_color}%k$prompt_symbols[sep_a]%f$prompt_symbols[bang] "
} }
precmd.git_update() { precmd.git_update() {
precmd.prompt precmd.prompt git
precmd.prompt.git
precmd.prompt.bang
[[ ! -p $prompt_fifo ]] && mkfifo -m 0600 $prompt_fifo [[ ! -p $prompt_fifo ]] && mkfifo -m 0600 $prompt_fifo
echo -n $prompt_string > $prompt_fifo &! echo -n $prompt_string > $prompt_fifo &!
kill -s USR1 $$ kill -s USR1 $$
@ -131,12 +132,12 @@ precmd.window_title() {
precmd() { precmd() {
precmd.window_title precmd.window_title
precmd.prompt
if precmd.is_git_repo; then if precmd.is_git_repo; then
precmd.prompt.pre_git precmd.prompt pre_git
precmd.git_update &! precmd.git_update &!
else
precmd.prompt
fi fi
precmd.prompt.bang
precmd.prompt.apply precmd.prompt.apply
} }