diff options
author | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2000-04-17 14:47:24 +0000 |
---|---|---|
committer | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2000-04-17 14:47:24 +0000 |
commit | 4f1424edb22d8521756f2f59c3b87b5d70a8d2cf (patch) | |
tree | a41ce5a042da52150214b717f7693b887d04aee2 /Functions/Misc/zstyle+ | |
parent | 30a98cc4d6e54f2a5c356579aa60c2af8d344101 (diff) | |
download | zsh-4f1424edb22d8521756f2f59c3b87b5d70a8d2cf.tar.gz zsh-4f1424edb22d8521756f2f59c3b87b5d70a8d2cf.tar.xz zsh-4f1424edb22d8521756f2f59c3b87b5d70a8d2cf.zip |
zstyle+ simplifies definition of styles (10795)
Diffstat (limited to 'Functions/Misc/zstyle+')
-rw-r--r-- | Functions/Misc/zstyle+ | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Functions/Misc/zstyle+ b/Functions/Misc/zstyle+ new file mode 100644 index 000000000..eb3c14df5 --- /dev/null +++ b/Functions/Misc/zstyle+ @@ -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 |