+function preexec() { # Hook
+ if { _we_are_in_gnu_screen } then
+ # Set the window title of GNU Screen.
+ local cmd=${1[(wr)^(*=*|sudo|nice|env|time|-*|[0-9]*)]}
+ printf "\ek$cmd\e\\"
+ fi
+}
+
+function chpwd() { # Hook
+ local dirinfo=$(print_directory_info $(pwd))
+
+ case $dirinfo in
+ "")
+ RPROMPT='%U%~%u';;
+ *)
+ RPROMPT="%U%~%u %U($dirinfo)%u";;
+ esac
+}
+
+function print_directory_info() {
+ local absdir=$1
+
+ if [[ -d $absdir/.git ]] then
+ # Git
+ git branch --no-color 2>/dev/null \
+ | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
+
+ elif [[ -d $absdir/.hg ]] then
+ # Hg
+ hg branch 2>/dev/null
+
+ elif [[ -d $absdir/_darcs ]] then
+ # Darcs
+ basename $absdir
+
+ else
+ # Unknown.
+ if [[ $absdir = "/" ]] then
+ # This is the root directory so exit from the recursion.
+ echo
+ else
+ # Recurse to the parent dir.
+ print_directory_info $(dirname $absdir)
+ fi
+ fi
+}
+chpwd