]> gitweb @ CieloNegro.org - sugar.git/blobdiff - dot-files/_zshrc
Auto commit by The Sugar System.
[sugar.git] / dot-files / _zshrc
index 6392b2614bf962acfd805ed1d9b01fb9a627eca9..575cb3ada0ec5abb9b1bd47bea4fdc46c1fe5a95 100644 (file)
@@ -58,14 +58,66 @@ 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
 
-RPROMPT='%U%D{%m/%d}%u %U%D{%T}%u %U%~%u'
+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
+
+    elif [[ -r $absdir/CVS/Repository ]] then
+        # CVS
+        cat $absdir/CVS/Repository \
+            | sed -e 's!\([^/]*\).*!\1!'
+
+    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
 
 HISTFILE="$HOME/.zhistory"
 HISTSIZE=6000000
@@ -95,7 +147,7 @@ alias aria="ssh -X admin@aria.cielonegro.org"
 alias nem="ssh -X pho@nem.cielonegro.org"
 alias mikasa="ssh -X daimon@mikasa.tomilab.net"
 
-alias aria-emacs="ssh -f -X admin@aria.cielonegro.org emacs"
+alias aria-emacs="ssh -f -X admin@aria.cielonegro.org emacsclient -c"
 
 alias g1="ssh pho@g1.cuenote.jp"
 alias g2="ssh pho@g2.cuenote.jp"
@@ -116,6 +168,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'