zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <pws@ifh.de>
To: zsh-workers@math.gatech.edu (Zsh hackers list)
Subject: Handling for ZLE modules
Date: Fri, 08 Nov 1996 16:26:04 +0100	[thread overview]
Message-ID: <199611081526.QAA01276@hydra.ifh.de> (raw)

I'm so impressed with the dynamic library code I couldn't resist
implementing a way of allowing you to load new ZLE functions from
modules.

My thinking was this: there are 162 builtin functions and you're
presumably never going to add more than a half dozen or so new ones
(very likely none).  Thus it didn't seem sensible to reorganize the
existing function table into malloc'd memory.  Instead, I've made a
new table for any functions that are loaded and modified the zle code
via a #define, ZLEGETCMD, to choose between the arrays based on
number.  I don't think this should be too inefficient; the worst case
is in executenamedcommand() when looping through looking for a prefix.
If it ever seems a good idea to allow overloading of builtin functions
this may well need changing.  That's the only major change to zle
itself; note that for non-dynamic zsh's it will work quite happily
without the functions (add|delete)zlefunction() defined in
module.c. I'd be glad to hear of better ways of doing it.

The other question is how to handle unloading.  One has to be careful
when bindings remain which point to the function; also, the functions
are in a linear array like the builtin functions and you may not be
deleting at the end.  I have arranged it so that the function is
marked as deleted with name "<deleted>" (which should only be used for
output), but the table entry is kept. Executing the binding performs a
feep().  That's probably fine, the only problem arises when you load
another module which then inherits the slot in the table and hence the
binding will point to that.  This seems to me a problem to be fixed in
any script code associated with the (z?)modload -u, in particular via
    bindkey | grep '<deleted>' | while read -A line; do
        eval bindkey -r $line[0]
    done
-- I don't think it's worthwhile adding that code to the shell, though
it wouldn't be hard.

The sample module mod_deltochar implements Emacs' zap-to-char (except
it's here called delete-to-char) which reads a key and deletes up to
and including the next occurrence of that character on the command
line.  Multipliers work as expected.  (I've always wanted
zap-to-char.)  Just do `make mod_deltochar.so'.

All this code is as up-in-the-air as Zoltan's, of course.

begin 644 zle_mod.dif.gz
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
4;_\'N;SB-)Z%N_\$F6-O9?XV``#X
`
end

-- 
Peter Stephenson <pws@ifh.de>       Tel: +49 33762 77366
WWW:  http://www.ifh.de/~pws/       Fax: +49 33762 77413
Deutches Electronen-Synchrotron --- Institut fuer Hochenergiephysik Zeuthen
DESY-IfH, 15735 Zeuthen, Germany.


             reply	other threads:[~1996-11-08 15:39 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-11-08 15:26 Peter Stephenson [this message]
1996-11-08 17:16 ` Zefram
1996-11-08 17:26   ` Bruce Stephens
1996-11-10 23:55   ` Zoltan Hidvegi
1996-11-11 13:07   ` Peter Stephenson
     [not found] ` <pws@ifh.de>
1996-11-08 16:45   ` Bart Schaefer
1996-11-11 16:02   ` Bart Schaefer
1996-11-13 18:53   ` zle_refresh trial patch (and unrelated bug) Bart Schaefer
1996-11-14  9:03     ` Peter Stephenson
1996-11-14 14:57       ` Zefram
1996-11-09 10:22 zle_refresh trial patch Geoff Wing
     [not found] ` <gwing@primenet.com.au>
1996-11-09 17:09   ` zle_refresh trial patch (and unrelated bug) Bart Schaefer
1996-11-12 12:40     ` Peter Stephenson

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=199611081526.QAA01276@hydra.ifh.de \
    --to=pws@ifh.de \
    --cc=zsh-workers@math.gatech.edu \
    /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).