return 0
}
+# The following is the ‘add-zsh-hook’ function from zsh upstream. It is
+# included here to make the setup work with older versions of zsh (prior to
+# 4.3.7) in which this function had a bug that triggers annoying errors during
+# shell startup. This is exactly upstreams code from f0068edb4888a4d8fe94def,
+# with just a few adjustments in coding style to make the function look more
+# compact. This definition can be removed as soon as we raise the minimum
+# version requirement to 4.3.7 or newer.
+function add-zsh-hook() {
+ # Add to HOOK the given FUNCTION.
+ # HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
+ # zshexit, zsh_directory_name (the _functions subscript is not required).
+ #
+ # With -d, remove the function from the hook instead; delete the hook
+ # variable if it is empty.
+ #
+ # -D behaves like -d, but pattern characters are active in the function
+ # name, so any matching function will be deleted from the hook.
+ #
+ # Without -d, the FUNCTION is marked for autoload; -U is passed down to
+ # autoload if that is given, as are -z and -k. (This is harmless if the
+ # function is actually defined inline.)
+ emulate -L zsh
+ local -a hooktypes
+ hooktypes=(
+ chpwd precmd preexec periodic zshaddhistory zshexit
+ zsh_directory_name
+ )
+ local usage="Usage: $0 hook function\nValid hooks are:\n $hooktypes"
+ local opt
+ local -a autoopts
+ integer del list help
+ while getopts "dDhLUzk" opt; do
+ case $opt in
+ (d) del=1 ;;
+ (D) del=2 ;;
+ (h) help=1 ;;
+ (L) list=1 ;;
+ ([Uzk]) autoopts+=(-$opt) ;;
+ (*) return 1 ;;
+ esac
+ done
+ shift $(( OPTIND - 1 ))
+ if (( list )); then
+ typeset -mp "(${1:-${(@j:|:)hooktypes}})_functions"
+ return $?
+ elif (( help || $# != 2 || ${hooktypes[(I)$1]} == 0 )); then
+ print -u$(( 2 - help )) $usage
+ return $(( 1 - help ))
+ fi
+ local hook="${1}_functions"
+ local fn="$2"
+ if (( del )); then
+ # delete, if hook is set
+ if (( ${(P)+hook} )); then
+ if (( del == 2 )); then
+ set -A $hook ${(P)hook:#${~fn}}
+ else
+ set -A $hook ${(P)hook:#$fn}
+ fi
+ # unset if no remaining entries --- this can give better
+ # performance in some cases
+ if (( ! ${(P)#hook} )); then
+ unset $hook
+ fi
+ fi
+ else
+ if (( ${(P)+hook} )); then
+ if (( ${${(P)hook}[(I)$fn]} == 0 )); then
+ set -A $hook ${(P)hook} $fn
+ fi
+ else
+ set -A $hook $fn
+ fi
+ autoload $autoopts -- $fn
+ fi
+}
+
# Load is-at-least() for more precise version checks Note that this test will
# *always* fail, if the is-at-least function could not be marked for
# autoloading.
xunfunction() {
emulate -L zsh
local -a funcs
+ local func
funcs=(salias xcat xsource xunfunction zrcautoload zrcautozle)
for func in $funcs ; do
[[ -n ${functions[$func]} ]] \
for var in LANG LC_ALL LC_MESSAGES ; do
[[ -n ${(P)var} ]] && export $var
done
+builtin unset -v var
# set some variables
if check_com -c vim ; then
is4 && \
for mod in parameter complist deltochar mathfunc ; do
zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :("
-done
+done && builtin unset -v mod
# autoload zsh modules when they are referenced
if is4 ; then
# host completion
if is42 ; then
- [[ -r ~/.ssh/config ]] && _ssh_config_hosts=(${${${(@M)${(f)"$(<$HOME/.ssh/config)"}:#Host *}#Host }:#*[*?]*}) || _ssh_config_hosts=()
+ [[ -r ~/.ssh/config ]] && _ssh_config_hosts=(${${(s: :)${(ps:\t:)${${(@M)${(f)"$(<$HOME/.ssh/config)"}:#Host *}#Host }}}:#*[*?]*}) || _ssh_config_hosts=()
[[ -r ~/.ssh/known_hosts ]] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
[[ -r /etc/hosts ]] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()
else
if [[ -r $HELP_ZLE_CACHE_FILE ]]; then
local load_cache=0
+ local f
for f ($HELPZLE_KEYBINDING_FILES) [[ $f -nt $HELP_ZLE_CACHE_FILE ]] && load_cache=1
[[ $load_cache -eq 0 ]] && . $HELP_ZLE_CACHE_FILE && return
fi
typeset -g -a help_zle_lines
typeset -g help_zle_sln=1
- local k v
+ local k v f cline
local lastkeybind_desc contents #last description starting with #k# that we found
local num_lines_elapsed=0 #number of lines between last description and keybinding
#search config files in the order they a called (and thus the order in which they overwrite keybindings)
do
bind2maps emacs viins vicmd -- -s $seq $wid
done
+ builtin unset -v seq wid
fi
if zrcgotkeymap menuselect; then
# below, which gets called when the user does this: prompt -h grml
function prompt_grml_help () {
- cat <<__EOF0__
+ <<__EOF0__
prompt grml
This is the prompt as used by the grml-live system <http://grml.org>. It is
}
function prompt_grml-chroot_help () {
- cat <<__EOF0__
+ <<__EOF0__
prompt grml-chroot
This is a variation of the grml prompt, see: prompt -h grml
}
function prompt_grml-large_help () {
- cat <<__EOF0__
+ <<__EOF0__
prompt grml-large
This is a variation of the grml prompt, see: prompt -h grml
function grml_prompt_setup () {
emulate -L zsh
autoload -Uz vcs_info
- autoload -Uz add-zsh-hook
+ # The following autoload is disabled for now, since this setup includes a
+ # static version of the ‘add-zsh-hook’ function above. It needs to be
+ # reenabled as soon as that static definition is removed again.
+ #autoload -Uz add-zsh-hook
add-zsh-hook precmd prompt_$1_precmd
}
}
function GRML_theme_add_token_usage () {
- cat <<__EOF0__
+ <<__EOF0__
Usage: grml_theme_add_token <name> [-f|-i] <token/function> [<pre> <post>]
<name> is the name for the newly added token. If the \`-f' or \`-i' options
esac
}
-zrcautoload add-zsh-hook || add-zsh-hook () { :; }
+# The following autoload is disabled for now, since this setup includes a
+# static version of the ‘add-zsh-hook’ function above. It needs to be
+# reenabled as soon as that static definition is removed again.
+#zrcautoload add-zsh-hook || add-zsh-hook () { :; }
if [[ $NOPRECMD -eq 0 ]]; then
add-zsh-hook precmd grml_reset_screen_title
add-zsh-hook precmd grml_vcs_to_screen_title
[[ -n ${aliases[utf2iso]} ]] && unalias utf2iso
utf2iso() {
if isutfenv ; then
+ local ENV
for ENV in $(env | command grep -i '.utf') ; do
eval export "$(echo $ENV | sed 's/UTF-8/iso885915/ ; s/utf8/iso885915/')"
done
[[ -n ${aliases[iso2utf]} ]] && unalias iso2utf
iso2utf() {
if ! isutfenv ; then
+ local ENV
for ENV in $(env | command grep -i '\.iso') ; do
eval export "$(echo $ENV | sed 's/iso.*/UTF-8/ ; s/ISO.*/UTF-8/')"
done
if [[ -L /usr/bin/cdrecord ]] || ! check_com -c cdrecord; then
if check_com -c wodim; then
cdrecord() {
- cat <<__EOF0__
+ <<__EOF0__
cdrecord is not provided under its original name by Debian anymore.
See #377109 in the BTS of Debian for more details.
eval "$i() { __start_stop $i \"\$1\" \"\$2\" ; }"
compdef _grmlinitd $i
done
+ builtin unset -v i
fi
#f1# Provides useful information on globbing
}
# make sure our environment is clean regarding colors
-for color in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $color
+for var in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $var
+builtin unset -v var
# "persistent history"
# just write important commands you always need to ~/.important_commands
m) unset keep clean && (( ++move ));;
r) unset move keep && (( ++clean ));;
v) verbose="-v";;
- h) cat <<__EOF0__
+ h) <<__EOF0__
bk [-hcmv] FILE [FILE ...]
bk -r [-av] [FILE [FILE ...]]
Backup a file or folder in place and append the timestamp
#f5# Create temporary directory and \kbd{cd} to it
cdt() {
- local t
- t=$(mktemp -d)
- echo "$t"
- builtin cd "$t"
+ builtin cd "$(mktemp -d)"
+ builtin pwd
}
#f5# List files which have been accessed within the last {\it n} days, {\it n} defaults to 1
fi
# Translate DE<=>EN
-# 'translate' looks up fot a word in a file with language-to-language
+# 'translate' looks up a word in a file with language-to-language
# translations (field separator should be " : "). A typical wordlist looks
-# like at follows:
-# | english-word : german-transmission
+# like the following:
+# | english-word : german-translation
# It's also only possible to translate english to german but not reciprocal.
-# Use the following oneliner to turn back the sort order:
+# Use the following oneliner to reverse the sort order:
# $ awk -F ':' '{ print $2" : "$1" "$3 }' \
# /usr/local/lib/words/en-de.ISO-8859-1.vok > ~/.translate/de-en.ISO-8859-1.vok
#f5# Translates a word
simple-extract() {
emulate -L zsh
setopt extended_glob noclobber
- local DELETE_ORIGINAL DECOMP_CMD USES_STDIN USES_STDOUT GZTARGET WGET_CMD
+ local ARCHIVE DELETE_ORIGINAL DECOMP_CMD USES_STDIN USES_STDOUT GZTARGET WGET_CMD
local RC=0
zparseopts -D -E "d=DELETE_ORIGINAL"
for ARCHIVE in "${@}"; do
elif [[ "$ARCHIVE" == (#s)(https|http|ftp)://* ]] ; then
if check_com curl; then
- WGET_CMD="curl -L -k -s -o -"
+ WGET_CMD="curl -L -s -o -"
elif check_com wget; then
- WGET_CMD="wget -q -O - --no-check-certificate"
+ WGET_CMD="wget -q -O -"
+ elif check_com fetch; then
+ WGET_CMD="fetch -q -o -"
else
- print "ERROR: neither wget nor curl is installed" >&2
+ print "ERROR: neither wget, curl nor fetch is installed" >&2
RC=$((RC+4))
continue
fi
#f5# GNU like diff for mercurial
hgdi() {
emulate -L zsh
+ local i
for i in $(hg status -marn "$@") ; diff -ubwd <(hg cat "$i") "$i"
}