Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Mercurial Prompt Support #901

Closed
wants to merge 2 commits into from

3 participants

@mathew-hall

Adds new library to provide similar functions to existing git library. Works in the same way, provides hg_prompt_info and hg_prompt_status that do the same thing as their git counterparts.

Usage:

Set appropriate ZSH_THEME_HG_PROMPT_* variables and use hg_prompt_status in a theme. Ugly looking example provided in lib/mjh.theme.zsh just uses the existing git ones.

Mathew Hall added some commits
Mathew Hall Added support for Mercurial repositories. Works in the same way as GI…
…T; themes need to use functions defined in lib/hg.zsh.

Currently uses git theme variables ($ZSH_THEME_GIT_PROMPT_*). Remove assignments at the top of hg.zsh and define them in themes to change.
25ff16e
Mathew Hall Cleaned lib/hg.zsh of references to git.
Theme now sets necessary vars for hg info on prompts.
3e4f6d1
@sorin-ionescu

@sjl wrote a Mercurial plugin, hg-prompt, that greatly simplifies the inserting of Mercurial repository information in prompts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Feb 1, 2012
  1. Added support for Mercurial repositories. Works in the same way as GI…

    Mathew Hall authored
    …T; themes need to use functions defined in lib/hg.zsh.
    
    Currently uses git theme variables ($ZSH_THEME_GIT_PROMPT_*). Remove assignments at the top of hg.zsh and define them in themes to change.
  2. Cleaned lib/hg.zsh of references to git.

    Mathew Hall authored
    Theme now sets necessary vars for hg info on prompts.
This page is out of date. Refresh to see the latest.
Showing with 204 additions and 0 deletions.
  1. +46 −0 lib/hg.zsh
  2. +158 −0 themes/mjh.zsh-theme
