X-Git-Url: http://git.grml.org/?a=blobdiff_plain;ds=inline;f=etc%2Fzsh%2Fzshrc;h=2f69b22ea13c3e3bfae5d7426157757ad7da2b65;hb=87f7ba3507aa75f3213ed2bca9a524823bfbbf82;hp=d7fb9be855af566730f717060bc913b7e0cdfc31;hpb=26ec56414ddaa420642dc857bfb224386632023a;p=grml-etc-core.git
diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc
index d7fb9be..2f69b22 100644
--- a/etc/zsh/zshrc
+++ b/etc/zsh/zshrc
@@ -216,11 +216,12 @@ fi
# We need to define this function as early as this, because autoloading
# 'is-at-least()' needs it.
function zrcautoload() {
- setopt local_options extended_glob
+ emulate -L zsh
+ setopt extended_glob
local fdir ffile
local -i ffound
- ffile=${1}
+ ffile=$1
(( found = 0 ))
for fdir in ${fpath} ; do
[[ -e ${fdir}/${ffile} ]] && (( ffound = 1 ))
@@ -242,6 +243,42 @@ zrcautoload is-at-least || is-at-least() { return 1 }
# }}}
+# {{{ set some important options (as early as possible)
+# Please update these tags, if you change the umask settings below.
+#o# r_umask 002
+#o# r_umaskstr rwxrwxr-x
+#o# umask 022
+#o# umaskstr rwxr-xr-x
+(( EUID != 0 )) && umask 002 || umask 022
+
+setopt append_history # append history list to the history file (important for multiple parallel zsh sessions!)
+is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
+setopt extended_history # save each command's beginning timestamp and the duration to the history file
+is4 && setopt histignorealldups # If a new command line being added to the history
+ # list duplicates an older one, the older command is removed from the list
+setopt histignorespace # remove command lines from the history list when
+ # the first character on the line is a space
+setopt auto_cd # if a command is issued that can't be executed as a normal command,
+ # and the command is the name of a directory, perform the cd command to that directory
+setopt extended_glob # in order to use #, ~ and ^ for filename generation
+ # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
+ # -> searches for word not in compressed files
+ # don't forget to quote '^', '~' and '#'!
+setopt longlistjobs # display PID when suspending processes as well
+setopt notify # report the status of backgrounds jobs immediately
+setopt hash_list_all # Whenever a command completion is attempted, make sure \
+ # the entire command path is hashed first.
+setopt completeinword # not just at the end
+setopt nohup # and don't kill them, either
+setopt auto_pushd # make cd push the old directory onto the directory stack.
+setopt nonomatch # try to avoid the 'zsh: no matches found...'
+setopt nobeep # avoid "beep"ing
+setopt pushd_ignore_dups # don't push the same dir twice.
+setopt noglobdots # * shouldn't match dotfiles. ever.
+setopt noshwordsplit # use zsh style word splitting
+
+# }}}
+
# setting some default values {{{
NOCOR=${NOCOR:-0}
@@ -254,79 +291,6 @@ GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0}
ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0}
-if isgrmlcd ; then
- GRML_WARN_SKEL=${GRML_WARN_SKEL:-0}
-else
- GRML_WARN_SKEL=${GRML_WARN_SKEL:-1}
-fi
-
-if (( GRML_WARN_SKEL != 0 )) ; then
-
-function grml_warn_skel_main() {
- printf '
-Dear user,
-
-You updated grml'\''s zshrc which brings a major change.
-The configuration is kept only in one file, being the global zshrc.
-In the past, the configuration was split in two files, with the
-second file being the .zshrc file from /etc/skel.
-
-If you have a .zshrc file in your home directory that originally
-came from the skel directory, please remove it. This is also the case
-if you followed earlier instructions from the grml-zsh-refcard or
-from on non-grml systems.
-
-Please see the current grml-zsh-refcard (available at
-) for updated installation information. In short,
-you don'\''t want a .zshrc.global file. Install the global zshrc to
-~/.zshrc and be done.
-
-If you need changes to the configuration, use ~/.zshrc.pre and
-~/.zshrc.local.
-
-'
-}
-
-function grml_warn_skel_remove() {
- printf 'To remove this warning execute '\''grml_do_not_warn_skel'\''.\n\n'
-}
-
-function grml_do_not_warn_skel() {
- printf '# Do not warn about old skel dot-files anymore\n' >>! ~/.zshrc.pre
- printf 'GRML_WARN_SKEL=0\n' >>! ~/.zshrc.pre
-}
-
-# let's try to guess how the user uses us.
-if is-at-least 4.3.7 ; then
- # funcsourcetrace requires at least version 4.3.7 of zsh.
- GRML_SRC_FILE="${${funcsourcetrace[1]}%:*}"
-
- grml_warn_skel_main
- case ${GRML_SRC_FILE} in
- (${HOME}/.zshrc.global)
- grml_warn_skel_remove
- printf '\nIt looks like you copied the grml zshrc to '\''~/.zshrc.global'\''.\n'
- printf 'Nowadays you just copy the global zshrc to '\''~/.zshrc'\'' to use\n'
- printf 'it on a non-grml-system.\n'
- ;;
- (${HOME}/.zshrc)
- printf '\nIt looks like you copied the grml zshrc to '\''~/.zshrc'\''.\n'
- printf 'We'\''ll disable this warning automatically for later sessions.\n'
- grml_do_not_warn_skel
- ;;
- (*)
- grml_do_not_warn_skel
- ;;
- esac
-else
- grml_warn_skel_main
- grml_warn_skel_remove
-fi
-
-unfunction grml_warn_skel_remove grml_warn_skel_main
-
-fi # GRML_WARN_SKEL
-
# }}}
# utility functions {{{
@@ -337,12 +301,13 @@ fi # GRML_WARN_SKEL
# -c only checks for external commands
# -g does the usual tests and also checks for global aliases
check_com() {
+ emulate -L zsh
local -i comonly gatoo
- if [[ ${1} == '-c' ]] ; then
+ if [[ $1 == '-c' ]] ; then
(( comonly = 1 ))
shift
- elif [[ ${1} == '-g' ]] ; then
+ elif [[ $1 == '-g' ]] ; then
(( gatoo = 1 ))
else
(( comonly = 0 ))
@@ -377,9 +342,10 @@ check_com() {
# creates an alias and precedes the command with
# sudo if $EUID is not zero.
salias() {
+ emulate -L zsh
local only=0 ; local multi=0
- while [[ ${1} == -* ]] ; do
- case ${1} in
+ while [[ $1 == -* ]] ; do
+ case $1 in
(-o) only=1 ;;
(-a) multi=1 ;;
(--) shift ; break ;;
@@ -391,7 +357,7 @@ salias() {
printf ' -o only sets an alias if a preceding sudo would be needed.\n'
return 0
;;
- (*) printf "unkown option: '%s'\n" "${1}" ; return 1 ;;
+ (*) printf "unkown option: '%s'\n" "$1" ; return 1 ;;
esac
shift
done
@@ -418,9 +384,10 @@ salias() {
# Note that foo is no typo; $foo would be wrong here!
if ! is42 ; then
uprint () {
+ emulate -L zsh
local -a u
local w
- local parameter=${1}
+ local parameter=$1
if [[ -z ${parameter} ]] ; then
printf 'usage: uprint \n'
@@ -428,22 +395,23 @@ if ! is42 ; then
fi
for w in ${(P)parameter} ; do
- [[ -z ${(M)u:#${w}} ]] && u=( ${u} ${w} )
+ [[ -z ${(M)u:#$w} ]] && u=( $u $w )
done
- builtin print -l ${u}
+ builtin print -l $u
}
fi
# Check if we can read given files and source those we can.
xsource() {
+ emulate -L zsh
if (( ${#argv} < 1 )) ; then
printf 'usage: xsource FILE(s)...\n' >&2
return 1
fi
while (( ${#argv} > 0 )) ; do
- [[ -r ${1} ]] && source ${1}
+ [[ -r $1 ]] && source $1
shift
done
return 0
@@ -451,18 +419,20 @@ xsource() {
# Check if we can read a given file and 'cat(1)' it.
xcat() {
+ emulate -L zsh
if (( ${#argv} != 1 )) ; then
printf 'usage: xcat FILE\n' >&2
return 1
fi
- [[ -r ${1} ]] && cat ${1}
+ [[ -r $1 ]] && cat $1
return 0
}
# Remove these functions again, they are of use only in these
# setup files. This should be called at the end of .zshrc.
xunfunction() {
+ emulate -L zsh
local -a funcs
funcs=(salias xcat xsource xunfunction zrcautoload)
@@ -497,32 +467,6 @@ xsource "/etc/sysconfig/keyboard"
TZ=$(xcat /etc/timezone)
# }}}
-# check for potentially old files in 'completion.d' {{{
-setopt extendedglob
-xof=(/etc/zsh/completion.d/*~/etc/zsh/completion.d/_*(N))
-if (( ${#xof} > 0 )) ; then
- printf '\n -!- INFORMATION\n\n'
- printf ' -!- %s file(s) not starting with an underscore (_) found in\n' ${#xof}
- printf ' -!- /etc/zsh/completion.d/.\n\n'
- printf ' -!- While this has been the case in old versions of grml-etc-core,\n'
- printf ' -!- recent versions of the grml-zsh-setup have all these files rewritten\n'
- printf ' -!- and renamed. Furthermore, the grml-zsh-setup will *only* add files\n'
- printf ' -!- named _* to that directory.\n\n'
- printf ' -!- If you added functions to completion.d yourself, please consider\n'
- printf ' -!- moving them to /etc/zsh/functions.d/. Files in that directory, not\n'
- printf ' -!- starting with an underscore are marked for automatic loading\n'
- printf ' -!- by default (so that is quite convenient).\n\n'
- printf ' -!- If there are files *not* starting with an underscore from an older\n'
- printf ' -!- grml-etc-core in completion.d, you may safely remove them.\n\n'
- printf ' -!- Delete the files for example via running:\n\n'
- printf " rm ${xof}\n\n"
- printf ' -!- Note, that this message will *not* go away, unless you yourself\n'
- printf ' -!- resolve the situation manually.\n\n'
- BROKEN_COMPLETION_DIR=1
-fi
-unset xof
-# }}}
-
# {{{ set some variables
if check_com -c vim ; then
#v#
@@ -555,22 +499,16 @@ fi
# do Fink setup on darwin
isdarwin && xsource /sw/bin/init.sh
-# completion functions go to /etc/zsh/completion.d
-# function files may be put into /etc/zsh/functions.d, from where they
-# will be automatically autoloaded.
-if [[ -n "$BROKEN_COMPLETION_DIR" ]] ; then
- print 'Warning: not setting completion directories because broken files have been found.' >&2
-else
- [[ -d /etc/zsh/completion.d ]] && fpath=( $fpath /etc/zsh/completion.d )
- if [[ -d /etc/zsh/functions.d ]] ; then
- fdir='/etc/zsh/functions.d'
- fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
+# load our function and completion directories
+for fdir in /usr/share/grml/zsh/completion /usr/share/grml/functions; do
+ fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
+ if [[ ${fpath} == '/usr/share/grml/zsh/functions' ]] ; then
for func in ${fdir}/**/[^_]*[^~](N.) ; do
zrcautoload ${func:t}
done
- unset fdir
fi
-fi
+done
+unset fdir func
# support colors in less
export LESS_TERMCAP_mb=$'\E[01;31m'
@@ -643,19 +581,6 @@ zle -N insert-unicode-char
#k# Insert Unicode character
bindkey '^Xi' insert-unicode-char
-# just type 'cd ...' to get 'cd ../..'
-# rationalise-dot() {
-# if [[ $LBUFFER == *.. ]] ; then
-# LBUFFER+=/..
-# else
-# LBUFFER+=.
-# fi
-# }
-# zle -N rationalise-dot
-# bindkey . rationalise-dot
-
-# bindkey '\eq' push-line-or-edit
-
## toggle the ,. abbreviation feature on/off
# NOABBREVIATION: default abbreviation-state
# 0 - enabled (default)
@@ -868,6 +793,8 @@ abk=(
)
globalias() {
+ emulate -L zsh
+ setopt extendedglob
local MATCH
if (( NOABBREVIATION > 0 )) ; then
@@ -899,7 +826,9 @@ alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magi
#m# k ESC-h Call \kbd{run-help} for the 1st word on the command line
alias run-help >&/dev/null && unalias run-help
-zrcautoload run-help # use via 'esc-h'
+for rh in run-help{,-git,-svk,-svn}; do
+ zrcautoload $rh
+done; unset rh
# completion system
if zrcautoload compinit ; then
@@ -1002,42 +931,6 @@ bindkey '^x1' jump_after_first_word
# }}}
-# {{{ set some important options
-# Please update these tags, if you change the umask settings below.
-#o# r_umask 002
-#o# r_umaskstr rwxrwxr-x
-#o# umask 022
-#o# umaskstr rwxr-xr-x
-(( EUID != 0 )) && umask 002 || umask 022
-
-# history:
-setopt append_history # append history list to the history file (important for multiple parallel zsh sessions!)
-is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
-setopt extended_history # save each command's beginning timestamp and the duration to the history file
-is4 && setopt histignorealldups # If a new command line being added to the history
- # list duplicates an older one, the older command is removed from the list
-setopt histignorespace # remove command lines from the history list when
- # the first character on the line is a space
-setopt auto_cd # if a command is issued that can't be executed as a normal command,
- # and the command is the name of a directory, perform the cd command to that directory
-setopt extended_glob # in order to use #, ~ and ^ for filename generation
- # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
- # -> searches for word not in compressed files
- # don't forget to quote '^', '~' and '#'!
-setopt longlistjobs # display PID when suspending processes as well
-setopt notify # report the status of backgrounds jobs immediately
-setopt hash_list_all # Whenever a command completion is attempted, make sure \
- # the entire command path is hashed first.
-setopt completeinword # not just at the end
-setopt nohup # and don't kill them, either
-setopt auto_pushd # make cd push the old directory onto the directory stack.
-setopt nonomatch # try to avoid the 'zsh: no matches found...'
-setopt nobeep # avoid "beep"ing
-setopt pushd_ignore_dups # don't push the same dir twice.
-setopt noglobdots # * shouldn't match dotfiles. ever.
-
-# }}}
-
# {{{ history
ZSHDIR=$HOME/.zsh
@@ -1061,10 +954,12 @@ if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
fi
chpwd() {
+ local -ax my_stack
+ my_stack=( ${PWD} ${dirstack} )
if is42 ; then
- builtin print -l ${(u)dirstack} >! ${DIRSTACKFILE}
+ builtin print -l ${(u)my_stack} >! ${DIRSTACKFILE}
else
- uprint dirstack >! ${DIRSTACKFILE}
+ uprint my_stack >! ${DIRSTACKFILE}
fi
}
@@ -2054,7 +1949,7 @@ fi
(( ${COMMAND_NOT_FOUND} == 1 )) &&
function command_not_found_handler() {
- setopt localoptions no_sh_wordsplit
+ emulate -L zsh
if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then
${GRML_ZSH_CNF_HANDLER} $1
fi
@@ -2151,7 +2046,7 @@ else
# set variable identifying the chroot you work in (used in the prompt below)
if [[ $GRMLPROMPT -gt 0 ]] ; then
PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
-${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
+${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_0_}'"%# "
else
# This assembles the primary prompt string
if (( EUID != 0 )); then
@@ -2395,7 +2290,8 @@ if [[ -r /etc/debian_version ]] ; then
# debian upgrade
#f3# Execute \kbd{apt-get update \&\& }\\&\quad \kbd{apt-get dist-upgrade}
upgrade() {
- if [[ -z "$1" ]] ; then
+ emulate -L zsh
+ if [[ -z $1 ]] ; then
$SUDO apt-get update
$SUDO apt-get -u upgrade
else
@@ -2710,26 +2606,12 @@ setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
#f1# Reload an autoloadable function
freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
-
-#f1# Reload zsh setup
-reload() {
- if [[ "$#*" -eq 0 ]] ; then
- [[ -r ~/.zshrc ]] && . ~/.zshrc
- else
- local fn
- for fn in "$@"; do
- unfunction $fn
- autoload -U $fn
- done
- fi
-}
-compdef _functions reload freload
+compdef _functions freload
#f1# List symlinks in detail (more detailed version of 'readlink -f' and 'whence -s')
sll() {
[[ -z "$1" ]] && printf 'Usage: %s \n' "$0" && return 1
- for i in "$@" ; do
- file=$i
+ for file in "$@" ; do
while [[ -h "$file" ]] ; do
ls -l $file
file=$(readlink "$file")
@@ -2746,20 +2628,24 @@ else
manzsh() { /usr/bin/man zshall | vim -c "se ft=man| se hlsearch" +/"$1" - ; }
fi
+# TODO: Is it supported to use pager settings like this?
+# PAGER='less -Mr' - If so, the use of $PAGER here needs fixing
+# with respect to wordsplitting. (ie. ${=PAGER})
if check_com -c $PAGER ; then
#f1# View Debian's changelog of a given package
dchange() {
- if [[ -r /usr/share/doc/${1}/changelog.Debian.gz ]] ; then
- $PAGER /usr/share/doc/${1}/changelog.Debian.gz
- elif [[ -r /usr/share/doc/${1}/changelog.gz ]] ; then
- $PAGER /usr/share/doc/${1}/changelog.gz
+ emulate -L zsh
+ if [[ -r /usr/share/doc/$1/changelog.Debian.gz ]] ; then
+ $PAGER /usr/share/doc/$1/changelog.Debian.gz
+ elif [[ -r /usr/share/doc/$1/changelog.gz ]] ; then
+ $PAGER /usr/share/doc/$1/changelog.gz
else
if check_com -c aptitude ; then
echo "No changelog for package $1 found, using aptitude to retrieve it."
if isgrml ; then
- aptitude -t unstable changelog ${1}
+ aptitude -t unstable changelog $1
else
- aptitude changelog ${1}
+ aptitude changelog $1
fi
else
echo "No changelog for package $1 found, sorry."
@@ -2772,11 +2658,12 @@ if check_com -c $PAGER ; then
#f1# View Debian's NEWS of a given package
dnews() {
- if [[ -r /usr/share/doc/${1}/NEWS.Debian.gz ]] ; then
- $PAGER /usr/share/doc/${1}/NEWS.Debian.gz
+ emulate -L zsh
+ if [[ -r /usr/share/doc/$1/NEWS.Debian.gz ]] ; then
+ $PAGER /usr/share/doc/$1/NEWS.Debian.gz
else
- if [[ -r /usr/share/doc/${1}/NEWS.gz ]] ; then
- $PAGER /usr/share/doc/${1}/NEWS.gz
+ if [[ -r /usr/share/doc/$1/NEWS.gz ]] ; then
+ $PAGER /usr/share/doc/$1/NEWS.gz
else
echo "No NEWS file for package $1 found, sorry."
return 1
@@ -2788,8 +2675,9 @@ if check_com -c $PAGER ; then
#f1# View upstream's changelog of a given package
uchange() {
- if [[ -r /usr/share/doc/${1}/changelog.gz ]] ; then
- $PAGER /usr/share/doc/${1}/changelog.gz
+ emulate -L zsh
+ if [[ -r /usr/share/doc/$1/changelog.gz ]] ; then
+ $PAGER /usr/share/doc/$1/changelog.gz
else
echo "No changelog for package $1 found, sorry."
return 1
@@ -2897,6 +2785,7 @@ check_com -c qma && alias ?='qma zshall'
# grep for running process, like: 'any vim'
any() {
+ emulate -L zsh
if [[ -z "$1" ]] ; then
echo "any - grep for process(es) by keyword" >&2
echo "Usage: any " >&2 ; return 1
@@ -2920,6 +2809,7 @@ deswap() {
# print hex value of a number
hex() {
+ emulate -L zsh
[[ -n "$1" ]] && printf "%x\n" $1 || { print 'Usage: hex ' ; return 1 }
}
@@ -2961,6 +2851,7 @@ uiae() {
# set up an ipv6 tunnel
ipv6-tunnel() {
+ emulate -L zsh
case $1 in
start)
if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then
@@ -3156,20 +3047,6 @@ alias CO="./configure"
#a2# Execute \kbd{./configure --help}
alias CH="./configure --help"
-# arch/tla stuff
-if check_com -c tla ; then
- #a2# Execute \kbd{tla what-changed --diffs | less}
- alias tdi='tla what-changed --diffs | less'
- #a2# Execute \kbd{tla-buildpackage}
- alias tbp='tla-buildpackage'
- #a2# Execute \kbd{tla archive-mirror}
- alias tmi='tla archive-mirror'
- #a2# Execute \kbd{tla commit}
- alias tco='tla commit'
- #a2# Execute \kbd{tla star-merge}
- alias tme='tla star-merge'
-fi
-
# listing stuff
#a2# Execute \kbd{ls -lSrah}
alias dir="ls -lSrah"
@@ -3180,9 +3057,9 @@ alias lsa='ls -a .*(.)' # only show dot-files
#a2# Only files with setgid/setuid/sticky flag
alias lss='ls -l *(s,S,t)' # only files with setgid/setuid/sticky flag
#a2# Only show 1st ten symlinks
-alias lsl='ls -l *(@[1,10])' # only symlinks
+alias lsl='ls -l *(@)' # only symlinks
#a2# Display only executables
-alias lsx='ls -l *(*[1,10])' # only executables
+alias lsx='ls -l *(*)' # only executables
#a2# Display world-{readable,writable,executable} files
alias lsw='ls -ld *(R,W,X.^ND/)' # world-{readable,writable,executable} files
#a2# Display the ten biggest files
@@ -3212,8 +3089,6 @@ alias r-x='chmod 755'
#a2# Execute \kbd{mkdir -o}
alias md='mkdir -p'
-check_com -c ipython && alias ips='ipython -p sh'
-
# console stuff
#a2# Execute \kbd{mplayer -vo fbdev}
alias cmplayer='mplayer -vo fbdev'
@@ -3232,12 +3107,6 @@ check_com -c python && alias http="python -m SimpleHTTPServer"
# Use 'g' instead of 'git':
check_com g || alias g='git'
-# check whether Debian's package management (dpkg) is running
-if check_com salias ; then
- #a2# Check whether a dpkg instance is currently running
- salias check_dpkg_running="dpkg_running"
-fi
-
# work around non utf8 capable software in utf environment via $LANG and luit
if check_com isutfenv && check_com luit ; then
if check_com -c mrxvt ; then
@@ -3264,7 +3133,8 @@ fi
agoogle() { ${=BROWSER} "http://groups.google.com/groups?as_uauthors=$*" ; }
#f4# Search Debian Bug Tracking System
debbug() {
- setopt localoptions extendedglob
+ emulate -L zsh
+ setopt extendedglob
if [[ $# -eq 1 ]]; then
case "$1" in
([0-9]##)
@@ -3283,90 +3153,168 @@ debbug() {
fi
}
#f4# Search Debian Bug Tracking System in mbox format
-debbugm() { bts show --mbox $1 } # provide bugnummer as "$1"
+debbugm() {
+ emulate -L zsh
+ bts show --mbox $1
+}
#f4# Search DMOZ
-dmoz() { ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_} }
+dmoz() {
+ emulate -L zsh
+ ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_}
+}
#f4# Search German Wiktionary
-dwicti() { ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_} }
+dwicti() {
+ emulate -L zsh
+ ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_}
+}
#f4# Search English Wiktionary
-ewicti() { ${=BROWSER} http://en.wiktionary.org/wiki/${(C)1// /_} }
+ewicti() {
+ emulate -L zsh
+ ${=BROWSER} http://en.wiktionary.org/wiki/${(C)1// /_}
+}
#f4# Search Google Groups
-ggogle() { ${=BROWSER} "http://groups.google.com/groups?q=$*" }
+ggogle() {
+ emulate -L zsh
+ ${=BROWSER} "http://groups.google.com/groups?q=$*"
+}
#f4# Search Google
-google() { ${=BROWSER} "http://www.google.com/search?&num=100&q=$*" }
+google() {
+ emulate -L zsh
+ ${=BROWSER} "http://www.google.com/search?&num=100&q=$*"
+}
#f4# Search Google Groups for MsgID
-mggogle() { ${=BROWSER} "http://groups.google.com/groups?selm=$*" }
+mggogle() {
+ emulate -L zsh
+ ${=BROWSER} "http://groups.google.com/groups?selm=$*"
+}
#f4# Search Netcraft
-netcraft(){ ${=BROWSER} "http://toolbar.netcraft.com/site_report?url=$1" }
+netcraft(){
+ emulate -L zsh
+ ${=BROWSER} "http://toolbar.netcraft.com/site_report?url=$1"
+}
#f4# Use German Wikipedia's full text search
-swiki() { ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1} }
+swiki() {
+ emulate -L zsh
+ ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1}
+}
#f4# search \kbd{dict.leo.org}
-oleo() { ${=BROWSER} "http://dict.leo.org/?search=$*" }
+oleo() {
+ emulate -L zsh
+ ${=BROWSER} "http://dict.leo.org/?search=$*"
+}
#f4# Search German Wikipedia
-wikide() { ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}" }
+wikide() {
+ emulate -L zsh
+ ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}"
+}
#f4# Search English Wikipedia
-wikien() { ${=BROWSER} http://en.wikipedia.org/wiki/"${(C)*}" }
+wikien() {
+ emulate -L zsh
+ ${=BROWSER} http://en.wikipedia.org/wiki/"${(C)*}"
+}
#f4# Search official debs
-wodeb() { ${=BROWSER} "http://packages.debian.org/search?keywords=$1&searchon=contents&suite=${2:=unstable}§ion=all" }
+wodeb() {
+ emulate -L zsh
+ ${=BROWSER} "http://packages.debian.org/search?keywords=$1&searchon=contents&suite=${2:=unstable}§ion=all"
+}
#m# f4 gex() Exact search via Google
-check_com google && gex () { google "\"[ $1]\" $*" } # exact search at google
+check_com google && gex () {
+ google "\"[ $1]\" $*"
+}
# misc
#f5# Backup \kbd{file {\rm to} file\_timestamp}
-bk() { cp -b ${1} ${1}_`date --iso-8601=m` }
+bk() {
+ emulate -L zsh
+ cp -b $1 $1_`date --iso-8601=m`
+}
#f5# Copied diff
-cdiff() { diff -crd "$*" | egrep -v "^Only in |^Binary files " }
+cdiff() {
+ emulate -L zsh
+ diff -crd "$*" | egrep -v "^Only in |^Binary files "
+}
#f5# cd to directoy and list files
-cl() { cd $1 && ls -a } # cd && ls
+cl() {
+ emulate -L zsh
+ cd $1 && ls -a
+}
#f5# Cvs add
-cvsa() { cvs add $* && cvs com -m 'initial checkin' $* }
+cvsa() {
+ emulate -L zsh
+ cvs add $* && cvs com -m 'initial checkin' $*
+}
#f5# Cvs diff
-cvsd() { cvs diff -N $* |& $PAGER }
+cvsd() {
+ emulate -L zsh
+ cvs diff -N $* |& $PAGER
+}
#f5# Cvs log
-cvsl() { cvs log $* |& $PAGER }
+cvsl() {
+ emulate -L zsh
+ cvs log $* |& $PAGER
+}
#f5# Cvs update
-cvsq() { cvs -nq update }
+cvsq() {
+ emulate -L zsh
+ cvs -nq update
+}
#f5# Rcs2log
-cvsr() { rcs2log $* | $PAGER }
+cvsr() {
+ emulate -L zsh
+ rcs2log $* | $PAGER
+}
#f5# Cvs status
-cvss() { cvs status -v $* }
+cvss() {
+ emulate -L zsh
+ cvs status -v $*
+}
#f5# Disassemble source files using gcc and as
-disassemble(){ gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null }
+disassemble(){
+ emulate -L zsh
+ gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null
+}
#f5# Firefox remote control - open given URL
-fir() { firefox -a firefox -remote "openURL($1)" }
+fir() {
+ firefox -a firefox -remote "openURL($1)"
+}
#f5# Create Directoy and \kbd{cd} to it
-mcd() { mkdir -p "$@"; cd "$@" } # mkdir && cd
+mcd() {
+ mkdir -p "$@" && cd "$@"
+}
#f5# Unified diff to timestamped outputfile
-mdiff() { diff -udrP "$1" "$2" > diff.`date "+%Y-%m-%d"`."$1" }
+mdiff() {
+ diff -udrP "$1" "$2" > diff.`date "+%Y-%m-%d"`."$1"
+}
#f5# Memory overview
-memusage(){ ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc }
-#f5# Show contents of tar file
-shtar() { gunzip -c $1 | tar -tf - -- | $PAGER }
-#f5# Show contents of tgz file
-shtgz() { tar -ztf $1 | $PAGER }
+memusage() {
+ ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc
+}
+#f5# Show contents of gzipped tar file
+shtar() {
+ emulate -L zsh
+ gunzip -c $1 | tar -tf - -- | $PAGER
+}
#f5# Show contents of zip file
-shzip() { unzip -l $1 | $PAGER }
-#f5# Greps signature from file
-sig() { agrep -d '^-- $' "$*" ~/.Signature }
+shzip() {
+ emulate -L zsh
+ unzip -l $1 | $PAGER
+}
#f5# Unified diff
-udiff() { diff -urd $* | egrep -v "^Only in |^Binary files " }
+udiff() {
+ emulate -L zsh
+ diff -urd $* | egrep -v "^Only in |^Binary files "
+}
#f5# (Mis)use \kbd{vim} as \kbd{less}
-viless() { vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}" }
-
-# download video from youtube
-ytdl() {
- if ! [[ -n "$2" ]] ; then
- print "Usage: ydtl http://youtube.com/watch?v=.... outputfile.flv">&2
- return 1
- else
- wget -O${2} "http://youtube.com/get_video?"${${${"$(wget -o/dev/null -O- "${1}" | grep -e watch_fullscreen)"}##*watch_fullscreen\?}%%\&fs=*}
- fi
+viless() {
+ emulate -L zsh
+ vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}"
}
# Function Usage: uopen $URL/$file
#f5# Download a file and display it locally
uopen() {
+ emulate -L zsh
if ! [[ -n "$1" ]] ; then
print "Usage: uopen \$URL/\$file">&2
return 1
@@ -3380,7 +3328,10 @@ uopen() {
# Function Usage: doc packagename
#f5# \kbd{cd} to /usr/share/doc/\textit{package}
-doc() { cd /usr/share/doc/$1 && ls }
+doc() {
+ emulate -L zsh
+ cd /usr/share/doc/$1 && ls
+}
_doc() { _files -W /usr/share/doc -/ }
check_com compdef && compdef _doc doc
@@ -3399,12 +3350,13 @@ limg() {
if [[ $#images -eq 0 ]] ; then
print "No image files found"
else
- ls "$@" "$images[@]"
+ ls "$images[@]"
fi
}
#f5# Create PDF file from source code
makereadable() {
+ emulate -L zsh
output=$1
shift
a2ps --medium A4dj -E -o $output $*
@@ -3415,16 +3367,23 @@ makereadable() {
# regcheck '\s\d\.\d{3}\.\d{3} Euro' ' 1.000.000 Euro'
#f5# Checks whether a regex matches or not.\\&\quad Example: \kbd{regcheck '.\{3\} EUR' '500 EUR'}
regcheck() {
+ emulate -L zsh
zmodload -i zsh/pcre
pcre_compile $1 && \
pcre_match $2 && echo "regex matches" || echo "regex does not match"
}
#f5# List files which have been modified within the last {\it n} days
-new() { print -l *(m-$1) }
+new() {
+ emulate -L zsh
+ print -l *(m-$1)
+}
#f5# Grep in history
-greph() { history 0 | grep $1 }
+greph() {
+ emulate -L zsh
+ history 0 | grep $1
+}
# use colors when GNU grep with color-support
#a2# Execute \kbd{grep -{}-color=auto}
(grep --help 2>/dev/null |grep -- --color) >/dev/null && alias grep='grep --color=auto'
@@ -3480,7 +3439,7 @@ purge() {
rm ${FILES}
echo ">> $PWD purged, $NBFILES files removed"
else
- echo "Ok. .. than not.."
+ echo "Ok. .. then not.."
fi
fi
}
@@ -3496,6 +3455,7 @@ purge() {
# /usr/local/lib/words/en-de.ISO-8859-1.vok > ~/.translate/de-en.ISO-8859-1.vok
#f5# Translates a word
trans() {
+ emulate -L zsh
case "$1" in
-[dD]*)
translate -l de-en $2
@@ -3512,6 +3472,7 @@ trans() {
#f5# List all occurrences of programm in current PATH
plap() {
+ emulate -L zsh
if [[ $# = 0 ]] ; then
echo "Usage: $0 program"
echo "Example: $0 zsh"
@@ -3540,11 +3501,15 @@ selhist() {
# Use vim to convert plaintext to HTML
#f5# Transform files to html with highlighting
-2html() { vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null }
+2html() {
+ emulate -L zsh
+ vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null
+}
# Usage: simple-extract
#f5# Smart archive extractor
simple-extract () {
+ emulate -L zsh
if [[ -f $1 ]] ; then
case $1 in
*.tar.bz2) bzip2 -v -d $1 ;;
@@ -3569,6 +3534,7 @@ simple-extract () {
# Usage: smartcompress ()
#f5# Smart archive creator
smartcompress() {
+ emulate -L zsh
if [[ -n $2 ]] ; then
case $2 in
tgz | tar.gz) tar -zcvf$1.$2 $1 ;;
@@ -3589,6 +3555,7 @@ smartcompress() {
# Usage: show-archive
#f5# List an archive's content
show-archive() {
+ emulate -L zsh
if [[ -f $1 ]] ; then
case $1 in
*.tar.gz) gunzip -c $1 | tar -tf - -- ;;
@@ -3606,11 +3573,15 @@ show-archive() {
# It's shameless stolen from
#f5# Use \kbd{vim} as your manpage reader
-vman() { man $* | col -b | view -c 'set ft=man nomod nolist' - }
+vman() {
+ emulate -L zsh
+ man $* | col -b | view -c 'set ft=man nomod nolist' -
+}
# function readme() { $PAGER -- (#ia3)readme* }
#f5# View all README-like files in current directory in pager
readme() {
+ emulate -L zsh
local files
files=(./(#i)*(read*me|lue*m(in|)ut)*(ND))
if (($#files)) ; then
@@ -3650,6 +3621,7 @@ findsuid() {
print 'Finished'
}
+# TODO: So, this is the third incarnation of this function!?
#f5# Reload given functions
refunc() {
for func in $argv ; do
@@ -3662,8 +3634,9 @@ refunc() {
# stolen and modified from Sven's zshrc.forall
#f5# Report diskusage of a directory
dirspace() {
+ emulate -L zsh
if [[ -n "$1" ]] ; then
- for dir in $* ; do
+ for dir in "$@" ; do
if [[ -d "$dir" ]] ; then
( cd $dir; echo "-<$dir>"; du -shx .; echo);
else
@@ -3684,7 +3657,7 @@ dirspace() {
# % slow_print `cat /etc/passwd`
#f5# Slowly print out parameters
slow_print() {
- for argument in "${@}" ; do
+ for argument in "$@" ; do
for ((i = 1; i <= ${#1} ;i++)) ; do
print -n "${argument[i]}"
sleep 0.08
@@ -3696,14 +3669,14 @@ slow_print() {
#f5# Show some status info
status() {
- print ""
- print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")""
+ print
+ print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")
print "Shell.: Zsh $ZSH_VERSION (PID = $$, $SHLVL nests)"
- print "Term..: $TTY ($TERM), ${BAUD:+$BAUD bauds, }$COLUMNS x $LINES cars"
+ print "Term..: $TTY ($TERM), ${BAUD:+$BAUD bauds, }$COLUMNS x $LINES chars"
print "Login.: $LOGNAME (UID = $EUID) on $HOST"
print "System: $(cat /etc/[A-Za-z]*[_-][rv]e[lr]*)"
print "Uptime:$(uptime)"
- print ""
+ print
}
# Rip an audio CD
@@ -3744,6 +3717,7 @@ audioburn() {
#f5# Make an audio CD from all mp3 files
mkaudiocd() {
# TODO: do the renaming more zshish, possibly with zmv()
+ emulate -L zsh
cd ~/ripps
for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done
for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done
@@ -3754,6 +3728,7 @@ mkaudiocd() {
#f5# Create an ISO image. You are prompted for\\&\quad volume name, filename and directory
mkiso() {
+ emulate -L zsh
echo " * Volume name "
read volume
echo " * ISO Name (ie. tmp.iso)"
@@ -3794,19 +3769,21 @@ allulimit() {
# ogg2mp3 with bitrate of 192
ogg2mp3_192() {
- oggdec -o - ${1} | lame -b 192 - ${1:r}.mp3
+ emulate -L zsh
+ oggdec -o - $1 | lame -b 192 - ${1:r}.mp3
}
#f5# RFC 2396 URL encoding in Z-Shell
urlencode() {
- setopt localoptions extendedglob
+ emulate -L zsh
+ setopt extendedglob
input=( ${(s::)1} )
print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%${(l:2::0:)$(([##16]#match))}}
}
#f5# Install x-lite (VoIP software)
getxlite() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
[[ -d ~/tmp ]] || mkdir ~/tmp
cd ~/tmp
@@ -3825,7 +3802,7 @@ getxlite() {
#f5# Install skype
getskype() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
echo "Downloading debian package of skype."
echo "Notice: If you want to use a more recent skype version run 'getskypebeta'."
@@ -3835,7 +3812,7 @@ getskype() {
#f5# Install beta-version of skype
getskypebeta() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
echo "Downloading debian package of skype (beta version)."
wget http://www.skype.com/go/getskype-linux-beta-deb
@@ -3844,7 +3821,7 @@ getskypebeta() {
#f5# Install gizmo (VoIP software)
getgizmo() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
echo "libgtk2.0-0, gconf2, libstdc++6, libasound2 and zlib1g have to be available. Installing."
$SUDO apt-get update
@@ -3855,7 +3832,7 @@ getgizmo() {
#f5# Get and run AIR (Automated Image and Restore)
getair() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
[[ -w . ]] || { echo 'Error: you do not have write permissions in this directory. Exiting.' ; return 1 }
local VER='1.2.8'
@@ -3868,6 +3845,7 @@ getair() {
#f5# Get specific git commitdiff
git-get-diff() {
+ emulate -L zsh
if [[ -z $GITTREE ]] ; then
GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
fi
@@ -3880,6 +3858,7 @@ git-get-diff() {
#f5# Get specific git commit
git-get-commit() {
+ emulate -L zsh
if [[ -z $GITTREE ]] ; then
GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
fi
@@ -3892,6 +3871,7 @@ git-get-commit() {
#f5# Get specific git diff
git-get-plaindiff () {
+ emulate -L zsh
if [[ -z $GITTREE ]] ; then
GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
fi
@@ -3910,13 +3890,14 @@ git-get-plaindiff () {
# http://strcat.de/blog/index.php?/archives/335-Software-sauber-deinstallieren...html
#f5# Log 'make install' output
mmake() {
+ emulate -L zsh
[[ ! -d ~/.errorlogs ]] && mkdir ~/.errorlogs
make -n install > ~/.errorlogs/${PWD##*/}-makelog
}
#f5# Indent source code
smart-indent() {
- indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs $*
+ indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs "$@"
}
# highlight important stuff in diff output, usage example: hg diff | hidiff
@@ -3927,6 +3908,7 @@ check_com -c histring && \
# rename pictures based on information found in exif headers
#f5# Rename pictures based on information found in exif headers
exirename() {
+ emulate -L zsh
if [[ $# -lt 1 ]] ; then
echo 'Usage: jpgrename $FILES' >& 2
return 1
@@ -3945,6 +3927,7 @@ exirename() {
# open file in vim and jump to line
# http://www.downgra.de/archives/2007/05/08/T19_21_11/
j2v() {
+ emulate -L zsh
local -a params
params=(${*//(#m):[0-9]*:/\\n+${MATCH//:/}}) # replace ':23:' to '\n+23'
params=(${(s|\n|)${(j|\n|)params}}) # join array using '\n', then split on all '\n'
@@ -3953,6 +3936,7 @@ j2v() {
# get_ic() - queries imap servers for capabilities; real simple. no imaps
ic_get() {
+ emulate -L zsh
local port
if [[ ! -z $1 ]] ; then
port=${2:-143}
@@ -3965,6 +3949,7 @@ ic_get() {
# creates a Maildir/ with its {new,cur,tmp} subdirs
mkmaildir() {
+ emulate -L zsh
local root subdir
root=${MAILDIR_ROOT:-${HOME}/Mail}
if [[ -z ${1} ]] ; then print "Usage:\n $0 " ; return 1 ; fi
@@ -3974,7 +3959,8 @@ mkmaildir() {
#f5# Change the xterm title from within GNU-screen
xtrename() {
- if [[ ${1} != "-f" ]] ; then
+ emulate -L zsh
+ if [[ $1 != "-f" ]] ; then
if [[ -z ${DISPLAY} ]] ; then
printf 'xtrename only makes sense in X11.\n'
return 1
@@ -3982,7 +3968,7 @@ xtrename() {
else
shift
fi
- if [[ -z ${1} ]] ; then
+ if [[ -z $1 ]] ; then
printf 'usage: xtrename [-f] "title for xterm"\n'
printf ' renames the title of xterm from _within_ screen.\n'
printf ' also works without screen.\n'
@@ -3997,6 +3983,7 @@ xtrename() {
# http://ft.bewatermyfriend.org/comp/data/zsh/zfunct.html
if check_com -c highlight ; then
function hl() {
+ emulate -L zsh
local theme lang
theme=${HL_THEME:-""}
case ${1} in
@@ -4054,11 +4041,12 @@ fi
# Create small urls via http://tinyurl.com using wget(1).
function zurl() {
- [[ -z ${1} ]] && { print "USAGE: zurl " ; return 1 }
+ emulate -L zsh
+ [[ -z $1 ]] && { print "USAGE: zurl " ; return 1 }
local PN url tiny grabber search result preview
- PN=${0}
- url=${1}
+ PN=$0
+ url=$1
# Check existence of given URL with the help of ping(1).
# N.B. ping(1) only works without an eventual given protocol.
ping -c 1 ${${url#(ftp|http)://}%%/*} >& /dev/null || \
@@ -4090,6 +4078,7 @@ function zurl() {
#f2# Print a specific line of file(s).
linenr () {
# {{{
+ emulate -L zsh
if [ $# -lt 2 ] ; then
print "Usage: linenr [,] " ; return 1
elif [ $# -eq 2 ] ; then
@@ -4114,6 +4103,7 @@ linenr () {
#f2# Find history events by search pattern and list them by date.
whatwhen() {
# {{{
+ emulate -L zsh
local usage help ident format_l format_s first_char remain first last
usage='USAGE: whatwhen [options] '
help='Use' \`'whatwhen -h'\'' for further explanations.'
@@ -4162,6 +4152,7 @@ whatwhen() {
# change fluxbox keys from 'Alt-#' to 'Alt-F#' and vice versa
fluxkey-change() {
+ emulate -L zsh
[[ -n "$FLUXKEYS" ]] || local FLUXKEYS="$HOME/.fluxbox/keys"
if ! [[ -r "$FLUXKEYS" ]] ; then
echo "Sorry, \$FLUXKEYS file $FLUXKEYS could not be read - nothing to be done."
@@ -4183,6 +4174,7 @@ fluxkey-change() {
# retrieve weather information on the console
# Usage example: 'weather LOWG'
weather() {
+ emulate -L zsh
[[ -n "$1" ]] || {
print 'Usage: weather ' >&2
print 'List of stations: http://en.wikipedia.org/wiki/List_of_airports_by_ICAO_code'>&2
@@ -4226,6 +4218,7 @@ if check_com -c hg ; then
# http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks
#f5# GNU like diff for mercurial
hgdi() {
+ emulate -L zsh
for i in $(hg status -marn "$@") ; diff -ubwd <(hg cat "$i") "$i"
}
@@ -4241,12 +4234,13 @@ if check_com -c hg ; then
# hgstat 1234 => display diffstat between revision 1234 and tip
#f5# Diffstat for specific version of a mercurial repos
hgstat() {
+ emulate -L zsh
[[ -n "$1" ]] && hg diff -r $1 -r tip | diffstat || hg export tip | diffstat
}
#f5# Get current mercurial tip via hg itself
gethgclone() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
if [[ -f mercurial-tree/.hg ]] ; then
cd mercurial-tree
@@ -4275,7 +4269,7 @@ fi # end of check whether we have the 'hg'-executable
# get current mercurial snapshot
#f5# Get current mercurial snapshot
gethgsnap() {
- setopt local_options
+ emulate -L zsh
setopt errreturn
if [[ -f mercurial-snapshot.tar.gz ]] ; then
echo "mercurial-snapshot.tar.gz exists already, skipping download."