X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=d3d73b1e29fd93fe44e64b66eb78cf55398c8c64;hb=refs%2Ftags%2Fv0.10.3;hp=ac83984df3cabcc03a61ca67e348733ce87a2ae5;hpb=00522c85207a8b18f7ae5976b3ce78f53f5fb484;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index ac83984..d3d73b1 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -180,14 +180,22 @@ else isgrmlsmall() { return 1 } fi +GRML_OSTYPE=$(uname -s) + +islinux(){ + [[ $GRML_OSTYPE == "Linux" ]] +} + isdarwin(){ - [[ $OSTYPE == darwin* ]] && return 0 - return 1 + [[ $GRML_OSTYPE == "Darwin" ]] } isfreebsd(){ - [[ $OSTYPE == freebsd* ]] && return 0 - return 1 + [[ $GRML_OSTYPE == "FreeBSD" ]] +} + +isopenbsd(){ + [[ $GRML_OSTYPE == "OpenBSD" ]] } #f1# are we running within an utf environment? @@ -339,19 +347,18 @@ NOMENU=${NOMENU:-0} NOPRECMD=${NOPRECMD:-0} COMMAND_NOT_FOUND=${COMMAND_NOT_FOUND:-0} GRML_ZSH_CNF_HANDLER=${GRML_ZSH_CNF_HANDLER:-/usr/share/command-not-found/command-not-found} -BATTERY=${BATTERY:-0} +GRML_DISPLAY_BATTERY=${GRML_DISPLAY_BATTERY:-${BATTERY:-0}} GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1} ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0} typeset -ga ls_options typeset -ga grep_options -if ls --help 2> /dev/null | grep -q GNU; then +if ls --color=auto / >/dev/null 2>&1; then ls_options=( --color=auto ) -elif [[ $OSTYPE == freebsd* ]]; then +elif ls -G / >/dev/null 2>&1; then ls_options=( -G ) fi -if grep --help 2> /dev/null | grep -q GNU || \ - [[ $OSTYPE == freebsd* ]]; then +if grep --color=auto -q "a" <<< "a" >/dev/null 2>&1; then grep_options=( --color=auto ) fi @@ -406,6 +413,7 @@ check_com() { salias() { emulate -L zsh local only=0 ; local multi=0 + local key val while [[ $1 == -* ]] ; do case $1 in (-o) only=1 ;; @@ -495,11 +503,7 @@ xcat() { xunfunction() { emulate -L zsh local -a funcs - funcs=(salias xcat xsource xunfunction zrcautoload - zrcautozle - zrcbindkey - zrcgotkeymap - zrcgotwidget) + funcs=(salias xcat xsource xunfunction zrcautoload zrcautozle) for func in $funcs ; do [[ -n ${functions[$func]} ]] \ && unfunction $func @@ -524,10 +528,6 @@ for var in LANG LC_ALL LC_MESSAGES ; do [[ -n ${(P)var} ]] && export $var done -xsource "/etc/sysconfig/keyboard" - -TZ=$(xcat /etc/timezone) - # set some variables if check_com -c vim ; then #v# @@ -543,7 +543,12 @@ export PAGER=${PAGER:-less} 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' +if [[ -z "$SHELL" ]] ; then + SHELL="$(which zsh)" + if [[ -x "$SHELL" ]] ; then + export SHELL + fi +fi # color setup for ls: check_com -c dircolors && eval $(dircolors -b) @@ -608,8 +613,9 @@ if is4 ; then fi # completion system +COMPDUMPFILE=${COMPDUMPFILE:-${ZDOTDIR:-${HOME}}/.zcompdump} if zrcautoload compinit ; then - compinit || print 'Notice: no compinit available :(' + compinit -d ${COMPDUMPFILE} || print 'Notice: no compinit available :(' else print 'Notice: no compinit available :(' function compdef { } @@ -776,7 +782,7 @@ grmlcomp() { # use generic completion system for programs not yet defined; (_gnu_generic works # with commands that provide a --help option with "standard" gnu-like output.) - for compcom in cp deborphan df feh fetchipac head hnb ipacsum mv \ + for compcom in cp deborphan df feh fetchipac gpasswd head hnb ipacsum mv \ pal stow tail uname ; do [[ -z ${_comps[$compcom]} ]] && compdef _gnu_generic ${compcom} done; unset compcom @@ -785,11 +791,11 @@ grmlcomp() { compdef _hosts upgrade } -# Keyboard setup: The following is the same code, we wrote for debian's setup. -# It ensures the terminal is in the right mode, when zle is active, so the -# values from $terminfo are valid. Therefore, this setup should work on all -# systems, that have support for `terminfo'. It also requires the zsh in use to -# have the `zsh/terminfo' module built. +# Keyboard setup: The following is based on the same code, we wrote for +# debian's setup. It ensures the terminal is in the right mode, when zle is +# active, so the values from $terminfo are valid. Therefore, this setup should +# work on all systems, that have support for `terminfo'. It also requires the +# zsh in use to have the `zsh/terminfo' module built. # # If you are customising your `zle-line-init()' or `zle-line-finish()' # functions, make sure you call the following utility functions in there: @@ -819,21 +825,6 @@ beginning-or-end-of-somewhere() { zle -N beginning-of-somewhere beginning-or-end-of-somewhere zle -N end-of-somewhere beginning-or-end-of-somewhere -## toggle the ,. abbreviation feature on/off -# NOABBREVIATION: default abbreviation-state -# 0 - enabled (default) -# 1 - disabled -NOABBREVIATION=${NOABBREVIATION:-0} - -grml_toggle_abbrev() { - if (( ${NOABBREVIATION} > 0 )) ; then - NOABBREVIATION=0 - else - NOABBREVIATION=1 - fi -} -zle -N grml_toggle_abbrev - # add a command line to the shells history without executing it commit-to-history() { print -s ${(z)BUFFER} @@ -995,11 +986,10 @@ zle -N accept-line zle -N Accept-Line zle -N Accept-Line-HandleContext -# power completion - abbreviation expansion # power completion / abbreviation expansion / buffer expansion # see http://zshwiki.org/home/examples/zleiab for details # less risky than the global aliases but powerful as well -# just type the abbreviation key and afterwards ',.' to expand it +# just type the abbreviation key and afterwards 'ctrl-x .' to expand it declare -A abk setopt extendedglob setopt interactivecomments @@ -1031,11 +1021,6 @@ zleiab() { setopt extendedglob local MATCH - if (( NOABBREVIATION > 0 )) ; then - LBUFFER="${LBUFFER},." - return 0 - fi - LBUFFER=${LBUFFER%%(#m)[.\-+:|_a-zA-Z0-9]#} LBUFFER+=${abk[$MATCH]:-$MATCH} } @@ -1044,7 +1029,7 @@ zle -N zleiab help-show-abk() { - zle -M "$(print "Type ,. after these abbreviations to expand them:"; print -a -C 2 ${(kv)abk})" + zle -M "$(print "Available abbreviations for expansion:"; print -a -C 2 ${(kv)abk})" } zle -N help-show-abk @@ -1126,7 +1111,6 @@ inplaceMkDirs() { fi } -#k# mkdir -p
] @@ -1902,6 +2076,11 @@ function GRML_theme_add_token_usage () { return value is expected in the \$REPLY parameter. The use of these options is mutually exclusive. + There is a utility function \`grml_theme_has_token', which you can use + to test if a token exists before trying to add it. This can be a guard + for situations in which a \`grml_theme_add_token' call may happen more + than once. + Example: To add a new token \`day' that expands to the current weekday in the @@ -1965,7 +2144,7 @@ grml_theme_add_token: andneed to by specified _both_!\n\n' shift 2 fi - if (( ${+grml_prompt_token_default[$name]} )); then + if grml_theme_has_token $name; then printf ' grml_theme_add_token: Token `%s'\'' exists! Giving up!\n\n' $name GRML_theme_add_token_usage @@ -2010,7 +2189,7 @@ function grml_prompt_addto () { for it in "${items[@]}"; do zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" pre apre \ || apre=${grml_prompt_pre_default[$it]} - zstyle -s ":prompt:grml:${grmltheme}:${lr}:$it" post apost \ + zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" post apost \ || apost=${grml_prompt_post_default[$it]} zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" token new \ || new=${grml_prompt_token_default[$it]} @@ -2120,7 +2299,7 @@ fi if is437; then # The prompt themes use modern features of zsh, that require at least # version 4.3.7 of the shell. Use the fallback otherwise. - if [[ $BATTERY -gt 0 ]]; then + if [[ $GRML_DISPLAY_BATTERY -gt 0 ]]; then zstyle ':prompt:grml:right:setup' items sad-smiley battery add-zsh-hook precmd battery fi @@ -2134,7 +2313,7 @@ if is437; then unset i zstyle ':prompt:grml(|-large|-chroot):right:setup' use-rprompt false elif (( EUID == 0 )); then - zstyle ':prompt:grml(|-large|-chroot):*:items:user' pre '%F{red}' + zstyle ':prompt:grml(|-large|-chroot):*:items:user' pre '%B%F{red}' fi # Finally enable one of the prompts. @@ -2232,8 +2411,6 @@ hash -d linux=/lib/modules/$(command uname -r)/build/ hash -d log=/var/log hash -d slog=/var/log/syslog hash -d src=/usr/src -hash -d templ=/usr/share/doc/grml-templates -hash -d tt=/usr/share/doc/texttools-doc hash -d www=/var/www #d# end @@ -2258,22 +2435,22 @@ fi # do we have GNU ls with color-support? if [[ "$TERM" != dumb ]]; then - #a1# List files with colors (\kbd{ls -b -CF \ldots}) - alias ls='ls -b -CF '${ls_options:+"${ls_options[*]}"} + #a1# List files with colors (\kbd{ls -F \ldots}) + alias ls='command ls -F '${ls_options:+"${ls_options[*]}"} #a1# List all files, with colors (\kbd{ls -la \ldots}) - alias la='ls -la '${ls_options:+"${ls_options[*]}"} + alias la='command ls -la '${ls_options:+"${ls_options[*]}"} #a1# List files with long colored list, without dotfiles (\kbd{ls -l \ldots}) - alias ll='ls -l '${ls_options:+"${ls_options[*]}"} + alias ll='command ls -l '${ls_options:+"${ls_options[*]}"} #a1# List files with long colored list, human readable sizes (\kbd{ls -hAl \ldots}) - alias lh='ls -hAl '${ls_options:+"${ls_options[*]}"} + alias lh='command ls -hAl '${ls_options:+"${ls_options[*]}"} #a1# List files with long colored list, append qualifier to filenames (\kbd{ls -lF \ldots})\\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...) - alias l='ls -lF '${ls_options:+"${ls_options[*]}"} + alias l='command ls -lF '${ls_options:+"${ls_options[*]}"} else - alias ls='ls -b -CF' - alias la='ls -la' - alias ll='ls -l' - alias lh='ls -hAl' - alias l='ls -lF' + alias ls='command ls -F' + alias la='command ls -la' + alias ll='command ls -l' + alias lh='command ls -hAl' + alias l='command ls -lF' fi alias mdstat='cat /proc/mdstat' @@ -2363,7 +2540,8 @@ the zsh yet. :) "NOPRECMD=1 zsh" => disable the precmd + preexec commands (set GNU screen title) "NOTITLE=1 zsh" => disable setting the title of xterms without disabling preexec() and precmd() completely - "BATTERY=1 zsh" => activate battery status (via acpi) on right side of prompt + "GRML_DISPLAY_BATTERY=1 zsh" + => activate battery status on right side of prompt (WIP) "COMMAND_NOT_FOUND=1 zsh" => Enable a handler if an external command was not found The command called in the handler can be altered by setting @@ -2497,6 +2675,7 @@ 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 + local file for file in "$@" ; do while [[ -h "$file" ]] ; do ls -l $file @@ -2509,26 +2688,31 @@ sll() { # PAGER='less -Mr' - If so, the use of $PAGER here needs fixing # with respect to wordsplitting. (ie. ${=PAGER}) if check_com -c $PAGER ; then - #f3# View Debian's changelog of a given package + #f3# View Debian's changelog of given package(s) dchange() { 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 + [[ -z "$1" ]] && printf 'Usage: %s \n' "$0" && return 1 + + local package + for package in "$@" ; do + if [[ -r /usr/share/doc/${package}/changelog.Debian.gz ]] ; then + $PAGER /usr/share/doc/${package}/changelog.Debian.gz + elif [[ -r /usr/share/doc/${package}/changelog.gz ]] ; then + $PAGER /usr/share/doc/${package}/changelog.gz + elif [[ -r /usr/share/doc/${package}/changelog ]] ; then + $PAGER /usr/share/doc/${package}/changelog + else + if check_com -c aptitude ; then + echo "No changelog for package $package found, using aptitude to retrieve it." + aptitude changelog "$package" + elif check_com -c apt-get ; then + echo "No changelog for package $package found, using apt-get to retrieve it." + apt-get changelog "$package" else - aptitude changelog $1 + echo "No changelog for package $package found, sorry." fi - else - echo "No changelog for package $1 found, sorry." - return 1 fi - fi + done } _dchange() { _files -W /usr/share/doc -/ } compdef _dchange dchange @@ -2714,11 +2898,6 @@ if check_com vim; then } fi -# make a backup of a file -bk() { - cp -a "$1" "${1}_$(date --iso-8601=seconds)" -} - ssl_hashes=( sha512 sha256 sha1 md5 ) for sh in ${ssl_hashes}; do @@ -2781,35 +2960,35 @@ alias j='jobs -l' # listing stuff #a2# Execute \kbd{ls -lSrah} -alias dir="ls -lSrah" +alias dir="command ls -lSrah" #a2# Only show dot-directories -alias lad='ls -d .*(/)' +alias lad='command ls -d .*(/)' #a2# Only show dot-files -alias lsa='ls -a .*(.)' +alias lsa='command ls -a .*(.)' #a2# Only files with setgid/setuid/sticky flag -alias lss='ls -l *(s,S,t)' +alias lss='command ls -l *(s,S,t)' #a2# Only show symlinks -alias lsl='ls -l *(@)' +alias lsl='command ls -l *(@)' #a2# Display only executables -alias lsx='ls -l *(*)' +alias lsx='command ls -l *(*)' #a2# Display world-{readable,writable,executable} files -alias lsw='ls -ld *(R,W,X.^ND/)' +alias lsw='command ls -ld *(R,W,X.^ND/)' #a2# Display the ten biggest files -alias lsbig="ls -flh *(.OL[1,10])" +alias lsbig="command ls -flh *(.OL[1,10])" #a2# Only show directories -alias lsd='ls -d *(/)' +alias lsd='command ls -d *(/)' #a2# Only show empty directories -alias lse='ls -d *(/^F)' +alias lse='command ls -d *(/^F)' #a2# Display the ten newest files -alias lsnew="ls -rtlh *(D.om[1,10])" +alias lsnew="command ls -rtlh *(D.om[1,10])" #a2# Display the ten oldest files -alias lsold="ls -rtlh *(D.Om[1,10])" +alias lsold="command ls -rtlh *(D.Om[1,10])" #a2# Display the ten smallest files -alias lssmall="ls -Srl *(.oL[1,10])" +alias lssmall="command ls -Srl *(.oL[1,10])" #a2# Display the ten newest directories and ten newest .directories -alias lsnewdir="ls -rthdl *(/om[1,10]) .*(D/om[1,10])" +alias lsnewdir="command ls -rthdl *(/om[1,10]) .*(D/om[1,10])" #a2# Display the ten oldest directories and ten oldest .directories -alias lsolddir="ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])" +alias lsolddir="command ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])" # some useful aliases #a2# Remove current empty directory. Execute \kbd{cd ..; rmdir \$OLDCWD} @@ -2906,8 +3085,13 @@ modified() { check_com new || alias new=modified # use colors when GNU grep with color-support -#a2# Execute \kbd{grep -{}-color=auto} -(( $#grep_options > 0 )) && alias grep='grep '${grep_options:+"${grep_options[*]}"} +if (( $#grep_options > 0 )); then + o=${grep_options:+"${grep_options[*]}"} + #a2# Execute \kbd{grep -{}-color=auto} + alias grep='grep '$o + alias egrep='egrep '$o + unset o +fi # Translate DE<=>EN # 'translate' looks up fot a word in a file with language-to-language