X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=54ce02429264fcd2ebc2b2011b7c7c2ca33ee22e;hb=1314616e198c54b96681d1ed4583b432793bb823;hp=720c81f1003e6e98b3fbb7ebdb4a3706e40ed38d;hpb=bb421eff0568849e06231b8ee07002b742d28cb0;p=grml-etc-core.git
diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc
index 720c81f..54ce024 100644
--- a/etc/zsh/zshrc
+++ b/etc/zsh/zshrc
@@ -11,6 +11,13 @@
# Global Order: zshenv, zprofile, zshrc, zlogin
################################################################################
+# USAGE
+# If you are using this file as your ~/.zshrc file, please use ~/.zshrc.pre
+# and ~/.zshrc.local for your own customisations. The former file is read
+# before ~/.zshrc, the latter is read after it. Also, consider reading the
+# refcard and the reference manual for this setup, both available from:
+#
+
# Contributing:
# If you want to help to improve grml's zsh setup, clone the grml-etc-core
# repository from git.grml.org:
@@ -249,13 +256,6 @@ 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
@@ -410,14 +410,13 @@ 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
@@ -506,7 +505,7 @@ fi
isdarwin && xsource /sw/bin/init.sh
# load our function and completion directories
-for fdir in /usr/share/grml/zsh/completion /usr/share/grml/functions; do
+for fdir in /usr/share/grml/zsh/completion /usr/share/grml/zsh/functions; do
fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
if [[ ${fpath} == '/usr/share/grml/zsh/functions' ]] ; then
for func in ${fdir}/**/[^_]*[^~](N.) ; do
@@ -629,6 +628,10 @@ zle -N slash-backward-kill-word
#k# Kill everything in a word up to its last \kbd{/}
bindkey '\ev' slash-backward-kill-word
+#k# Kill everything in a word up to its last \kbd{/}
+bindkey '\e^h' slash-backward-kill-word
+#k# Kill everything in a word up to its last \kbd{/}
+bindkey '\e^?' slash-backward-kill-word
# use the new *-pattern-* widgets for incremental history search
if is439 ; then
@@ -928,7 +931,10 @@ bindkey '^z' grml-zsh-fg
# run command line as user root via sudo:
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
- [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
+ if [[ $BUFFER != sudo\ * ]]; then
+ BUFFER="sudo $BUFFER"
+ CURSOR=$(( CURSOR+5 ))
+ fi
}
zle -N sudo-command-line
@@ -1137,6 +1143,15 @@ fi
if zrcautoload vcs_info; then
GRML_VCS_INFO=0
+ # `vcs_info' in zsh versions 4.3.10 and below have a broken `_realpath'
+ # function, which can cause a lot of trouble with our directory-based
+ # profiles. So:
+ if [[ ${ZSH_VERSION} == 4.3.<-10> ]] ; then
+ function VCS_INFO_realpath () {
+ setopt localoptions NO_shwordsplit chaselinks
+ ( builtin cd -q $1 2> /dev/null && pwd; )
+ }
+ fi
else
# I'm not reindenting the whole code below.
GRML_VCS_INFO=1
@@ -1988,6 +2003,10 @@ else
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r"
fi
+if [[ -o restricted ]]; then
+ zstyle ':vcs_info:*' enable false
+fi
+
# }}}
# command not found handling {{{
@@ -2029,9 +2048,7 @@ function info_print () {
esc_end="$2"
shift 2
printf '%s' ${esc_begin}
- for item in "$@" ; do
- printf '%s ' "$item"
- done
+ printf '%s' "$*"
printf '%s' "${esc_end}"
}
@@ -2263,7 +2280,7 @@ if ! check_com asc &>/dev/null ; then
fi
# get top 10 shell commands:
-alias top10='print -l ? ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
+alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
# truecrypt; use e.g. via 'truec /dev/ice /mnt/ice' or 'truec -i'
if check_com -c truecrypt ; then
@@ -2621,28 +2638,6 @@ grmlcomp() {
# {{{ grmlstuff
grmlstuff() {
# people should use 'grml-x'!
- startx() {
- if [[ -e /etc/X11/xorg.conf ]] ; then
- [[ -x /usr/bin/startx ]] && /usr/bin/startx "$@" || /usr/X11R6/bin/startx "$@"
- else
- echo "Please use the script \"grml-x\" for starting the X Window System
-because there does not exist /etc/X11/xorg.conf yet.
-If you want to use startx anyway please call \"/usr/bin/startx\"."
- return -1
- fi
- }
-
- xinit() {
- if [[ -e /etc/X11/xorg.conf ]] ; then
- [[ -x /usr/bin/xinit ]] && /usr/bin/xinit || /usr/X11R6/bin/xinit
- else
- echo "Please use the script \"grml-x\" for starting the X Window System.
-because there does not exist /etc/X11/xorg.conf yet.
-If you want to use xinit anyway please call \"/usr/bin/xinit\"."
- return -1
- fi
- }
-
if check_com -c 915resolution; then
855resolution() {
echo "Please use 915resolution as resolution modifying tool for Intel \
@@ -2794,7 +2789,7 @@ compdef _aliases edalias
#f1# Edit a function via zle
edfunc() {
- [[ -z "$1" ]] && { echo "Usage: edfun " ; return 1 } || zed -f "$1" ;
+ [[ -z "$1" ]] && { echo "Usage: edfunc " ; return 1 } || zed -f "$1" ;
}
compdef _functions edfunc
@@ -2986,7 +2981,7 @@ ipv6-tunnel() {
# run dhclient for wireless device
iwclient() {
- salias dhclient "$(wavemon -d | awk '/device/{print $2}')"
+ sudo dhclient "$(wavemon -d | awk '/device/{print $3}')"
}
# spawn a minimally set up mksh - useful if you want to umount /usr/.
@@ -3078,14 +3073,14 @@ exit 0;
ssl_hashes=( sha512 sha256 sha1 md5 )
for sh in ${ssl_hashes}; do
- ssl-cert-${sh}() {
+ eval 'ssl-cert-'${sh}'() {
emulate -L zsh
if [[ -z $1 ]] ; then
- printf 'usage: %s \n' "ssh-cert-${sh}"
+ printf '\''usage: %s \n'\'' "ssh-cert-'${sh}'"
return 1
fi
- openssl x509 -noout -fingerprint -${sh} -in $1
- }
+ openssl x509 -noout -fingerprint -'${sh}' -in $1
+ }'
done; unset sh
ssl-cert-fingerprints() {
@@ -3123,6 +3118,9 @@ if [[ -r ~/.important_commands ]] ; then
fi
# }}}
+# load the lookup subsystem if it's available on the system
+zrcautoload lookupinit && lookupinit
+
#:grep:marker:for:mika: :-)
### non-root (EUID != 0) code below
###
@@ -3132,7 +3130,6 @@ if (( GRML_ALWAYS_LOAD_ALL == 0 )) && (( $EUID == 0 )) ; then
return 0
fi
-
# variables {{{
# set terminal property (used e.g. by msgid-chooser)
@@ -3206,9 +3203,9 @@ alias lsd='ls -d *(/)' # only show directories
#a2# Only show empty directories
alias lse='ls -d *(/^F)' # only show empty directories
#a2# Display the ten newest files
-alias lsnew="ls -rl *(D.om[1,10])" # display the newest files
+alias lsnew="ls -rtlh *(D.om[1,10])" # display the newest files
#a2# Display the ten oldest files
-alias lsold="ls -rtlh *(D.om[1,10])" # display the oldest files
+alias lsold="ls -rtlh *(D.Om[1,10])" # display the oldest files
#a2# Display the ten smallest files
alias lssmall="ls -Srl *(.oL[1,10])" # display the smallest files
@@ -3369,7 +3366,7 @@ bk() {
#f5# Copied diff
cdiff() {
emulate -L zsh
- diff -crd "$*" | egrep -v "^Only in |^Binary files "
+ diff -crd "$@" | egrep -v "^Only in |^Binary files "
}
#f5# cd to directoy and list files
cl() {
@@ -3548,29 +3545,6 @@ alias GREP='grep -i --color=auto'
#f5# Watch manpages in a stretched style
man2() { PAGER='dash -c "sed G | /usr/bin/less"' command man "$@" ; }
-# d():Copyright 2005 Nikolai Weibull
-# note: option AUTO_PUSHD has to be set
-#f5# Jump between directories
-d() {
- emulate -L zsh
- autoload -U colors
- local color=$fg_bold[blue]
- integer i=0
- dirs -p | while read dir; do
- local num="${$(printf "%-4d " $i)/ /.}"
- printf " %s $color%s$reset_color\n" $num $dir
- (( i++ ))
- done
- integer dir=-1
- read -r 'dir?Jump to directory: ' || return
- (( dir == -1 )) && return
- if (( dir < 0 || dir >= i )); then
- echo d: no such directory stack entry: $dir
- return 1
- fi
- cd ~$dir
-}
-
# usage example: 'lcheck strcpy'
#f5# Find out which libs define a symbol
lcheck() {
@@ -3599,6 +3573,20 @@ purge() {
fi
}
+#f5# show labels and uuids of disk devices
+if is439 && [[ -d /dev/disk/by-id/ ]]; then
+ lsdisk() {
+ emulate -L zsh
+ setopt extendedglob
+ local -a -U disks
+ disks=( /dev/disk/by-id/*(@:A) )
+ for dev in "$disks[@]"; do
+ print ${fg_bold[red]}${dev}${reset_color} /dev/disk/by-label/*(@e/'[[ ${REPLY:A} == $dev ]] && REPLY=${fg[blue]}LABEL=${REPLY:t}${reset_color}'/N) /dev/disk/by-uuid/*(@e/'[[ ${REPLY:A} == $dev ]] && REPLY=${fg[green]}UUID=${REPLY:t}${reset_color}'/N)
+ print -f " %s\n" /dev/disk/by-id/*(@e/'[[ ${REPLY:A} == $dev ]]'/N:t)
+ done
+ }
+fi
+
# Translate DE<=>EN
# 'translate' looks up fot a word in a file with language-to-language
# translations (field separator should be " : "). A typical wordlist looks
@@ -3730,7 +3718,11 @@ show-archive() {
#f5# Use \kbd{vim} as your manpage reader
vman() {
emulate -L zsh
- man $* | col -b | view -c 'set ft=man nomod nolist' -
+ if (( ${#argv} == 0 )); then
+ printf 'usage: vman \n'
+ return 1
+ fi
+ man "$@" | col -b | view -c 'set ft=man nomod nolist' -
}
# function readme() { $PAGER -- (#ia3)readme* }
@@ -3925,68 +3917,6 @@ urlencode() {
print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%${(l:2::0:)$(([##16]#match))}}
}
-#f5# Install x-lite (VoIP software)
-getxlite() {
- emulate -L zsh
- setopt errreturn
- [[ -d ~/tmp ]] || mkdir ~/tmp
- cd ~/tmp
-
- echo "Downloading http://www.counterpath.com/download/X-Lite_Install.tar.gz and storing it in ~/tmp:"
- if wget http://www.counterpath.com/download/X-Lite_Install.tar.gz ; then
- unp X-Lite_Install.tar.gz && echo done || echo failed
- else
- echo "Error while downloading." ; return 1
- fi
-
- if [[ -x xten-xlite/xtensoftphone ]] ; then
- echo "Execute xten-xlite/xtensoftphone to start xlite."
- fi
-}
-
-#f5# Install skype
-getskype() {
- 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'."
- wget http://www.skype.com/go/getskype-linux-deb
- $SUDO dpkg -i skype*.deb && echo "skype installed."
-}
-
-#f5# Install beta-version of skype
-getskypebeta() {
- emulate -L zsh
- setopt errreturn
- echo "Downloading debian package of skype (beta version)."
- wget http://www.skype.com/go/getskype-linux-beta-deb
- $SUDO dpkg -i skype-beta*.deb && echo "skype installed."
-}
-
-#f5# Install gizmo (VoIP software)
-getgizmo() {
- emulate -L zsh
- setopt errreturn
- echo "libgtk2.0-0, gconf2, libstdc++6, libasound2 and zlib1g have to be available. Installing."
- $SUDO apt-get update
- $SUDO apt-get install libgtk2.0-0 gconf2 libstdc++6 libasound2 zlib1g
- wget "$(lynx --dump http://gizmo5.com/pc/download/linux/ | awk '/libstdc\+\+6.*\.deb/ {print $2}')"
- $SUDO dpkg -i gizmo-project*.deb && echo "gizmo installed."
-}
-
-#f5# Get and run AIR (Automated Image and Restore)
-getair() {
- 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'
- wget http://puzzle.dl.sourceforge.net/sourceforge/air-imager/air-$VER.tar.gz
- tar zxf air-$VER.tar.gz
- cd air-$VER
- INTERACTIVE=no $SUDO ./install-air-1.2.8
- [[ -x /usr/local/bin/air ]] && [[ -n "$DISPLAY" ]] && $SUDO air
-}
-
# http://strcat.de/blog/index.php?/archives/335-Software-sauber-deinstallieren...html
#f5# Log 'make install' output
mmake() {
@@ -4201,7 +4131,7 @@ 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.'
+ help='Use `whatwhen -h'\'' for further explanations.'
ident=${(l,${#${:-Usage: }},, ,)}
format_l="${ident}%s\t\t\t%s\n"
format_s="${format_l//(\\t)##/\\t}"
@@ -4276,34 +4206,39 @@ weather() {
return 1
}
+ local VERBOSE="yes" # TODO: Make this a command line switch
+
+ local ODIR=`pwd`
local PLACE="${1:u}"
- local FILE="$HOME/.weather/$PLACE"
- local LOG="$HOME/.weather/log"
+ local DIR="${HOME}/.weather"
+ local LOG="${DIR}/log"
- [[ -d $HOME/.weather ]] || {
- print -n "Creating $HOME/.weather: "
- mkdir $HOME/.weather
+ [[ -d ${DIR} ]] || {
+ print -n "Creating ${DIR}: "
+ mkdir ${DIR}
print 'done'
}
print "Retrieving information for ${PLACE}:"
print
- wget -T 10 --no-verbose --output-file=$LOG --output-document=$FILE --timestamping http://weather.noaa.gov/pub/data/observations/metar/decoded/$PLACE.TXT
+ cd ${DIR} && wget -T 10 --no-verbose --output-file=$LOG --timestamping http://weather.noaa.gov/pub/data/observations/metar/decoded/$PLACE.TXT
if [[ $? -eq 0 ]] ; then
if [[ -n "$VERBOSE" ]] ; then
- cat $FILE
+ cat ${PLACE}.TXT
else
- DATE=$(grep 'UTC' $FILE | sed 's#.* /##')
- TEMPERATURE=$(awk '/Temperature/ { print $4" degree Celcius / " $2" degree Fahrenheit" }' $FILE| tr -d '(')
+ DATE=$(grep 'UTC' ${PLACE}.TXT | sed 's#.* /##')
+ TEMPERATURE=$(awk '/Temperature/ { print $4" degree Celcius / " $2" degree Fahrenheit" }' ${PLACE}.TXT | tr -d '(')
echo "date: $DATE"
echo "temp: $TEMPERATURE"
fi
else
print "There was an error retrieving the weather information for $PLACE" >&2
cat $LOG
+ cd $ODIR
return 1
fi
+ cd $ODIR
}
# }}}
@@ -4333,57 +4268,8 @@ if check_com -c hg ; then
[[ -n "$1" ]] && hg diff -r $1 -r tip | diffstat || hg export tip | diffstat
}
- #f5# Get current mercurial tip via hg itself
- gethgclone() {
- emulate -L zsh
- setopt errreturn
- if [[ -f mercurial-tree/.hg ]] ; then
- cd mercurial-tree
- echo "Running hg pull for retreiving latest version..."
- hg pull
- echo "Finished update. Building mercurial"
- make local
- echo "Setting \$PATH to $PWD:\$PATH..."
- export PATH="$PWD:$PATH"
- else
- echo "Downloading mercurial via hg"
- hg clone http://selenic.com/repo/hg mercurial-tree
- cd mercurial-tree
- echo "Building mercurial"
- make local
- echo "Setting \$PATH to $PWD:\$PATH..."
- export PATH="$PWD:$PATH"
- echo "make sure you set it permanent via ~/.zshrc if you plan to use it permanently."
- # echo "Setting \$PYTHONPATH to PYTHONPATH=\${HOME}/lib/python,"
- # export PYTHONPATH=${HOME}/lib/python
- fi
- }
-
fi # end of check whether we have the 'hg'-executable
-# get current mercurial snapshot
-#f5# Get current mercurial snapshot
-gethgsnap() {
- emulate -L zsh
- setopt errreturn
- if [[ -f mercurial-snapshot.tar.gz ]] ; then
- echo "mercurial-snapshot.tar.gz exists already, skipping download."
- else
- echo "Downloading mercurial snapshot"
- wget http://www.selenic.com/mercurial/mercurial-snapshot.tar.gz
- fi
- echo "Unpacking mercurial-snapshot.tar.gz"
- tar zxf mercurial-snapshot.tar.gz
- cd mercurial-snapshot/
- echo "Installing required build-dependencies"
- $SUDO apt-get update
- $SUDO apt-get install python2.4-dev
- echo "Building mercurial"
- make local
- echo "Setting \$PATH to $PWD:\$PATH..."
- export PATH="$PWD:$PATH"
- echo "make sure you set it permanent via ~/.zshrc if you plan to use it permanently."
-}
# }}}
# some useful commands often hard to remember - let's grep for them {{{