]> gitweb @ CieloNegro.org - sugar.git/commitdiff
Auto commit by The Sugar System.
authorPHO <pho@cielonegro.org>
Thu, 24 Sep 2009 10:27:26 +0000 (19:27 +0900)
committerPHO <pho@cielonegro.org>
Thu, 24 Sep 2009 10:27:26 +0000 (19:27 +0900)
dot-files/_zshrc

index ea5b889a8b36b159580cbd5f2e11a0cd9126134e..d5fdcf850a7e95ae29ad3f515e6487a6559e4372 100644 (file)
@@ -58,23 +58,72 @@ function _we_are_in_gnu_screen () {
 
 _prompt_base='%B[%n@%m] %{%(?.$fg[green].$fg[red])%}%#%{$reset_color%}%b '
 if ( _we_are_in_gnu_screen ); then
-    # Magic escape sequence for GNU Screen to update their titles
-    # dynamically by grabbing prompt line.
-    #PROMPT=$'%{\ek\e\\%}'$_prompt_base
-
+    # GNU Screen has a capability to set its window title by "ESC k
+    # {string} ESC \". We want to reset the title to `_' to show we
+    # aren't running any command now.
     PROMPT=$'%{\ek_\e\\%}'$_prompt_base
 else
     PROMPT=$_prompt_base
 fi
 
-function preexec() {
-    if ( _we_are_in_gnu_screen ); then
+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
 }
 
-RPROMPT='%U%D{%m/%d}%u %U%D{%T}%u %U%~%u'
+function chpwd() { # Hook
+    local dirinfo=$(print_directory_info)
+
+    case $dirinfo in
+        "")
+            RPROMPT='%U%~%u';;
+        *)
+            RPROMPT="%U%~%u %U($dirinfo)%u";;
+    esac
+}
+
+function print_directory_info() {
+    local vcs_type=$(print_vcs_type $(pwd))
+
+    case $vcs_type in
+        git)
+            git branch --no-color 2>/dev/null \
+                | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/';;
+        hg)
+            hg branch 2>/dev/null;;
+        darcs-*)
+            # Delete `darcs-' at the beginning.
+            echo ${vcs_type#darcs-};;
+        *)
+            # Unknown
+            echo
+    esac
+}
+
+function print_vcs_type() {
+    local absdir=$1
+
+    if [[ -d $absdir/.git ]] then
+        echo git
+    elif [[ -d $absdir/.hg ]] then
+        echo hg
+    elif [[ -d $absdir/_darcs ]] then
+        echo darcs-$(basename $absdir)
+    else
+        # Nothing.
+        if [[ $absdir = "/" ]] then
+            # This is the root directory so exit from the recursion.
+            echo
+        else
+            # Recurse to the parent dir.
+            print_vcs_type $(dirname $absdir)
+        fi
+    fi
+}
+chpwd
 
 HISTFILE="$HOME/.zhistory"
 HISTSIZE=6000000
@@ -116,7 +165,6 @@ if [ $(hostname) = "aria.cielonegro.org" ]; then
     alias pa='open -a NiseRingo.app'
     alias heboris='open /Applications/HeborisUEMac/exe/Heboris\ OpenGL.app'
     alias hengband='open ~/Applications/hengband*/Hengband*'
-    alias top='top -X -o cpu'
 fi
 
 if [ $(uname) = "Darwin" ]; then
@@ -126,6 +174,8 @@ if [ $(uname) = "Darwin" ]; then
     alias la='ls -aw'
     alias l='ls -lw'
     alias lls='ls -law'
+
+    alias top='/usr/bin/top -X -o cpu'
 else
     alias ls='ls -F'
     alias la='ls -a'