# MISCELLANEOUS SETTINGS
-# Be paranoid, new files are readable/writable by me only, but not as root.
-if [[ $UID -ne 0 ]]; then
- umask 077
-fi
+# Prevent warnings.
+typeset -g TMOUT
+# Load general shell setup commands. NOTE: Expand this when publishing the
+# config.
+source_config ~/.shell/rc
# Disable beeps.
setopt nobeep
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.
local background="%(1j.${yellow}%j${default}.)"
# Exit code in bright red in parentheses if not zero.
local exitcode="%(?..(${red}%B%?%b${default}%) )"
+ # Prompt symbol, % for normal users, # in red for root.
+ local symbol="%(!.${red}#${default}.%%)"
# Prefix characters in first and second line.
local top_prefix="${blue}%B.-%b${default}"
local top_separator="%B${blue}${(l:${width}::-:)}%b${default}"
PROMPT="${top_prefix}${top_left}${top_separator}${top_right}
-${bottom_prefix}${user}@${host} ${background}%# ${exitcode}"
+${bottom_prefix}${user}@${host} ${background}${symbol} ${exitcode}"
}
precmd_functions+=(zshrc_prompt_precmd)
name=.zsh
fi
- # Prepend prefixes like in window_preexec().
+ # Prepend prefixes like in zshrc_window_preexec().
if [[ $UID -eq 0 ]]; then
name="!$name"
fi
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
}
# LOAD ADDITIONAL CONFIGURATION FILES
-# Configuration option for rc.local to use GNU screen/tmux. By default GNU
-# screen is used. Possible values: screen, tmux and empty (no value).
+# Configuration options for rc.local.
+
+# Multiplexer to use. By default GNU screen is used. Possible values: screen,
+# tmux and empty (no multiplexer).
zshrc_use_multiplexer=screen
+# Additional arguments for fortune.
+zshrc_fortune_arguments=()
source_config ~/.zsh/rc.local
# RUN COMMANDS
+# Make sure the multiplexer is available. Otherwise the exec terminates our
+# session.
+if [[ -n $zshrc_use_multiplexer ]]; then
+ if ! (( $+commands[$zshrc_use_multiplexer] )); then
+ echo "Multiplexer '$zshrc_use_multiplexer' not found." >&2
+ zshrc_use_multiplexer=
+ fi
+fi
+
# If not already in screen or tmux, reattach to a running session or create a
# new one. This also starts screen/tmux on a remote server when connecting
# through ssh.
fi
fi
-# Colorize stderr in 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
PERIOD=14400
periodic() {
# Display fortunes.
- (( $+commands[fortune] )) && fortune -ac
+ (( $+commands[fortune] )) && fortune -ac "${zshrc_fortune_arguments[@]}"
# Display reminders.
(( $+commands[rem] )) && [[ -f ~/.reminders ]] && rem -h
}