Для отображения в строке приглашения zsh информации о типе VCS, текущей ветке и состоянии репозитария (есть ли не закомиченные файлы) можно воспользоваться встроенным модулем vcs_info либо выдумывать что-то свое.
У vcs_info заявлена поддержка большого числа систем контроля версий (Bazaar, Codeville, CVS, darcs, git, Mercurial, Perforce, Subversion, etc.), но по возможностям сбора информации о текущем состоянии репозитария - лидирует git. Файл отвечающий за функционал с этим VCS самый массивный, а для hg насчитывает пару строк, не считая комментарии :), поэтому отображаемая информация о hg весьма скудна (может есть расширенная версия для hg ?).
Ниже приведены настройки для отображения состояния репозитариев для git и svn, версия для mercurial была позаимствована отсюдова и немного подправлена под себя. Вносить в ~/.zshrc.
hg_branch() { hg branch 2> /dev/null | awk '{ print "[hg:" $1 }' } hg_dirty() { [ $(hg status 2> /dev/null | wc -l) != 0 ] && echo -e "%F{red}*%F{green}]" [ $(hg status 2>&1 | wc -l) = 0 ] && echo -e "]" } autoload -Uz vcs_info zstyle ':vcs_info:*' enable svn git zstyle ':vcs_info:*' check-for-changes true # zstyle ':vcs_info:*' get-revision true zstyle ':vcs_info:*' stagedstr "+" zstyle ':vcs_info:*' unstagedstr "!" zstyle ':vcs_info:*' formats '[%s:%b%F{red}%c%u%F{green}]' setopt PROMPT_SUBST precmd () { vcs_info HG="$(hg_branch)$(hg_dirty)" }
Теперь добавим сформированную переменную HG и vcs_info_msg_0_ (формирует vcs_info) в zsh prompt, например так
PROMPT='%B%F{yellow}%n%F{green}${HG}${vcs_info_msg_0_}%F{blue}%(!.#.$)%f '
Так выглядит prompt в репозитарии с mercurial, у которого есть незакомиченные файлы
Так выглядит prompt в репозитарии с git, у которого есть unstaged файлы
Так выглядит prompt в репозитарии с svn
Бонус
timed небольшая приблуда для слежения из консоли за временем потраченным на проект, при желании можно прикрутить к строке приглашения и трекать время потраченное на проект.
Дополнительное чтиво