Configuración del prompt Zsh para mostrar ficheros con cambios o no registrados en los directorios parte de un repositorio git.

Despues del exito de Indicadores (prompt) para el intérprete de comandos Bash llega la version para Zsh.

Definición en ~/.zshrc:

 # Git support for prompt
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst

export PROMPT="
%{$fg[white]%}(%D{%Y-%m-%d} %*) <%(?.%?.%F{red}%?%f)> [%~] $program %{$fg[default]%}\$vcs_info_msg_0_
%{$fg[cyan]%}%m %#%{$fg[default]%} "

Resultado:

(2019-12-03 13:59:19) <130> [~/git/repositorio] (git)-[RamaGit]-
MyHostname %

Aunque el prompt no esta mal se nota que el presupuesto no es el mismo que el de la primera version, de ahi que el resultado no se vea igual de bien que en la version para Bash.

Ya se sabe, segundas partes nunca fueron buenas.

Finalmente se encontró el presupuesto para mejorar los efectos especiales y este es el remake:

export PATH=$HOME/bin:$PATH

export CLICOLOR=1

# Git support for prompt
# zstyle ':vcs_info:git*' formats "%{$fg[grey]%}%s %{$reset_color%}%r/%S%{$fg[grey]%} %{$fg[blue]%}%b%{$reset_color%}%m%u%c%{$reset_color%} "
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' unstagedstr '!'
zstyle ':vcs_info:*' stagedstr '+'
zstyle ':vcs_info:git*' formats "%F{blue}%r/%S%} %F{yellow}%b%f%m%F{red}%u%f%F{green}%c%f"
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst

export PROMPT="
%F{green}%D{%Y-%m-%d} %D{%H:%M:%S}%f [%F{magenta}%~%f] \$vcs_info_msg_0_
%F{cyan]%}%n%f@%F{blue}%m%f%} %(?..<%K{red}%F{yellow}%?%f%k> )%# "

export RPROMPT=

Y este el resultado (aprox):

2022-08-31 12:32:21 [~/workspaces/proyecto] repositorio_git/. RamaGit
user@nombre_equipo % error
zsh: command not found: error

2022-08-31 12:32:24 [~/workspaces/proyecto] repositorio_git/. RamaGit
user@nombre_equipo <127> %

Por último, además de mostrar la existencia de cambios presentados o no (traducción libre de staged) a git, añado un bloque para mostrar también la presencia de ficheros no registrados por git (untracked).

export CLICOLOR=1

# Git support for prompt
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' unstagedstr '!'
zstyle ':vcs_info:*' stagedstr '+'
zstyle ':vcs_info:git*' formats "%F{blue}%r/%S%} %F{yellow}%b%f%m%F{red}%u%f%F{green}%c%f"
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst

### Display the existence of files not yet known to VCS

### git: Show marker (*) if there are untracked files in repository
# Make sure you have added staged to your 'formats':  %c
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked

+vi-git-untracked(){
    if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
        git status --porcelain | grep '??' &> /dev/null ; then
        # This will show the marker if there are any untracked files in repo.
        # If instead you want to show the marker only if there are untracked
        # files in $PWD, use:
        #[[ -n $(git ls-files --others --exclude-standard) ]] ; then
        hook_com[staged]+='%K{red]%}%F{black}*%f%k'
    fi
}

export PROMPT="
%F{green}%D{%Y-%m-%d} %D{%H:%M:%S}%f [%F{magenta}%~%f] \$vcs_info_msg_0_
%F{cyan]%}%n%f@%F{blue}%m%f%} %(?..<%K{red}%F{yellow}%?%f%k> )%# "

export RPROMPT=

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puedes utilizar estas etiquetas y atributos HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.