-# Filename: zshrc
+# Filename: /etc/zsh/zshrc
# Purpose: config file for zsh (z shell)
# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
BATTERY=${BATTERY:-0}
GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0}
-GRML_WARN_SKEL=${GRML_WARN_SKEL:-1}
+
+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
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 <http://grml.org/console> on non-grml systems.
+from <http://grml.org/console/> on non-grml systems.
-Please see the current grml-zsh-refcard for updated installation
-information. In short, you don'\''t want a .zshrc.global file. Install
-the global zshrc to ~/.zshrc and be done.
+Please see the current grml-zsh-refcard (available at
+<http://grml.org/zsh/>) 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.
# do Fink setup on darwin
isdarwin && xsource /sw/bin/init.sh
-# set width of man pages to 80 for more convenient reading
-# export MANWIDTH=${MANWIDTH:-80}
-
-# Search path for the cd command
-# cdpath=(.. ~)
-
# 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.
else
[[ -d /etc/zsh/completion.d ]] && fpath=( $fpath /etc/zsh/completion.d )
if [[ -d /etc/zsh/functions.d ]] ; then
- fpath+=( /etc/zsh/functions.d )
- for func in /etc/zsh/functions.d/[^_]*[^~](N.) ; do
- zrcautoload -U ${func:t}
+ fdir='/etc/zsh/functions.d'
+ fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
+ for func in ${fdir}/**/[^_]*[^~](N.) ; do
+ zrcautoload ${func:t}
done
+ unset fdir
fi
fi
# adjust title of xterm
# see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
case $TERM in
- (xterm*|rxvt)
+ (xterm*|rxvt*)
print -Pn "\e]0;%n@%m: %~\a"
;;
esac
# }}}
# {{{ some aliases
-if [[ $UID -eq 0 ]] ; then
- [[ -r /etc/grml/screenrc ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
-elif [[ -r $HOME/.screenrc ]] ; then
- alias screen="/usr/bin/screen -c $HOME/.screenrc"
-else
- [[ -r /etc/grml/screenrc_grml ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
+if check_com -c screen ; then
+ if [[ $UID -eq 0 ]] ; then
+ [[ -r /etc/grml/screenrc ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc"
+ elif [[ -r $HOME/.screenrc ]] ; then
+ alias screen="${commands[screen]} -c $HOME/.screenrc"
+ else
+ [[ -r /etc/grml/screenrc_grml ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc_grml"
+ fi
fi
# do we have GNU ls with color-support?
# {{{ completion system
# called later (via is4 && grmlcomp)
-# notice: use 'zstyle' for getting current settings
+# note: use 'zstyle' for getting current settings
# press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
grmlcomp() {
# TODO: This could use some additional information
zstyle ':completion:*:manuals.*' insert-sections true
zstyle ':completion:*:man:*' menu yes select
+ # provide .. as a completion
+ zstyle ':completion:*' special-dirs ..
+
# run rehash on completion so new installed program are found automatically:
_force_rehash() {
(( CURRENT == 1 )) && rehash
fi
# d():Copyright 2005 Nikolai Weibull <nikolai@bitwi.se>
-# notice: option AUTO_PUSHD has to be set
+# note: option AUTO_PUSHD has to be set
#f5# Jump between directories
d() {
emulate -L zsh
mkdir -p ${root}/${subdir}/{cur,new,tmp}
}
-# xtrename() rename xterm from within GNU-screen
+#f5# Change the xterm title from within GNU-screen
xtrename() {
- if [[ -z ${DISPLAY} ]] ; then
- printf 'xtrename only makes sense in X11.\n'
- return 1
+ if [[ ${1} != "-f" ]] ; then
+ if [[ -z ${DISPLAY} ]] ; then
+ printf 'xtrename only makes sense in X11.\n'
+ return 1
+ fi
+ else
+ shift
fi
if [[ -z ${1} ]] ; then
- printf 'usage: xtrename() "title for xterm"\n'
+ printf 'usage: xtrename [-f] "title for xterm"\n'
printf ' renames the title of xterm from _within_ screen.\n'
- printf ' Also works without screen.\n'
+ printf ' also works without screen.\n'
+ printf ' will not work if DISPLAY is unset, use -f to override.\n'
return 0
fi
print -n "\eP\e]0;${1}\C-G\e\\"
compdef _hl_complete hl
fi
-# create small urls via tinyurl.com using wget, grep and sed
-zurl() {
- [[ -z ${1} ]] && print "please give an url to shrink." && return 1
- local url=${1}
- local tiny="http://tinyurl.com/create.php?url="
- #print "${tiny}${url}" ; return
- wget -O- \
- -o/dev/null \
- "${tiny}${url}" \
- | grep -Eio 'value="(http://tinyurl.com/.*)"' \
- | sed 's/value=//;s/"//g'
+# Create small urls via http://tinyurl.com using wget(1).
+function zurl() {
+ [[ -z ${1} ]] && { print "USAGE: zurl <URL>" ; return 1 }
+
+ local PN url tiny grabber search result preview
+ 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 || \
+ read -q "?Given host ${${url#http://*/}%/*} is not reachable by pinging. Proceed anyway? [y|n] "
+
+ if (( $? == 0 )) ; then
+# Prepend 'http://' to given URL where necessary for later output.
+ [[ ${url} != http(s|)://* ]] && url='http://'${url}
+ tiny='http://tinyurl.com/create.php?url='
+ if check_com -c wget ; then
+ grabber='wget -O- -o/dev/null'
+ else
+ print "wget is not available, but mandatory for ${PN}. Aborting."
+ fi
+# Looking for i.e.`copy('http://tinyurl.com/7efkze')' in TinyURL's HTML code.
+ search='copy\(?http://tinyurl.com/[[:alnum:]]##*'
+ result=${(M)${${${(f)"$(${=grabber} ${tiny}${url})"}[(fr)${search}*]}//[()\';]/}%%http:*}
+# TinyURL provides the rather new feature preview for more confidence. <http://tinyurl.com/preview.php>
+ preview='http://preview.'${result#http://}
+
+ printf '%s\n\n' "${PN} - Shrinking long URLs via webservice TinyURL <http://tinyurl.com>."
+ printf '%s\t%s\n\n' 'Given URL:' ${url}
+ printf '%s\t%s\n\t\t%s\n' 'TinyURL:' ${result} ${preview}
+ else
+ return 1
+ fi
}
#f2# Print a specific line of file(s).