# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
-# Latest change: Mit Jun 20 10:28:28 CEST 2007 [mika]
+# Latest change: Sam Sep 15 10:24:10 CEST 2007 [mika]
################################################################################
# This file is sourced only for interactive shells. It
# should contain commands to set up aliases, functions,
# Global Order: zshenv, zprofile, zshrc, zlogin
################################################################################
+# zsh-refcard-tag documentation: {{{
+# You may notice strange looking comments in the zshrc (and ~/.zshrc as
+# well). These are there for a purpose. grml's zsh-refcard can now be
+# automatically generated from the contents of the actual configuration
+# files. However, we need a little extra information on which comments
+# and what lines of code to take into account (and for what purpose).
+#
+# Here is what they mean:
+#
+# List of tags (comment types) used:
+# #a# Next line contains an important alias, that should
+# be included in the grml-zsh-refcard.
+# (placement tag: @@INSERT-aliases@@)
+# #f# Next line contains the beginning of an important function.
+# (placement tag: @@INSERT-functions@@)
+# #v# Next line contains an important variable.
+# (placement tag: @@INSERT-variables@@)
+# #k# Next line contains an important keybinding.
+# (placement tag: @@INSERT-keybindings@@)
+# #d# Hashed directories list generation:
+# start denotes the start of a list of 'hash -d'
+# definitions.
+# end denotes its end.
+# (placement tag: @@INSERT-hasheddirs@@)
+# #A# Abbreviation expansion list generation:
+# start denotes the beginning of abbreviations.
+# end denotes their end.
+# Lines within this section that end in '#d .*' provide
+# extra documentation to be included in the refcard.
+# (placement tag: @@INSERT-abbrev@@)
+# #m# This tag allows you to manually generate refcard entries
+# for code lines that are hard/impossible to parse.
+# Example:
+# #m# k ESC-h Call the run-help function
+# That would add a refcard entry in the keybindings table
+# for 'ESC-h' with the given comment.
+# So the syntax is: #m# <section> <argument> <comment>
+# #o# This tag lets you insert entries to the 'other' hash.
+# Generally, this should not be used. It is there for
+# things that cannot be done easily in another way.
+# (placement tag: @@INSERT-other-foobar@@)
+#
+# All of these tags (except for m and o) take two arguments, the first
+# within the tag, the other after the tag:
+#
+# #<tag><section># <comment>
+#
+# Where <section> is really just a number, which are defined by the
+# @secmap array on top of 'genrefcard.pl'. The reason for numbers
+# instead of names is, that for the reader, the tag should not differ
+# much from a regular comment. For zsh, it is a regular comment indeed.
+# The numbers have got the following meanings:
+# 0 -> "default"
+# 1 -> "system"
+# 2 -> "user"
+# 3 -> "debian"
+# 4 -> "search"
+# 5 -> "shortcuts"
+# 6 -> "services"
+#
+# So, the following will add an entry to the 'functions' table in the
+# 'system' section, with a (hopefully) descriptive comment:
+# #f1# Edit an alias via zle
+# edalias() {
+#
+# It will then show up in the @@INSERT-aliases-system@@ replacement tag
+# that can be found in 'grml-zsh-refcard.tex.in'.
+# If the section number is omitted, the 'default' section is assumed.
+# Furthermore, in 'grml-zsh-refcard.tex.in' @@INSERT-aliases@@ is
+# exactly the same as @@INSERT-aliases-default@@. If you want a list of
+# *all* aliases, for example, use @@INSERT-aliases-all@@.
+#}}}
+
# zsh profiling {{{
# just execute 'ZSH_PROFILE_RC=1 zsh' and run 'zprof' to get the details
if [[ -n $ZSH_PROFILE_RC ]] ; then
#f1# Checks whether or not you're running grml-small
isgrmlsmall() {
[[ ${${${(f)"$(</etc/grml_version)"}%% *}##*-} == 'small' ]] && return 0 ; return 1
- }
+ }
else
isgrmlsmall() { return 1 }
fi
export MAIL=${MAIL:-/var/mail/$USER}
# if we don't set $SHELL then aterm, rxvt,.. will use /bin/sh or /bin/bash :-/
export SHELL='/bin/zsh'
- [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
[ -x $(which dircolors) ] && eval `dircolors -b`
-# Search path for the cd comman
+# Search path for the cd command
# cdpath=(.. ~)
# completion functions go to /etc/zsh/completion.d
# fi
alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
- #m# k ESC-h Call \kbd{run-help} for the 1st word on the commandline
+ #m# k ESC-h Call \kbd{run-help} for the 1st word on the command line
alias run-help >&/dev/null && unalias run-help
autoload run-help # use via 'esc-h'
# press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
_bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
- #k# Insert a timestamp on the commandline (yyyy-mm-dd)
+ #k# Insert a timestamp on the command line (yyyy-mm-dd)
bindkey '^Ed' _bkdate
zle -N _bkdate
# zle -N mquote && bindkey '^q' mquote
# run command line as user root via sudo:
- _sudo-command-line() {
- [[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER"
+ sudo-command-line() {
+ [[ -z $BUFFER ]] && zle up-history
+ [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
}
- zle -N sudo-command-line _sudo-command-line
-#k# Put the current commandline into a \kbd{sudo} call
+ zle -N sudo-command-line
+#k# Put the current command line into a \kbd{sudo} call
bindkey "^Os" sudo-command-line
### jump behind the first word on the cmdline.
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.
MAILCHECK=30 # mailchecks
- REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 secondes
+ REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 seconds
watch=(notme root) # watch for everyone but me and root
# define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
# dirstack handling {{{
DIRSTACKSIZE=20
if [[ -f ~/.zdirs ]] && [[ ${#dirstack[*]} -eq 0 ]]; then
- dirstack=( ${(uf)"$(< ~/.zdirs)"} )
+ dirstack=( ${(f)"$(< ~/.zdirs)"} )
# "cd -" won't work after login by just setting $OLDPWD, so
[[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
fi
# get the name of the program currently running and hostname of local machine
# set screen window title if running in a screen
if [[ "$TERM" == screen* ]]; then
- # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # dont't use hostname
+ # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # don't use hostname
local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
echo -ne "\ek$CMD\e\\"
fi
alias mdstat='cat /proc/mdstat'
alias ...='cd ../../'
+ # generate alias named "$KERNELVERSION-reboot" so you can use boot with kexec:
+ if [ -x /sbin/kexec -a -r /proc/cmdline ] ; then
+ alias "$(uname -r)-reboot"="kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)""
+ fi
+
alias cp='nocorrect cp' # no spelling correction on cp
alias mkdir='nocorrect mkdir' # no spelling correction on mkdir
alias mv='nocorrect mv' # no spelling correction on mv
alias term2iso="echo 'Setting terminal to iso mode' ; print -n '\e%@'"
alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'"
- alias utf2iso='if isutfenv ; then
- for ENV in `env | grep UTF` ; do
- eval export "$(echo $ENV | sed 's/UTF-8/iso885915/')"
- done
- fi'
- alias iso2utf='if isutfenv ; then
- for ENV in `env | grep '\.iso'` ; do
- eval export "$(echo $ENV | sed 's/iso.*/UTF-8/')"
- done
- fi'
+ type utf2iso &>/dev/null && unalias utf2iso # make sure it is not assigned yet
+ utf2iso() {
+ if isutfenv ; then
+ for ENV in $(env | command grep -i '.utf') ; do
+ eval export "$(echo $ENV | sed 's/UTF-8/iso885915/ ; s/utf8/iso885915/')"
+ done
+ fi
+ }
+
+ type iso2utf &>/dev/null && unalias iso2utf # make sure it is not assigned yet
+ iso2utf() {
+ if ! isutfenv ; then
+ for ENV in $(env | command grep -i '\.iso') ; do
+ eval export "$(echo $ENV | sed 's/iso.*/UTF-8/ ; s/ISO.*/UTF-8/')"
+ done
+ fi
+ }
# set up software synthesizer via speakup
alias swspeak='
# I like clean prompt, so provide simple way to get that
alias 0 &>/dev/null || functions 0 &>/dev/null || alias 0='return 0'
+# for really lazy people like mika:
+ type S &>/dev/null || alias S='screen'
+ type s &>/dev/null || alias s='ssh'
+
+# get top 10 shell commands:
+ 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 [ -x $(which truecrypt) ] ; then
if isutfenv ; then
salias ag="apt-get upgrade"
#a3# Execute \kbd{apt-get update}
salias au="apt-get update"
- #a3# Execute \kbd{aptitude update ; aptitude upgrade}
- salias -a up="aptitude update ; aptitude upgrade"
+ #a3# Execute \kbd{aptitude update ; aptitude safe-upgrade}
+ salias -a up="aptitude update ; aptitude safe-upgrade"
#a3# Execute \kbd{dpkg-buildpackage}
alias dbp='dpkg-buildpackage'
#a3# Execute \kbd{grep-excuses}
}
fi
-# I hate lacking backward compability, so provide an alternative therefore
+# I hate lacking backward compatibility, so provide an alternative therefore
if ! [ -x $(which apache2-ssl-certificate) ] ; then
apache2-ssl-certificate(){
grmlcomp() {
## completion system
zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )' # allow one error for every three characters typed in approximate completer
- zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~' # don't complete backup files as executables
+ zstyle ':completion:*:complete:-command-::commands' ignored-patterns '(aptitude-*|*\~)' # don't complete backup files as executables
zstyle ':completion:*:correct:*' insert-unambiguous true # start menu completion only if it could find no unambiguous initial string
zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' #
zstyle ':completion:*:correct:*' original true #
}
# some people don't like the automatic correction - so run 'NOCOR=1 zsh' to deactivate it
if [[ -n "$NOCOR" ]] ; then
- zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _files
+ zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _files _ignored
setopt nocorrect # do not try to correct the spelling if possible
else
-# zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _correct _approximate _files
+# zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _ignored _correct _approximate _files
setopt correct # try to correct the spelling if possible
zstyle -e ':completion:*' completer '
if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]]; then
_last_try="$HISTNO$BUFFER$CURSOR"
- reply=(_complete _match _prefix _files)
+ reply=(_complete _match _ignored _prefix _files)
else
if [[ $words[1] = (rm|mv) ]]; then
reply=(_complete _files)
else
- reply=(_oldlist _expand _force_rehash _complete _correct _approximate _files)
+ reply=(_oldlist _expand _force_rehash _complete _ignored _correct _approximate _files)
fi
fi'
fi
# people should use 'grml-x'!
startx() {
if [ -e /etc/X11/xorg.conf ] ; then
- [ -x /usr/bin/startx ] && /usr/bin/startx || /usr/X11R6/bin/startx
+ [ -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.
else
manzsh() { /usr/bin/man zshall | vim -c "se ft=man| se hlsearch" +/"$1" - ; }
# manzsh() { /usr/bin/man zshall | most +/"$1" ; }
+ # [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
# manzsh() { man zshall | $MYLESS -p $1 ; }
fi
dchange() {
if [ -r /usr/share/doc/${1}/changelog.Debian.gz ] ; then
most /usr/share/doc/${1}/changelog.Debian.gz
+ elif [ -r /usr/share/doc/${1}/changelog.gz ] ; then
+ most /usr/share/doc/${1}/changelog.gz
else
- if [ -r /usr/share/doc/${1}/changelog.gz ] ; then
- most /usr/share/doc/${1}/changelog.gz
+ if type -p aptitude &>/dev/null ; then
+ echo "No changelog for package $1 found, using aptitude to retrieve it."
+ if isgrml ; then
+ aptitude -t unstable changelog ${1}
+ else
+ aptitude changelog ${1}
+ fi
else
echo "No changelog for package $1 found, sorry."
return 1
for i in Start Restart Stop Force-Reload Reload ; do
eval "$i() { $SUDO /etc/init.d/\$1 ${i:l} \$2 ; }"
done
- # now the completion for this:
- compctl -g "$(echo /etc/init.d/*(:t))" Start Restart Stop Force-Reload Reload
fi
#f1# Provides useful information on globbing
fi
}
- # After resuming from suspend, system is paging heavilly, leading to very bad interactivity.
+ # After resuming from suspend, system is paging heavily, leading to very bad interactivity.
# taken from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt
[ -r /proc/1/maps ] && deswap() {
print 'Reading /proc/[0-9]*/maps and sending output to /dev/null, this might take a while.'
# just press 'asdf' keys to toggle between dvorak and us keyboard layout
aoeu() {
- if [ -n "$XKEYBOARD" -a -n "$KEYTABLE" ] ; then
- echo -n "Switching to $KEYTABLE keyboard layout: "
- [ -z "$DISPLAY" ] && $SUDO loadkeys $KEYTABLE &>/dev/null || setxkbmap $XKEYBOARD &>/dev/null
- else
- echo -n 'Switching to us keyboard layout: '
- [ -z "$DISPLAY" ] && $SUDO loadkeys us &>/dev/null || setxkbmap us &>/dev/null
- fi
+ echo -n 'Switching to us keyboard layout: '
+ [ -z "$DISPLAY" ] && $SUDO loadkeys us &>/dev/null || setxkbmap us &>/dev/null
echo 'Done'
}
asdf() {
# }}}
## genrefcard.pl settings {{{
-### example: split funtions-search 8,16,24,32
+### example: split functions-search 8,16,24,32
#@# split functions-search 8
## }}}