# Be paranoid, new files are readable/writable by me only.
umask 077
+# Disable beeps.
+setopt nobeep
+
# Prevent overwriting existing files with '> filename', use '>| filename'
# (or >!) instead.
setopt noclobber
fpath=(~/.zsh/functions $fpath)
# Autoload my functions (except completion functions and hidden files). Thanks
# to caphuso from the Zsh example files for this idea.
-autoload ${fpath[1]}/^_*(^/:t)
+if [[ -d ~/.zsh/functions ]]; then
+ autoload ${fpath[1]}/^_*(^/:t)
+fi
# Simulate hooks using _functions arrays for Zsh versions older than 4.3.4. At
# the moment only precmd() and preexec() are simulated.
# HISTORY SETTINGS
# Use history and store it in ~/.zsh/history.
-HISTSIZE=5000
-SAVEHIST=5000
+HISTSIZE=50000
+SAVEHIST=50000
HISTFILE=~/.zsh/history
# Append to the history file instead of overwriting it and do it immediately
# when a command is executed.
setopt incappendhistory
# If the same command is run multiple times store it only once in the history.
setopt histignoredups
-# Vim like completions of previous executed commands.
-bindkey "^P" history-beginning-search-backward
-bindkey "^N" history-beginning-search-forward
+# Vim like completions of previous executed commands (also enter Vi-mode). If
+# called at the beginning it just recalls old commands (like cursor up), if
+# called after typing something only likes starting with the typed are
+# returned. Very useful to get old commands quickly. Thanks to Mikachu in #zsh
+# on Freenode (2010-01-17 12:47) for the information how to a function with
+# bindkey.
+zle -N my-vi-history-beginning-search-backward
+my-vi-history-beginning-search-backward() {
+ local not_at_beginning_of_line
+ if [[ $CURSOR -ne 0 ]]; then
+ not_at_beginning_of_line=yes
+ fi
+
+ zle history-beginning-search-backward
+
+ # Start Vi-mode and stay at the same position (Vi-mode modes one left,
+ # this counters it).
+ zle vi-cmd-mode
+ if [[ -n $not_at_beginning_of_line ]]; then
+ zle vi-forward-char
+ fi
+}
+bindkey "^P" my-vi-history-beginning-search-backward
+bindkey -a "^P" history-beginning-search-backward # binding for Vi-mode
+# Here only Vi-mode is necessary as ^P enters Vi-mode and ^N only makes sense
+# after calling ^P.
+bindkey -a "^N" history-beginning-search-forward
# PROMPT SETTINGS
fi
fi
-# When screen or xterm is used set the name of the window to the currently
-# running program.
+# When screen, xterm or rxvt is used set the name of the window to the
+# currently running program.
#
# When a program is started preexec() sets the window's name to it; when it
# stops precmd() resets the window's name to 'zsh'.
# added at the beginning of the command to make this clear. If a command is
# running on a different computer with ssh a @ is added at the beginning. This
# only works if the .zshrc on the server also uses this command.
-if [[ $TERM == screen* || $TERM == xterm* ]]; then
+if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then
# Is set to a non empty value to reset the window name in the next
# precmd() call.
window_reset=yes
# Ignore often used commands which are only running for a very short
# time. This prevents a "blinking" name when it's changed to "cd" for
# example and then some milliseconds later back to "zsh".
- [[ $program_name == (cd*|ls|la|ll|clear) ]] && return
+ [[ $program_name == (cd*|ls|la|ll|clear|c) ]] && return
# Change my shortcuts so the real name of the program is displayed.
case $program_name in
[[ -z $window_reset ]] && return
# Reset the window name to 'zsh'.
+ local name="zsh"
+ # If the function was called with an argument then reset the window
+ # name to '.zsh' (used by clear alias).
+ if [[ -n $1 ]]; then
+ name=".zsh"
+ fi
+
+ # Prepend prefixes like in window_preexec().
if [[ -n $SSH_CONNECTION ]]; then
- window_title "@zsh"
+ window_title "@$name"
elif [[ -n $window_root ]]; then
- window_title "!zsh"
+ window_title "!$name"
else
- window_title "zsh"
+ window_title $name
fi
# Just reset the name, so no screen reset necessary for the moment.
window_reset=
}
- # Sets the window title. Works with screen and xterm.
+ # Sets the window title. Works with screen, xterm and rxvt.
window_title() {
if [[ $TERM == screen* ]]; then
print -n "\ek$1\e\\"
echo "$1" | stumpish -e "title" > /dev/null
fi
- elif [[ $TERM == xterm* ]]; then
+ elif [[ $TERM == xterm* || $TERM == rxvt* ]]; then
print -n "\e]2;$1\e\\"
fi
}
add-zsh-hook precmd window_precmd
fi
-# If the window naming feature is used (see above) then use ".zsh" (leading
-# dot) as title name after running clear so it's clear to me that the window
-# is empty. I open so much windows that I don't know in which I have something
-# important. This helps me to remember which windows are empty (I run clear
-# after I finished my work in a window).
-if [[ -n $window_reset ]]; then
- alias clear='clear; window_title .zsh'
-fi
-
# COMPLETION SETTINGS
# 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.
+#
+# Thanks to Vadim Zeitlin <vz-zsh@zeitlins.org> for a fix (--) so lines
+# starting with - don't cause errors.
TRAPINT() {
# Store the current buffer in the history.
- zle && print -s $BUFFER
+ zle && print -s -- $BUFFER
# Return the default exit code so zsh aborts the current command.
return $1
alias -g D='E | colordiff L'
alias -g G='| grep'
alias -g S='| sort'
+alias -g U='| uniq'
# Make going up directories simple.
alias -g ...='../..'
alias -g .....='../../../..'
# Shortcuts for often used programs.
+alias c='clear'
alias e='elinks'
alias g='git'
alias m='mutt'
la -l $*
}
+# If the window naming feature is used (see above) then use ".zsh" (leading
+# dot) as title name after running clear so it's clear to me that the window
+# is empty. I open so much windows that I don't know in which I have something
+# important. This helps me to remember which windows are empty (I run clear
+# after I finished my work in a window).
+if [[ -n $window_reset ]]; then
+ alias clear='clear; window_reset=yes; window_precmd reset'
+fi
+
# I sometimes confuse editor and shell, print a warning to prevent I exit the
# shell.
alias :q='echo "This is not Vim!" >&2'