Статьи

GIT & ZShell: раскрасить вашу оболочку в зависимости от вашей ветви

Как было объявлено в моем последнем сообщении, я спросил своего коллегу Тиллмана , разрешено ли мне публиковать его замечательное расширение для zshell (как вы, возможно, уже решили, что он дает свое ОК!).

И вот оно:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Required to have the colour names
autoload colors zsh/terminfo
if [[ "$terminfo[colors]" -ge 8 ]]; then
  colors
fi
for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
  eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
  eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
  (( count = $count + 1 ))
done
PR_NO_COLOUR="%{$terminfo[sgr0]%}"
  
# Thanks Tillman
function get_color(){
BRANCH=`git rev-parse --abbrev-ref HEAD`
case "$BRANCH" in
*master*) COLOR=${PR_RED} ;;
*hotfix*) COLOR=${PR_MAGENTA} ;;
*release-candidate*) COLOR=${PR_YELLOW} ;;
*release*) COLOR=${PR_YELLOW} ;;
*bugfix*) COLOR=${PR_CYAN} ;;
*develop*) COLOR=${PR_BLUE} ;;
*) COLOR=${PR_GREEN} ;;
esac
echo $COLOR
}

Отображение цветов такое же, как на этих рисунках

филиал к профилю-картографирования

Ветвь к Окружающей среде / Отображение профиля

Применение может быть сделано, например, при добавлении этого помощника состояния git и уточнения его с помощью функции get_color.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
function git_status () {
  local output
  gs=$(git status 2> /dev/null)
  if [[ $? == 128 ]]; then
    return
  fi
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  output=${$(get_color)}" "${ref#refs/heads/}
  if echo "$gs" | grep -q "Changes to be committed"; then
    output=${output}${PR_GREEN}+
  fi
  if echo "$gs" | grep -Eq "(Changes not staged for commit|Changed but not updated)"; then
    output=${output}${PR_RED}!
  fi
  if echo "$gs" | grep -q "Untracked files"; then
    output=${output}${PR_RED}?
  fi 
  echo "${output}${PR_NO_COLOUR}"
}
  
PROMPT=$'%(?,${PR_GREEN}+,${PR_RED}-)${PR_NO_COLOUR} %(4c,./%1~,%~) $(git_status) %(!.${PR_RED}#${PR_NO_COLOUR} .%% )'

По крайней мере, несколько примеров:

gitColorizedBranches