diff options
author | René 'Necoro' Neumann <necoro@necoro.net> | 2009-11-07 16:40:05 +0100 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.net> | 2009-11-07 16:40:05 +0100 |
commit | 9b0560257247887d716fbed36c43a32a97ed6ffd (patch) | |
tree | 56b9372009a804105c1e59147a4a8aac1bd8f2f4 | |
parent | ab20e46dc4275b550e532dff7440c2ec63015ac4 (diff) | |
download | dotfiles-9b0560257247887d716fbed36c43a32a97ed6ffd.tar.gz dotfiles-9b0560257247887d716fbed36c43a32a97ed6ffd.tar.bz2 dotfiles-9b0560257247887d716fbed36c43a32a97ed6ffd.zip |
Better hg VCS prompt support.
Diffstat (limited to '')
-rw-r--r-- | .hgext/hgshelve.pyc | bin | 18569 -> 0 bytes | |||
-rw-r--r-- | .zsh/functions/VCS_INFO_get_data_hg | 76 | ||||
-rw-r--r-- | .zsh/zshrc | 6 |
3 files changed, 82 insertions, 0 deletions
diff --git a/.hgext/hgshelve.pyc b/.hgext/hgshelve.pyc Binary files differdeleted file mode 100644 index 1c30d2b..0000000 --- a/.hgext/hgshelve.pyc +++ /dev/null diff --git a/.zsh/functions/VCS_INFO_get_data_hg b/.zsh/functions/VCS_INFO_get_data_hg new file mode 100644 index 0000000..d92d83a --- /dev/null +++ b/.zsh/functions/VCS_INFO_get_data_hg @@ -0,0 +1,76 @@ +## vim:ft=zsh +## mercurial support by: Frank Terbeck <ft@bewatermyfriend.org> +## Distributed under the same BSD-ish license as zsh itself. + +setopt localoptions NO_shwordsplit +local file hgbranch hgbranch_name hgbase hghash hglrev hgmisc r_branch r_info revformat +local hgunstaged + +VCS_INFO_hg_get_mq_top_patch () { + local patchdir=$1 + + if [[ -e "${patchdir}/status" ]]; then + local -a patches + patches=(${(f)"$(< "${patchdir}/status")"}) + printf "%s" "${patches[-1]/[^:]*:/}" + return 0 + fi + + return 1 +} + + +hgbase=${vcs_comm[basedir]} +rrn=${hgbase:t} + +file="${hgbase}/.hg/branch" +if [[ -r ${file} ]] ; then + hgbranch_name=$(< ${file}) +else + hgbranch_name="default" +fi + +hghash='' +hglrev='' +if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-revision ; then + # Calling the 'hg' program is quite a bit too slow for prompts. + # If there's a way around that, I'd be interested. + # Disabled by default anyway, so no harm done. + + HGRCPATH="/dev/null" ${vcs_comm[cmd]} branches \ + | while read -r r_branch r_info ; do + if [[ ${r_branch} == ${hgbranch_name} ]] ; then + match=() + : ${r_info/(#b)([^:]##):(*)} + hglrev=${match[1]} + hghash=${match[2]} + break + fi + done + + if [[ -n ${hglrev} ]] ; then + zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" hgrevformat revformat || revformat="%r:%h" + zformat -f hglrev "${revformat}" "r:${hglrev}" "h:${hghash}" + zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" branchformat hgbranch || hgbranch="%b:%r" + zformat -f hgbranch "${hgbranch}" "b:${hgbranch_name}" "r:${hglrev}" + fi + + if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" "check-for-changes" ; then + [[ -n $(${vcs_comm[cmd]} status -q 2> /dev/null) ]] && hgunstaged=1 + fi +else + hgbranch="${hgbranch_name}" +fi + +local patchdir=${hgbase}/.hg/patches/ + +if [[ -d $patchdir ]] ; then + hgmisc=$(VCS_INFO_hg_get_mq_top_patch "${patchdir}") + + hgmisc=${hgmisc:-"no patch applied"} +else + hgmisc='' +fi + +VCS_INFO_formats '' "${hgbranch}" "${hgbase}" '' "${hgunstaged}" "${hglrev}" "${hgmisc}" +return 0 @@ -112,6 +112,12 @@ if [[ $ZSH_VERSION == 4.3.<->* ]]; then zstyle ":vcs_info:*" get-revision true zstyle ":vcs_info:*" check-for-changes true zstyle ":vcs_info:*" max-exports 1 + + # hg stuff + zstyle ":vcs_info:hg:*" unstagedstr '*' + zstyle ":vcs_info:hg:*" hgrevformat '%r' + + # bzr stuff zstyle ":vcs_info:bzr:*" unstagedstr '*' if type bzr NOE; then |