03 октября 2008

Git branch in zsh

Увы, ребята из novemberain зачем-то убили свой сайт, так что ссылку на заметку Show git branch in a command prompt давать не буду, кому интересно - расшарил в гугльридере (хвала кешу гугла). А рассказывалось там, как выводить в приглашении командной строки bash текущий бранч гита.
Захотелось мне того же в zsh, а не тут то было. Штука в том, что prompt expansion выполняется в zsh на старте (попробуйте засунуть туда $(date) и убедитесь ) за исключением 'prompt escapes'. С другой стороны в zsh есть всякие специальные функции типа precmd (выполняется перед выводом prompt), а в качестве эмулятора терминала я использую yakuake, в заголовок вкладки которого можно напакостить написать всё что мне нужно. Так и получились следующие строки в конфиге zsh:

69 function precmd(){
70 GITBRANCH=`git branch 2>&1 | grep '*' | awk -F' ' '{print $2}'`
71 if [ ! -z $DCOP_YAKUAKE_SESSION ]; then
72     [ ! -z $GITBRANCH ] \
73         && dcop yakuake DCOPInterface slotRenameSession $DCOP_YAKUAKE_SESSION "git:$GITBRANCH" \
74         || dcop yakuake DCOPInterface slotRenameSession $DCOP_YAKUAKE_SESSION `pwd | sed "s,^$HOME,~,"`
75 fi
76 }

UPD: Интересная штука - в PS1 подстановка переменных также выполняется на старте, а в RPROMPT перед каждым выводом. Так что в дополнение к предыдущему методу можно ${GITBRANCH} куда-нибудь притулить в RPROMPT, чтобы видно было в любом терминале.

Комментариев нет: