Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Extending zsh capabilities
- X-seq: zsh-workers 4254
- From: Peter Stephenson <pws@xxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxxx (Zsh hackers list)
- Subject: Re: Extending zsh capabilities
- Date: Mon, 27 Jul 1998 14:13:33 +0200
- Cc: Mark Hessling <m.hessling@xxxxxxxxxx>
- In-reply-to: "Bruce Stephens"'s message of "27 Jul 1998 12:18:16 MST." <vbg1fnk0ef.fsf@xxxxxxxxxxxxxxx>
Bruce Stephens wrote:
> > Executing a Rexx program within a current process is straighforward,
> > I need to call the API function RexxStart() with the filename as one
> > of the arguments. The interface is simple; its knowing where to
> > hook it into zsh that is my biggest problem.
>
> How about, as a first cut, writing a builtin "rexx" which would
> execute a Rexx script? That could be done as a module (like stat).
I would have thought that was a good place to start; adding additional
capabilities in modules is very much preferred from the development point
of view, and makes it much more likely the code would be acceptable in
the main distribution. This should be very easy: just take e.g. stat.c,
rename everything, and prune it right down so that you just have one
function bound to the builtin rexx which calls RexxStart on its filename.
What you really then want is for a shell function beginning /* to run Rexx.
You can do this by sleight of hand.
% fpath=(. $fpath) # just for convenience in this example
% alias '/*'='rexx_load $0'
% cat rexx_load
local file=$1 dir
for dir in $fpath; do
[[ -f $dir/$file ]] && file=$dir/$file && break
done
print "Executing $file using Rexx"
# rexx $file
# Now force the calling function to return immediately.
trap 'return 0' EXIT
% cat rtest
/* This is to test rexx_load */
Rexx commands here
% autoload rexx_load rtest
% rtest
Executing ./rtest using Rexx
This works because zsh allows you to alias '/*' which presumably isn't
going to appear as a command anywhere else. The other tricky bit is
the trap in rexx_load which forces its parent (in this case the function
rtest running under zsh, which you don't want to continue) to return
immediately, since the EXIT trap is executed in the surrounding context.
You could extend rexx_load so that it redefines rtest to run rexx on
a series of commands (if e.g. rexx has a -e switch like perl), eliminating
the intermediate step for subsequent calls.
--
Peter Stephenson <pws@xxxxxx> Tel: +39 50 844536
WWW: http://www.ifh.de/~pws/
Gruppo Teorico, Dipartimento di Fisica
Piazza Torricelli 2, 56100 Pisa, Italy
Messages sorted by:
Reverse Date,
Date,
Thread,
Author