From: Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
To: zsh-workers@sunsite.auc.dk
Subject: completion test suggestion
Date: Wed, 24 Feb 1999 10:29:36 +0100 (MET) [thread overview]
Message-ID: <199902240929.KAA26162@beta.informatik.hu-berlin.de> (raw)
I was thinking about Bart's suggestion yesterday, as a reminder:
${comptest[ignored(-)]}
Where the `ignored(-)' is a special kind of pattern. And this
`special' is what I didn't really like about it. But then finally it
reminded me of something I had in one of my private versions some
years ago: functions in mathematical environments. I had used a C-like
syntax (of course). So why not use that? It would go like this:
In mathematical environments you can use expressions like
`foo(x,y)'. This will invoke the function `foo' and give it the
arguments `x' and `y'. The function can be a shell function or one
defined by a module. In modules they can cause the module to be
autoloaded. This would also be one step further to implementing
anything ksh can and once we have support for floating point
arithmetic, we could have a module `math' which gives access to the
functions from the math library and things like that (considering the
floating point stuff we probably should use the parameter `REPLY' in
shell functions to report the result instead of using `return ...').
In the completion code we would have (only for the complicated tests)
the non-modifying functions:
[[ -string str ]] -> if (( string(str) > 0 )); then
IPREFIX="${IPREFIX}${PREFIX[1,string(str)-1]}"
PREFIX="${PREFIX[string(str),-1]}"
...the same for `-class'
[[ -after str ]] -> if (( rangebeg(str) < CURRENT )); then
shift 'string(str)' words
(or: words=(${(@)words[string(str),-1]}"))
...always doing matching (no `-mafter')
[[ -between s1 s2 ]] -> if (( rangebeg(s1,s2) < CURRENT &&
rangeend(s1,s2) > CURRENT )); then
words=("${(@)words[rangebeg(s1,s2),rangeend(s1,s2)]}")
In real life there would be better names for these functions, all
beginning with `comp' (any suggestions?).
To make this more friendly to the eye, we could also keep the
condition codes and make them non-modifying:
if [[ -between s1 s2 ]]; then
words=("${(@)words[rangebeg(s1,s2),rangeend(s1,s2)]}")
and so on.
Then we would only have to tell the users that mathematical
expressions now support functions which shouldn't be too
surprising. Otherwise there would be no special casing, no weird
specialised pattern syntax, almost no magic.
Oh well, if noone stops me soon, I may get really exited about this.
Bye
Sven
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
next reply other threads:[~1999-02-24 9:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-02-24 9:29 Sven Wischnowsky [this message]
1999-02-26 5:36 ` Bart Schaefer
1999-02-24 9:43 Sven Wischnowsky
1999-02-25 10:28 Sven Wischnowsky
1999-02-26 12:25 Sven Wischnowsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=199902240929.KAA26162@beta.informatik.hu-berlin.de \
--to=wischnow@informatik.hu-berlin.de \
--cc=zsh-workers@sunsite.auc.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).