2009-09-17

zsh+vcs trick

В одном из предыдущих постов я походя "зацепил" настройку шелла для поддержки одной из VCS - git. Так как сейчас приходится равнопеременно работать с творением Линуса и subversion, захотелось, чтобы было всё и сразу.

Велосипеды были отметены сразу, а последовательное гугление вывело на эту статью. Собственно, практически всё и было взято оттуда, с небольшими изменениями.

Итак, с места в карьер результат:
Free Image Hosting at www.ImageShack.us

И (обработанная) часть конфига, которым удалость достигнуть видимого результата:
autoload colors
colors

autoload -Uz vcs_info

# set some colors
for COLOR in RED GREEN YELLOW WHITE BLACK CYAN; do
    eval PR_$COLOR='%{$fg[${(L)COLOR}]%}'
    eval PR_BRIGHT_$COLOR='%{$fg_bold[${(L)COLOR}]%}'
done
PR_RESET="%{${reset_color}%}";

# set formats
# %b - branchname
# %u - unstagedstr (see below)
# %c - stangedstr (see below)
# %a - action (e.g. rebase-i)
# %R - repository path
# %S - path in the repository
FMT_BRANCH="${PR_GREEN}%b%u:%c${PR_RESET}" # e.g. master¹²
FMT_ACTION="(${PR_CYAN}%a${PR_RESET}%)"   # e.g. (rebase-i)
FMT_PATH="%R${PR_YELLOW}/%S"              # e.g. ~/repo/subdir

function precmd {
    vcs_info 'prompt'
}

function rprompt {
    local brackets=$1
    local color1=$2  
    local color2=$3  

    local bracket_open="${color1}${brackets[1]}${PR_RESET}"
    local bracket_close="${color1}${brackets[2]}"          

    local git='$vcs_info_msg_0_'                           
    local cwd="${color2}%B%1~%b"

    RPROMPT="${PR_RESET}${bracket_open}${git}${cwd}${bracket_close}%# ${PR_RESET}"
}

function lprompt {
    local brackets=$1
    local color1=$2
    local color2=$3

    local bracket_open="${color1}${brackets[1]}${PR_RESET}"
    local bracket_close="${color1}${brackets[2]}${PR_RESET}"
    local colon="${color1}:"
    local at="${PR_BRIGHT_GREEN}@${PR_RESET}"

    local user_host="${PR_YELLOW}%n${at}${PR_YELLOW}%m"
    local vcs_cwd='${${vcs_info_msg_1_%%.}/$HOME/~}'
    local cwd="${color2}%B%20<..<${vcs_cwd}%<<%b"
    local inner="${user_host}${colon}${cwd}"

    PROMPT="${PR_RESET}${bracket_open}${inner}${bracket_close}${PR_RESET}$ "
}

lprompt '[]' $BR_BRIGHT_BLACK $PR_WHITE
rprompt '()' $BR_BRIGHT_BLACK $PR_WHITE

Изменения по сравнению с оригинальным "рецептом" из упомянутой статьи - изменены "стороны" показа директории и бранча; мне показалось, что будет логичней, если бранч будет "появляться" справа, а директория и остальная стандартная инфа - болтаться привычно слева. Ну и цвета сделал чуть более выделяющимися, да кое-где поставил делимитеров. Детальные описания всего этого священнодействия можно поглядеть всё в той же статье - не вижу смысла его сюда копипастить.

Если кому-то может пригодиться, мой полный конфиг zsh можно забрать тут.

0 комментария(ев):

Отправить комментарий