setopt histignoredups
# Don't add lines starting with a space to the history.
setopt histignorespace
+
# 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 lines starting with the typed text are
# after calling ^P.
bindkey -a '^N' history-beginning-search-forward
+# Enable incremental search which is especially useful when the string is an
+# argument and not the command.
+bindkey '^R' history-incremental-search-backward
+# Also enable my usual use of Ctrl-P/Ctrl-N to get the previous/next matching
+# history entry.
+if [[ $ZSH_VERSION == (4.<4->*|<5->*) ]]; then
+ bindkey -M isearch '^P' history-incremental-search-backward
+ bindkey -M isearch '^N' history-incremental-search-forward
+fi
+
# Automatically push cd-ed directories on the directory stack.
setopt autopushd
# Don't push duplicates on the directory stack.
program_name=git
;;
m)
- program_name=mutt
+ program_name=make
+ ;;
+ p)
+ program_name=less
;;
v)
program_name=vim
;;
+ mu)
+ program_name=mutt
+ ;;
esac
# Add an exclamation mark at the beginning if running with sudo or if
zstyle ':completion:*' use-cache yes
zstyle ':completion:*' cache-path ~/.zsh/cache
+# List all files in the current directory when pressing tab on an empty input,
+# behave like complete-word otherwise. Thanks to John Eikenberry [1] for the
+# code, read on 2014-03-15.
+#
+# [1]: http://unix.stackexchange.com/a/32426
+complete-word-or-complete-list-of-files() {
+ if [[ $#BUFFER == 0 ]]; then
+ BUFFER='ls '
+ CURSOR=3
+ zle list-choices
+ zle backward-kill-word
+ else
+ zle complete-word
+ fi
+}
+zle -N complete-word-or-complete-list-of-files
# Let the completion system handle all completions, including expanding of
# shell wildcards (which is handled by other shell mechanisms if the default
# expand-or-complete is used).
-bindkey '^I' complete-word
+bindkey '^I' complete-word-or-complete-list-of-files
# If there are multiple matches after pressing <Tab> always display them
# immediately without requiring another <Tab>. a<Tab> completes to aa and
# lists aaa, aab, aac as possible completions if the directory contains aaa,
zstyle ':completion:complete-files:*' completer _files
bindkey '^F' complete-files
+# Completion for my wrapper scripts
+compdef slocate=locate
+compdef srsync=rsync
+compdef srsync-incremental=rsync
+compdef svalgrind=valgrind
+
# CUSTOM ALIASES AND FUNCTIONS
compdef _xpdf pdf
fi
-# GHCI doesn't use readline, force it if rlwrap is available.
-(( $+commands[rlwrap] )) && ghci() {
- command rlwrap \
- --always-readline --complete-filenames -t dumb \
- --histsize 5000 \
- --file ~/.shell/rlwrap/ghci \
- ghci "$@" 2>&1
+# Better viewer for info pages .. just pipe everything into less.
+info() {
+ command info "$@" 2>/dev/null | less
}
fi
fi
-# Colorize stderr in bold red. Very useful when looking for errors. Thanks to
-# http://gentoo-wiki.com/wiki/Zsh for the basic script and Mikachu in #zsh on
-# Freenode (2010-03-07 04:03 CET) for some improvements (-r, printf). It's not
-# yet perfect and doesn't work with su and git for example, but it can handle
-# most interactive output quite well (even with no trailing new line) and in
-# cases it doesn't work, the E alias can be used as workaround.
-#
-# Moved in the "run commands" section to prevent one unnecessary zsh process
-# when starting GNU screen/tmux (see above).
-exec 2>>(while read -r -k -u 0 line; do
- printf '\e[91m%s\e[0m' "$line"
- print -n $'\0'
-done &)
+# Colorize stderr in bold red. Very useful when looking for errors.
+if [[ $LD_PRELOAD != *libcoloredstderr.so* ]]; then
+ # coloredstderr found, use it.
+ if [[ -f ~/.zsh/libcoloredstderr.so ]]; then
+ export LD_PRELOAD="$HOME/.zsh/libcoloredstderr.so:$LD_PRELOAD"
+ export COLORED_STDERR_FDS=2,
+ export COLORED_STDERR_PRE=$'\033[91m' # bright red
+ export COLORED_STDERR_IGNORED_BINARIES=/usr/bin/tset
+ # Use the fallback solution.
+ #
+ # Thanks to http://gentoo-wiki.com/wiki/Zsh for the basic script and
+ # Mikachu in #zsh on Freenode (2010-03-07 04:03 CET) for some improvements
+ # (-r, printf). It's not yet perfect and doesn't work with su and git for
+ # example, but it can handle most interactive output quite well (even with
+ # no trailing new line) and in cases it doesn't work, the E alias can be
+ # used as workaround.
+ #
+ # Moved in the "run commands" section to prevent one unnecessary zsh
+ # process when starting GNU screen/tmux (see above).
+ else
+ exec 2>>(while read -r -k -u 0 line; do
+ printf '\e[91m%s\e[0m' "$line"
+ print -n $'\0'
+ done &)
+ fi
+fi
# Display possible log messages from ~/.xinitrc (if `xmessage` wasn't
# installed). No race condition as xinitrc has finished before a shell is