X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=996e4e8d5999c798dce562c14230fd3ab0929dc0;hb=741e769580ef673457f8de508470c15cd3092208;hp=c9ccee1a985e1f55e81d22699c46b99a26c0297f;hpb=112cbc0a0e6089f2159f822b29ea5dd04fff1118;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index c9ccee1..996e4e8 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 @@ -2880,18 +2875,16 @@ check_com -c qma && alias ?='qma zshall' # grep for running process, like: 'any vim' any() { emulate -L zsh + unsetopt KSH_ARRAYS if [[ -z "$1" ]] ; then echo "any - grep for process(es) by keyword" >&2 echo "Usage: any " >&2 ; return 1 else - local STRING=$1 - local LENGTH=$(expr length $STRING) - local FIRSCHAR=$(echo $(expr substr $STRING 1 1)) - local REST=$(echo $(expr substr $STRING 2 $LENGTH)) - ps xauwww| grep "[$FIRSCHAR]$REST" + ps xauwww | grep --color=auto "[${1[1]}]${1[2,-1]}" fi } + # 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 ]] && \ @@ -3078,14 +3071,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 +3116,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 +3128,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 +3201,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 @@ -3548,29 +3543,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 +3571,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 +3716,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* }