From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10234 invoked from network); 17 Apr 2000 14:46:14 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 17 Apr 2000 14:46:14 -0000 Received: (qmail 1406 invoked by alias); 17 Apr 2000 14:46:01 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 10795 Received: (qmail 1399 invoked from network); 17 Apr 2000 14:46:00 -0000 Date: Mon, 17 Apr 2000 16:45:53 +0200 (MET DST) Message-Id: <200004171445.QAA16702@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: "Bart Schaefer"'s message of Fri, 14 Apr 2000 14:57:41 +0000 Subject: PATCH: zstyle+ (was: Re: List of unresolved issues) Bart Schaefer wrote: > ... [ that function to make defining styles easier ] > > No problem. Name it something else, alias it back to zstyle, and make > sure the completion autoloads use -U. > > ... > > Is "zstyle+" bad because it would mean a file with a '+' in it's name? This adds Functions/Misc/zstyle+ (noone objected to that name). Bye Sven --- /dev/null Mon Apr 17 16:43:47 2000 +++ Functions/Misc/zstyle+ Mon Apr 17 16:42:27 2000 @@ -0,0 +1,35 @@ +# This makes defining styles a bit simpler by using a single `+' as a +# special token that allows to append a context name to the previously +# used context name. Like this: +# +# zstyle+ ':foo:bar' style1 value1 \ +# + ':baz' style2 value2 \ +# + ':frob' style3 value3 +# +# This defines style1 with value1 for the context :foo:bar as usual. +# But it also defines styles2 with value2 for the context :foo:bar:baz +# and style3 with value3 for :foo:bar:frob. +# Of course, any of the sub-contexts after the plus signs may be +# empty strings to re-use the previous context unchanged. +# +# If you don't want to change all your calls to `zstyle' to use +# `zstyle+' you can use an alias `alias zstyle=zstyle+' and make sure +# the completion functions are autoloaded without alias expansion (the +# -U option to the autoload builtin). The completion system normally +# loads its functions with without alias expansion. + +case "$1" in +-*) zstyle "$@";; + +*) setopt localoptions noksharrays + integer i + local context="$1" + 1='' + for ((i=2; $#; ++i)); do + if [[ $i -gt $# || "$argv[i]" == '+' ]]; then + zstyle "$context${(@)argv[1,i-1]}" + shift "i > $# ? $# : i" # Stupid shift error on i > $# + i=1 + fi + done;; +esac -- Sven Wischnowsky wischnow@informatik.hu-berlin.de