View
46 lib/hg.zsh
@@ -0,0 +1,46 @@
+
+
+#give branch & tag:
+function hg_prompt_info() {
+ ref=$(hg branch 2> /dev/null) || return
+ tag=$(hg parent | grep tag | cut -f 2 -d ":" | tr -d ' ')
+ echo "$ZSH_THEME_HG_PROMPT_PREFIX${ref}:${tag}$ZSH_THEME_HG_PROMPT_SUFFIX"
+}
+
+
+
+#
+function hg_prompt_name() {
+ ID=$(hg id 2> /dev/null) && echo "$ZSH_THEME_HG_PROMPT_SHA_BEFORE$ID$ZSH_THEME_HG_PROMPT_SHA_AFTER"
+}
+
+
+# Get the status of the working tree
+hg_prompt_status() {
+ INDEX=$(hg status 2> /dev/null)
+ STATUS=""
+ if $(echo "$INDEX" | grep '^? ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_UNTRACKED$STATUS"
+ fi
+ if $(echo "$INDEX" | grep '^A ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_ADDED$STATUS"
+ elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_ADDED$STATUS"
+ fi
+ if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_MODIFIED$STATUS"
+ elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_MODIFIED$STATUS"
+ elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_MODIFIED$STATUS"
+ fi
+ if $(echo "$INDEX" | grep '^ R ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_DELETED$STATUS"
+ elif $(echo "$INDEX" | grep '^R ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_DELETED$STATUS"
+ fi
+ if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then
+ STATUS="$ZSH_THEME_HG_PROMPT_UNMERGED$STATUS"
+ fi
+ echo $STATUS
+}
View
158 themes/mjh.zsh-theme
@@ -0,0 +1,158 @@
+#Based on themes/jonathan.mjh.zsh-theme.
+
+function theme_precmd {
+ local TERMWIDTH
+ (( TERMWIDTH = ${COLUMNS} - 1 ))
+
+
+ ###
+ # Truncate the path if it's too long.
+
+ PR_FILLBAR=""
+ PR_PWDLEN=""
+
+ local promptsize=${#${(%):-%n@:%l()()}}
+
+ local pwdsize=${#${(%):-%~%m}}
+
+ if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then
+ ((PR_PWDLEN=$TERMWIDTH - $promptsize))
+ else
+ PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}"
+ fi
+
+}
+
+
+setopt extended_glob
+theme_preexec () {
+ if [[ "$TERM" == "screen" ]]; then
+ local CMD=${1[(wr)^(*=*|sudo|-*)]}
+ echo -n "\ek$CMD\e\\"
+ fi
+}
+
+
+setprompt () {
+ ###
+ # Need this so the prompt will work.
+
+ setopt prompt_subst
+
+
+ ###
+ # See if we can use colors.
+
+ autoload colors zsh/terminfo
+ if [[ "$terminfo[colors]" -ge 8 ]]; then
+ colors
+ fi
+ for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GREY; 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]%}"
+
+
+
+ ###
+ # Modify Git prompt
+ ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[green]%}"
+ ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ ZSH_THEME_GIT_PROMPT_DIRTY=""
+ ZSH_THEME_GIT_PROMPT_CLEAN=""
+
+ ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} A"
+ ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} M"
+ ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} D"
+ ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} R"
+ ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} !M"
+ ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[white]%} !T"
+
+
+ #Shameless git stuff:
+ ZSH_THEME_HG_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX
+ ZSH_THEME_HG_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX
+ ZSH_THEME_HG_PROMPT_SHA_BEFORE=$ZSH_THEME_GIT_PROMPT_SHA_BEFORE
+ ZSH_THEME_HG_PROMPT_SHA_AFTER=$ZSH_THEME_GIT_PROMPT_SHA_AFTER
+ ZSH_THEME_HG_PROMPT_UNTRACKED=$ZSH_THEME_GIT_PROMPT_UNTRACKED
+ ZSH_THEME_HG_PROMPT_ADDED=$ZSH_THEME_GIT_PROMPT_ADDED
+ ZSH_THEME_HG_PROMPT_MODIFIED=$ZSH_THEME_GIT_PROMPT_MODIFIED
+ ZSH_THEME_HG_PROMPT_RENAMED=$ZSH_THEME_GIT_PROMPT_RENAMED
+ ZSH_THEME_HG_PROMPT_DELETED=$ZSH_THEME_GIT_PROMPT_DELETED
+ ZSH_THEME_HG_PROMPT_UNMERGED=$ZSH_THEME_GIT_PROMPT_UNMERGED
+
+
+
+ ###
+ # See if we can use extended characters to look nicer.
+
+ typeset -A altchar
+ set -A altchar ${(s..)terminfo[acsc]}
+ PR_SET_CHARSET="%{$terminfo[enacs]%}"
+ PR_SHIFT_IN="%{$terminfo[smacs]%}"
+ PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
+ PR_HBAR=${altchar[q]:--}
+ PR_ULCORNER=${altchar[l]:--}
+ PR_LLCORNER=${altchar[m]:--}
+ PR_LRCORNER=${altchar[j]:--}
+ PR_URCORNER=${altchar[k]:--}
+
+
+ ###
+ # Decide if we need to set titlebar text.
+
+ case $TERM in
+ xterm*)
+ PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}'
+ ;;
+ screen)
+ PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
+ ;;
+ *)
+ PR_TITLEBAR=''
+ ;;
+ esac
+
+
+ ###
+ # Decide whether to set a screen title
+ if [[ "$TERM" == "screen" ]]; then
+ PR_STITLE=$'%{\ekzsh\e\\%}'
+ else
+ PR_STITLE=''
+ fi
+
+
+ ###
+ # Finally, the prompt.
+ LB=\[
+ RB=\]
+ PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
+$PR_GREY$LB\
+$PR_YELLOW%(!.%SROOT%s.%n)$PR_GREY@$PR_LIGHT_MAGENTA%m$PR_GREY:$PR_GREEN%$PR_PWDLEN<...<%~%<<\
+$PR_GREY$RB$PR_SHIFT_IN${(e)PR_FILLBAR}$PR_HBAR$PR_SHIFT_OUT\
+$PR_GREY$LB$PR_GREEN%l\
+$PR_GREY$RB$PR_CYAN\
+
+$PR_LIGHT_GREY$LB\
+$PR_LIGHT_CYAN%D{%H:%M:%S}\
+%{$reset_color%}`hg_prompt_info``git_prompt_info``git_prompt_status``hg_prompt_status`$PR_GREY$RB $PR_GREEN%#$PR_NO_COLOUR '
+
+ # display exitcode on the right when >0
+ return_code="%{$fg[red]%}%? ↵ %{$reset_color%}"
+ RPROMPT=' $return_code$PR_GREY\
+{$PR_YELLOW%D{%a %e %b}$PR_NO_COLOUR'
+
+ PS2='$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
+$PR_BLUE$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\
+$PR_LIGHT_GREEN%_$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
+$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR '
+}
+
+setprompt
+
+autoload -U add-zsh-hook
+add-zsh-hook precmd theme_precmd
+add-zsh-hook preexec theme_preexec
Something went wrong with that request. Please try again.