* PATCH: Re: tag-order func()
@ 2000-10-12 8:22 Sven Wischnowsky
2000-10-12 12:19 ` Bart Schaefer
0 siblings, 1 reply; 3+ messages in thread
From: Sven Wischnowsky @ 2000-10-12 8:22 UTC (permalink / raw)
To: zsh-workers
Bart Schaefer wrote:
> On Oct 11, 9:37am, Sven Wischnowsky wrote:
> }
> } Another thing Bart and I were thinking about some time ago was that we
> } could remove the func() functionality of the tag-order style, now that
> } we have `zstyle -e'.
> }
> } So, other opinions?
>
> I'd add back an example somewhere of how you accomplish the same thing
> with `zstyle -e' that was previously accomplished with _sort_tags. (No
> historical reference to _sort_tags is necessary.)
Ok, I've added that.
> There's also the issue that I raised in zsh-users/3421 about how very
> difficult it is to return a glob pattern via the `reply' array from
> a style defined with zstyle -e.
Hm.
% zstyle -e foo bar 'reply=( "*(@)" )'
% zstyle -a foo bar x; echo $x
*(@)
% zstyle -e foo bar 'reply=( \*\(@\) )'
% zstyle -a foo bar x; echo $x
*(@)
Any option setting that caused your problems?
Bye
Sven
Index: Completion/Core/_tags
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Core/_tags,v
retrieving revision 1.6
diff -u -r1.6 _tags
--- Completion/Core/_tags 2000/06/22 08:42:36 1.6
+++ Completion/Core/_tags 2000/10/12 08:20:08
@@ -48,11 +48,6 @@
for tag in $order; do
case $tag in
-) nodef=yes;;
- *\(\)) if ! "${${tag%%[ ]#\(\)}##[ ]#}" "$@"; then
- nodef=yes
- break
- fi
- ;;
\!*) comptry "${(@)argv:#(${(j:|:)~${=~tag[2,-1]}})}";;
?*) comptry -m "$tag";;
esac
Index: Doc/Zsh/compsys.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v
retrieving revision 1.101
diff -u -r1.101 compsys.yo
--- Doc/Zsh/compsys.yo 2000/10/12 07:08:43 1.101
+++ Doc/Zsh/compsys.yo 2000/10/12 08:20:09
@@ -1923,25 +1923,6 @@
in the description is replaced with the description given by the
completion function.
)
-item(var(func)tt(LPAR()RPAR()))(
-The function var(func) is called, which can then define the order
-in which tags are to be used based on additional context
-information. See the tt(_sort_tags) function below for a description
-of how such functions can be implemented. The return value of the
-function is used to decide if the following values for the style
-should be used. If it is zero, they are used and if it is non-zero,
-they are not used. For example:
-
-example(non-empty() { [[ -n $PREFIX ]] }
-zstyle ':completion:*:*:-command-:*' tag-order 'non-empty()')
-
-Makes completion in command position happen only if the string on the
-line is not empty. This is tested using the tt(PREFIX)
-parameter which is special in completion widgets; see
-ifzman(zshcompwid)\
-ifnzman(noderef(Completion Widgets))
-for a description of these special parameters.
-)
enditem()
In each of the cases above, the tag may also be a pattern or more than
@@ -2005,6 +1986,28 @@
time the value for the tt(matcher) style from the second call to tt(zstyle)
in the example is used to make completion case-insensitive.
+Using the tt(-e) option of the tt(zstyle) builtin command, it is
+possible to specify conditions saying when certain tags are to be
+used. For example:
+
+example(zstyle -e '*:-command-:*' tag-order '
+ if [[ -n $PREFIX ]]; then
+ reply=( )
+ else
+ reply=( - )
+ fi')
+
+Makes completion in command position happen only if the string on
+the line is not empty. This is tested using the tt(PREFIX)
+parameter which is special in completion widgets; see
+ifzman(zshcompwid)\
+ifnzman(noderef(Completion Widgets))
+for a description of these special parameters.
+Setting tt(reply) to an empty array ensures that only the default
+behaviour of trying all tags at once is used and setting it to an
+array containing only a hyphen disables that default behaviour -- thus
+keeping all tags from being tried.
+
If no style has been defined for a context, the strings
`tt((|*-)argument-* (|*-)option-* values)' and `tt(options)' plus all
tags offered by the completion function will be used to provide a
@@ -3628,89 +3631,6 @@
Note that this function is called automatically from tt(_description)
so that one normally doesn't have to call it explicitly.
-)
-findex(_sort_tags)
-item(tt(_sort_tags) var(tag) ...)(
-No such function is actually used by the completion system; as mentioned
-above for the tt(tag-order) style, it is only provided to show how
-functions that sort tags can be implemented.
-
-Inside such functions the name of the current context can
-be accessed using the tt(curcontext) parameter. For example, the
-function used in command position (called tt(_command_names)) in the
-completion can generate names of external and builtin commands, names
-of shell functions, aliases and parameters and reserved words.
-
-Example:
-
-example(_sort_tags() {
- case $curcontext in
- (*:-command-:*)
- comptry commands functions
- comptry builtins aliases
- ;;
- (*)
- .comptry "$@"
- ;;
- esac
- return 1
-})
-
-Every call to the tt(comptry) builtin command gives a
-set of tags to use; as soon as the completion system produces
-matches for one set, subsequent sets have no effect. Hence in
-the example this means that in command position on the first attempt
-only names of external commands and shell functions will be generated
-(the first call to tt(comptry)). If none of those names match the string
-from the command line the completion function will generate names of
-builtin commands and aliases as possible matches (the second call to
-tt(comptry)).
-
-For all other context names the second case-pattern matches, so that
-normally the completion functions will try all tags offered. The
-return value means that the calling function, tt(_tags), will not use
-all offered tags as a default, so in the first case names or
-parameters and reserved words will never be completed.
-
-In any context the function may call tt(comptry) as often as necessary.
-Also, any string may be given as an argument, even if no tag
-with that name was offered by the completion function. This allows
-one to give a preferred ordering for some common tag sets without
-having to worry about sensible patterns for context names. For
-example, many completion functions can generate both arguments and
-option names for commands. These functions normally use the tags
-like tt(argument-)var(num), tt(option-)var(name)tt(-)var(num) and
-tt(options). Depending on your preference you may write in your
-sorting function:
-
-example(_sort_tags() {
- comptry -m '(|*-)argument-* (|*-)option-* options'
- case $curcontext in
- ...
- esac
-})
-
-or
-
-example(_sort_tags() {
- comptry -m '(|*-)argument-* (|*-)option-*'
- comptry options
- case $curcontext in
- ...
- esac
-})
-
-The former always adds both the matches for the argument and the option
-names as possible matches. The latter forces matches for the arguments to
-be preferred. In this case option names are only generated as matches if
-the string on the line produces no possible completion for arguments;
-normally you would have to type the hyphen the option names start with
-yourself in order to see the list of option names that can be completed.
-
-With the tt(-s) option, each tag given to tt(comptry) will be put in a
-separate set. With the tt(-m) option, the arguments are treated in the
-same way as the the values for the tt(tag-order) style (except for the
-`tt(!...)', `tt(-)' and `tt(foo())' forms).
)
findex(_store_cache)
item(tt(_store_cache) var(cache_identifier) var(vars) ...)(
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: PATCH: Re: tag-order func()
2000-10-12 8:22 PATCH: Re: tag-order func() Sven Wischnowsky
@ 2000-10-12 12:19 ` Bart Schaefer
0 siblings, 0 replies; 3+ messages in thread
From: Bart Schaefer @ 2000-10-12 12:19 UTC (permalink / raw)
To: zsh-workers
On Oct 12, 10:22am, Sven Wischnowsky wrote:
}
} Bart Schaefer wrote:
}
} > There's also the issue that I raised in zsh-users/3421 about how very
} > difficult it is to return a glob pattern via the `reply' array from
} > a style defined with zstyle -e.
}
} Any option setting that caused your problems?
Try using 'zstyle -e' to put glob patterns in $reply in a context where
they will actually later be used as glob patterns, such as in the
file-patterns style. The problem isn't that zstyle -e can't return
them, but that it returns them incorrectly metafied (I think).
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: PATCH: Re: tag-order func()
@ 2000-10-12 12:52 Sven Wischnowsky
0 siblings, 0 replies; 3+ messages in thread
From: Sven Wischnowsky @ 2000-10-12 12:52 UTC (permalink / raw)
To: zsh-workers
Bart Schaefer wrote:
> On Oct 12, 10:22am, Sven Wischnowsky wrote:
> }
> } Bart Schaefer wrote:
> }
> } > There's also the issue that I raised in zsh-users/3421 about how very
> } > difficult it is to return a glob pattern via the `reply' array from
> } > a style defined with zstyle -e.
> }
> } Any option setting that caused your problems?
>
> Try using 'zstyle -e' to put glob patterns in $reply in a context where
> they will actually later be used as glob patterns, such as in the
> file-patterns style. The problem isn't that zstyle -e can't return
> them, but that it returns them incorrectly metafied (I think).
I tried:
zstyle -e ':completion:*:*:foo:*' file-patterns \
'reply=( "*.h:header:header" )'
and (from that old message, only slightly changed):
zstyle -e ':completion:*:*:foo:*' file-patterns \
'[[ $PREFIX == /usr/[^/]# ]] && reply=( "*(@)" )'
And it both works without problems for me.
Bye
Sven
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2000-10-12 12:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-10-12 8:22 PATCH: Re: tag-order func() Sven Wischnowsky
2000-10-12 12:19 ` Bart Schaefer
2000-10-12 12:52 Sven Wischnowsky
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).