]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - zsh/rc
Improved documentation for source_config().
[config/dotfiles.git] / zsh / rc
diff --git a/zsh/rc b/zsh/rc
index 9c0fc35f1835ddac5cf97cdef728251eb6608220..f3bebe89faed8b340388cb1371fd149de2ceec44 100644 (file)
--- a/zsh/rc
+++ b/zsh/rc
@@ -1,12 +1,38 @@
 # Zsh configuration file.
 
 
+# MISCELLANEOUS SETTINGS
+
 # Use Vi(m) style key bindings.
 bindkey -v
 
 # Be paranoid, new files are readable/writable by me only.
 umask 077
 
+# Make sure core dumps are created.
+ulimit -c unlimited
+
+# Prevent overwriting existing files with '> filename', use '>| filename'
+# (or >!) instead.
+setopt noclobber
+
+# Entering the name of a directory (if it's not a command) will automatically
+# cd to that directory.
+setopt autocd
+
+# When entering a nonexistent command name automatically try to find a similar
+# one.
+setopt correct
+
+# Enable zsh's extended glob abilities.
+setopt extendedglob
+
+# Don't exit if <C-d> is pressed.
+setopt ignoreeof
+
+
+# HISTORY SETTINGS
+
 # Use history and store it in ~/.zsh/history.
 HISTSIZE=1000
 SAVEHIST=1000
@@ -21,17 +47,11 @@ setopt histignoredups
 bindkey "^P" history-beginning-search-backward
 bindkey "^N" history-beginning-search-forward
 
-# Prevent overwriting existing files with '> filename', use '>| filename'
-# (or >!) instead.
-setopt noclobber
 
-# Entering the name of a directory (if it's not a command) will automatically
-# cd to that directory.
-setopt autocd
+# PROMPT SETTINGS
 
-# When entering a nonexistent command name automatically try to find a similar
-# one.
-setopt correct
+# Autoload add-zsh-hook to add/remove zsh hook functions easily.
+autoload -Uz add-zsh-hook
 
 # Use colorized output, necessary for prompts and completions.
 autoload -U colors && colors
@@ -46,6 +66,34 @@ PROMPT="%{${fg[green]}%}%B%m%b%{${fg[default]}%}:\
 %(1j.%{${fg[yellow]}%}%j%{${fg[default]}%}.)%(2L.+.)%# \
 %(?..(%{${fg[red]}%}%B%?%b%{${fg[default]}%}%) )"
 
+# Allow substitutions and expansions in the prompt, necessary for vcs_info.
+setopt promptsubst
+# Load vcs_info to display information about version control repositories.
+autoload -Uz vcs_info
+# Only look for git and mercurial repositories; the only I use.
+zstyle ':vcs_info:*' enable git hg
+# Set style of vcs_info display. The current branch (green) and vcs (blue) is
+# displayed. If there is an special action going on (merge, rebase) it's also
+# displayed (red).
+zstyle ':vcs_info:*' formats \
+"(%{${fg[green]}%}%b%{${fg[default]}%}:\
+%{${fg[blue]}%}%s%{${fg[default]}%})"
+zstyle ':vcs_info:*' actionformats \
+"(%{${fg[green]}%}%b%{${fg[default]}%}/\
+%{${fg[red]}%}%a%{${fg[default]}%}:\
+%{${fg[blue]}%}%s%{${fg[default]}%})"
+# Call vcs_info as precmd before every prompt.
+prompt_precmd() {
+    vcs_info
+}
+add-zsh-hook precmd prompt_precmd
+
+# Display the vcs information in the right prompt.
+RPROMPT='${vcs_info_msg_0_}'
+
+
+# COMPLETION SETTINGS
+
 # Use new completion system.
 autoload -U compinit && compinit
 # Load the complist module which provides additions to completion lists
@@ -75,29 +123,12 @@ zstyle ':completion:*' list-prompt '%p'
 # When unsetting variables make sure every variable name is only suggested
 # once.
 zstyle ':completion:*:unset:*' ignore-line yes
-# When working with mercurial don't complete the same file multiple times.
-zstyle ':completion:*:hg*:*' ignore-line yes
-
-# Enable zsh's extended glob abilities.
-setopt extendedglob
+# When working with Mercurial and Git don't complete the same file multiple
+# times. Very useful when completing file names.
+zstyle ':completion:*:(hg|git)*:*' ignore-line yes
 
-# Don't exit if <C-d> is pressed.
-setopt ignoreeof
-
-# Autoload add-zsh-hook to add/remove zsh hook functions easily.
-autoload -Uz add-zsh-hook
 
-# If ^C is pressed while typing a command, add it to the history so it can be
-# easily retrieved later and then abort like ^C normally does. This is useful
-# when I want to abort an command to do something in between and then finish
-# typing the command.
-TRAPINT() {
-    # Store the current buffer in the history.
-    zle && print -s $BUFFER
-
-    # Return the default exit code so zsh aborts the current command.
-    return $1
-}
+# ALIAS AND FUNCTION SETTINGS
 
 # Simplify calls to less, automatically redirects all output.
 alias -g L='2>&1 | less'
@@ -130,7 +161,7 @@ alias vqs='vim -c "cd $(hg root)/.hg/patches/" "$(hg root)/.hg/patches/series"'
 alias -g ...='../..'
 alias -g ....='../../..'
 
-# Improved ls which displays the files in columns (-C), visualises directories,
+# Improved ls which displays the files in columns (-C), visualizes directories,
 # links and other special files (-F) and pages everything through less (L).
 #
 # If available use GNU ls with colorized output. If it isn't available use
@@ -155,6 +186,29 @@ function ll() {
     la -l $*
 }
 
+# If ^C is pressed while typing a command, add it to the history so it can be
+# easily retrieved later and then abort like ^C normally does. This is useful
+# when I want to abort an command to do something in between and then finish
+# typing the command.
+TRAPINT() {
+    # Store the current buffer in the history.
+    zle && print -s $BUFFER
+
+    # Return the default exit code so zsh aborts the current command.
+    return $1
+}
+
+# Execute all periodic functions every hour.
+PERIOD=3600
+# Display TODOs stored in ~/.todo if this file exists. Run every hour to make
+# clear they should be completed ;-).
+todo() {
+    if [[ -f ~/.todo ]]; then
+        cat ~/.todo | $PAGER
+    fi
+}
+add-zsh-hook periodic todo
+
 
 # Load rc file for current OS.
 source_config ~/.zsh os rc $(uname) nolocal