From edad183fc75ab3ebde164139dcc945375d91bbdd Mon Sep 17 00:00:00 2001 From: Von Random Date: Mon, 20 Oct 2025 14:36:21 +0300 Subject: [PATCH] zsh: small refactor --- dot_config/zsh/prompt.zsh | 69 +++++++++++++++------------------------ 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/dot_config/zsh/prompt.zsh b/dot_config/zsh/prompt.zsh index 86ba4fa..36ddcfe 100644 --- a/dot_config/zsh/prompt.zsh +++ b/dot_config/zsh/prompt.zsh @@ -7,7 +7,6 @@ prompt_fifo=$HOME/.zsh_gitstatus_$$ prompt_blimit=50 kube_config=$HOME/.kube/config typeset -A prompt_symbols=( - sep_a $'\ue0b0' ellipsis $'\u2026' git $'\ue0a0' git_unstaged '~' @@ -19,7 +18,6 @@ typeset -A prompt_symbols=( ) typeset -A prompt_colors=( -# fg '15' root '1' ssh '15' cwd '4' @@ -33,33 +31,35 @@ typeset -A prompt_colors=( bang '8' ) -prompt.set_bang() { +function prompt.set_bang { (( $# )) || return 1 prompt_symbols[bang]=$1 } -precmd.window_title() { - typeset dir=$(pwd) +function precmd.window_title { + typeset dir + dir=$(pwd) printf '\033]0;%s:%s\007' ${HOST%%.*} ${dir##*/} } -precmd.has_kube() { +function precmd.has_kube { [[ -r $kube_config ]] } -precmd.kube_context() { - typeset kube_context=$(awk -F- '($1 == "current") {print $3}' $kube_config) +function precmd.kube_context { + typeset kube_context + kube_context=$(awk -F- '($1 == "current") {print $3}' $kube_config) precmd.prompt.add $prompt_symbols[helm] precmd.prompt.add $kube_context $prompt_colors[kube_context] } -precmd.is_git_repo() { +function precmd.is_git_repo { typeset prompt_git_dir prompt_git_dir=$(git rev-parse --git-dir 2>/dev/null) || return 1 [[ ! -e $prompt_git_dir/nozsh ]] } -precmd.prompt.add() { +function precmd.prompt.add { (( $# )) || return 1 typeset data=$1 color=$2 [[ -n $prompt_string ]] && prompt_string+=" " @@ -70,30 +70,17 @@ precmd.prompt.add() { fi } -precmd.prompt.add_pl() { - (( $# < 2 )) && return 1 - typeset data=$1 color=$2 - if [[ -z $prompt_string ]]; then - prompt_string+="%K{$color}%F{$prompt_colors[fg]} $data " - else - prompt_string+="%F{$prev_color}%K{$color}$prompt_symbols[sep_a]%F{$prompt_colors[fg]} $data " - fi - prev_color=$color -} - -precmd.prompt.apply() { +function precmd.prompt.apply { PROMPT=$prompt_string unset prompt_string } -precmd.prompt.pre_git() { +function precmd.prompt.pre_git { precmd.prompt.add "$prompt_symbols[git] $prompt_symbols[ellipsis]" $prompt_colors[git_branch] } -precmd.prompt.git() { - typeset raw_status IFS= - raw_status=$(git status --porcelain -bu 2>/dev/null) || return 0 - +function precmd.prompt.git { + typeset IFS= typeset -A count while read line; do case $line[1,2] in @@ -110,21 +97,19 @@ precmd.prompt.git() { ('??') (( ++count[git_untracked] )) ;| ([ADU][ADU]) (( ++count[git_unmerged] )) esac - done <<< $raw_status + done < <(git status --porcelain -bu 2>/dev/null) for i in git_untracked git_unmerged git_unstaged git_staged; do (( count[$i] )) && precmd.prompt.add "$count[$i]$prompt_symbols[$i]" $prompt_colors[$i] done } -precmd.prompt() { - typeset -g prompt_string= prev_color= +function precmd.prompt { + typeset -g prompt_string= precmd.prompt.add '[' $prompt_colors[brackets] - (( UID )) \ - || precmd.prompt.add '#' $prompt_colors[root] - [[ -n $SSH_CONNECTION ]]\ - && precmd.prompt.add %n@%m $prompt_colors[ssh] + [[ $UID -eq 0 ]] && precmd.prompt.add '#' $prompt_colors[root] + [[ -n $SSH_CONNECTION ]] && precmd.prompt.add %n@%m $prompt_colors[ssh] precmd.prompt.add %~ $prompt_colors[cwd] @@ -132,29 +117,27 @@ precmd.prompt() { precmd.kube_context fi - [[ $1 == pre_git ]]\ - && precmd.prompt.pre_git - [[ $1 == git ]]\ - && precmd.prompt.git + [[ $1 == 'pre_git' ]] && precmd.prompt.pre_git + [[ $1 == 'git' ]] && precmd.prompt.git precmd.prompt.add $']\n' $prompt_colors[brackets] prompt_string+="%F{$prompt_colors[bang]}$prompt_symbols[bang]%f " } -precmd.git_update() { +function precmd.git_update { precmd.prompt git [[ ! -p $prompt_fifo ]] && mkfifo -m 0600 $prompt_fifo echo -n $prompt_string > $prompt_fifo &! kill -s USR1 $$ } -precmd.prompt.update() { +function precmd.prompt.update { typeset -g prompt_string=$(<$prompt_fifo) precmd.prompt.apply zle && zle reset-prompt } -precmd() { +function precmd { precmd.window_title if precmd.is_git_repo; then precmd.prompt pre_git @@ -165,11 +148,11 @@ precmd() { precmd.prompt.apply } -TRAPUSR1() { +function TRAPUSR1 { precmd.prompt.update } -TRAPEXIT() { +function TRAPEXIT { [[ -p $prompt_fifo ]] && rm $prompt_fifo }