X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=305155e58ca5100035ccd21b2611793f0459b2cf;hb=6c4346c3c7233655a9448f896ec708e11ce10ae1;hp=4e7ef0906066b2a99f67db21052353128b35a5e0;hpb=8564319c233b615c6b2500f166cfdcc0e8d1185c;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 4e7ef09..305155e 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -109,7 +109,7 @@ if [[ $ZSH_PROFILE_RC -gt 0 ]] ; then fi # load .zshrc.pre to give the user the chance to overwrite the defaults -[[ -r ${HOME}/.zshrc.pre ]] && source ${HOME}/.zshrc.pre +[[ -r ${ZDOTDIR:-${HOME}}/.zshrc.pre ]] && source ${ZDOTDIR:-${HOME}}/.zshrc.pre # check for version/system # check for versions (compatibility reasons) @@ -242,7 +242,7 @@ function zrcautoload() { local -i ffound ffile=$1 - (( found = 0 )) + (( ffound = 0 )) for fdir in ${fpath} ; do [[ -e ${fdir}/${ffile} ]] && (( ffound = 1 )) done @@ -502,7 +502,7 @@ xunfunction() { # modifications in ~/.zshrc.local zrclocal() { xsource "/etc/zsh/zshrc.local" - xsource "${HOME}/.zshrc.local" + xsource "${ZDOTDIR:-${HOME}}/.zshrc.local" return 0 } @@ -946,8 +946,7 @@ zleiab() { return 0 fi - matched_chars='[.-|_a-zA-Z0-9]#' - LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#} + LBUFFER=${LBUFFER%%(#m)[.\-+:|_a-zA-Z0-9]#} LBUFFER+=${abk[$MATCH]:-$MATCH} } @@ -1126,17 +1125,17 @@ fi # history -ZSHDIR=$HOME/.zsh +ZSHDIR=${ZDOTDIR:-${HOME}/.zsh} #v# -HISTFILE=$HOME/.zsh_history +HISTFILE=${ZDOTDIR:-${HOME}}/.zsh_history isgrmlcd && HISTSIZE=500 || HISTSIZE=5000 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history # dirstack handling DIRSTACKSIZE=${DIRSTACKSIZE:-20} -DIRSTACKFILE=${DIRSTACKFILE:-${HOME}/.zdirs} +DIRSTACKFILE=${DIRSTACKFILE:-${ZDOTDIR:-${HOME}}/.zdirs} if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then dirstack=( ${(f)"$(< $DIRSTACKFILE)"} ) @@ -1225,7 +1224,7 @@ if zrcautoload colors && colors 2>/dev/null ; then MAGENTA="%{${fg[magenta]}%}" YELLOW="%{${fg[yellow]}%}" WHITE="%{${fg[white]}%}" - NO_COLOUR="%{${reset_color}%}" + NO_COLOR="%{${reset_color}%}" else BLUE=$'%{\e[1;34m%}' RED=$'%{\e[1;31m%}' @@ -1234,7 +1233,7 @@ else WHITE=$'%{\e[1;37m%}' MAGENTA=$'%{\e[1;35m%}' YELLOW=$'%{\e[1;33m%}' - NO_COLOUR=$'%{\e[0m%}' + NO_COLOR=$'%{\e[0m%}' fi # gather version control information for inclusion in a prompt @@ -1266,10 +1265,10 @@ if [[ "$TERM" == dumb ]] ; then zstyle ':vcs_info:*' actionformats "(%s%)-[%b|%a] " "zsh: %r" zstyle ':vcs_info:*' formats "(%s%)-[%b] " "zsh: %r" else - # these are the same, just with a lot of colours: - zstyle ':vcs_info:*' actionformats "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${YELLOW}|${RED}%a${MAGENTA}]${NO_COLOUR} " \ + # these are the same, just with a lot of colors: + zstyle ':vcs_info:*' actionformats "${MAGENTA}(${NO_COLOR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${YELLOW}|${RED}%a${MAGENTA}]${NO_COLOR} " \ "zsh: %r" - zstyle ':vcs_info:*' formats "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${MAGENTA}]${NO_COLOUR}%} " \ + zstyle ':vcs_info:*' formats "${MAGENTA}(${NO_COLOR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${MAGENTA}]${NO_COLOR}%} " \ "zsh: %r" zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r" fi @@ -1285,9 +1284,80 @@ function command_not_found_handler() { return 1 } +function prompt_grml_help () { + cat <<__EOF0__ + prompt grml + + This is the prompt as used by the grml-live system . + It is a rather simple one-line prompt, that by default looks like this: + + @ [ ]% + + The prompt itself integrates with zsh's prompt themes system (as you are + witnessing right now) and is configurable to a certain degree. In + particular, these aspects are customisable: + + - The items used in the prompt (e.g. you can remove \`user' from + the list of activated items, which will cause the user name to + be omitted from the prompt string). + + - The attributes used with the items are customisable via strings + used before and after the actual item. + + The available items are: rc, rc-always, change-root, user, at, host, path, + vcs, percent, sad-smiley. + + The actual configuration is done via zsh's \`zstyle' mechanism. The + context, that is used while looking up styles is: + + ':prompt:grml:' + + Here is either 'items:' or 'setup'. The available + styles in the \`setup' context are: use-rprompt, items. For example, + default \`items' style could be configured like this: + + zstyle ':prompt:grml:setup' items user at host path \\ + vcs percent + + The styles: + + - use-rprompt (boolean): If \`true' (the default), print a sad smiley + in $RPROMPT if the last command a returned non-successful error + code. + + - items (list): The list of items used in the prompt. If \`vcs' is + present in the list, the theme's code invokes \`vcs_info' + accordingly. Default: rc user change-root at host path vcs precent + + Available styles in 'items:' are: pre, post. These are strings that + are inserted before (pre) and after (post) the item in question. Thus, the + following would cause the user name to be printed in red instead of the + default blue: + + zstyle ':prompt:grml:items:user' pre '%F{red}' + + Note, that the \`post' style may remain at its default value, because its + default value is '%f', which turns the foreground text attribute off (which + is exactly, what is still required with the new \`pre' value). +__EOF0__ +} + +function prompt_grml_setup () { +} + +function prompt_grml_precmd () { +} + # set prompt if zrcautoload promptinit && promptinit 2>/dev/null ; then promptinit # people should be able to use their favourite prompt + + # Since we define the required functions in here and not in files in + # $fpath, we need to stick the theme's name into `$prompt_themes' + # ourselves, since promptinit does not pick them up otherwise. + prompt_themes+=( grml ) + # Also, keep the array sorted... + prompt_themes=( "${(@on)prompt_themes}" ) else print 'Notice: no promptinit available :(' fi @@ -1396,13 +1466,13 @@ else # prompt below) if [[ $GRMLPROMPT -gt 0 ]] ; then PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D -${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< " +${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< " else # This assembles the primary prompt string if (( EUID != 0 )); then - PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< " + PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< " else - PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< " + PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOR}@%m %40<...<%B%~%b%<< " fi fi fi @@ -1784,7 +1854,6 @@ grmlcomp() { $(hostname) "$_ssh_hosts[@]" "$_etc_hosts[@]" - grml.org localhost ) zstyle ':completion:*:hosts' hosts $hosts @@ -1913,6 +1982,19 @@ if check_com -c $PAGER ; then _dnews() { _files -W /usr/share/doc -/ } compdef _dnews dnews + #f1# View Debian's copyright of a given package + dcopyright() { + emulate -L zsh + if [[ -r /usr/share/doc/$1/copyright ]] ; then + $PAGER /usr/share/doc/$1/copyright + else + echo "No copyright file for package $1 found, sorry." + return 1 + fi + } + _dcopyright() { _files -W /usr/share/doc -/ } + compdef _dcopyright dcopyright + #f1# View upstream's changelog of a given package uchange() { emulate -L zsh @@ -2632,12 +2714,15 @@ xtrename() { # API reference: https://code.google.com/apis/urlshortener/ function zurl() { emulate -L zsh + setopt extended_glob + if [[ -z $1 ]]; then print "USAGE: zurl " return 1 fi - local PN url prog api json data + local PN url prog api json contenttype item + local -a data PN=$0 url=$1 @@ -2655,11 +2740,19 @@ function zurl() { api='https://www.googleapis.com/urlshortener/v1/url' contenttype="Content-Type: application/json" json="{\"longUrl\": \"${url}\"}" - data=$($prog --silent -H ${contenttype} -d ${json} $api) - # Match against a regex and print it - if [[ $data =~ '"id": "(http://goo.gl/[[:alnum:]]+)"' ]]; then - print $match; - fi + data=(${(f)"$($prog --silent -H ${contenttype} -d ${json} $api)"}) + # Parse the response + for item in "${data[@]}"; do + case "$item" in + ' '#'"id":'*) + item=${item#*: \"} + item=${item%\",*} + printf '%s\n' "$item" + return 0 + ;; + esac + done + return 1 } #f2# Find history events by search pattern and list them by date.