From: "Drew Adams" <drew.adams@oracle.com>
To: <rms@gnu.org>
Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: RE: propose adding Icicles to Emacs
Date: Fri, 15 Jun 2007 14:04:49 -0700 [thread overview]
Message-ID: <EIENLHALHGIMHGDOLMIMEEIMDCAA.drew.adams@oracle.com> (raw)
In-Reply-To: <E1HzHMw-0002gK-29@fencepost.gnu.org>
> Are you sure that that code cannot be made modular enough to be added,
> without breaking the basic design and starting over from scratch?
>
> I am absolutely sure that my implementation of multi-command behavior
> is much cleaner. Replaceing a standard command is undesirable, so I
> would like to minimize the number of commands that we need to replace.
Which command replacement are we talking about? I already detailed what
would be needed for `completing-read' and all of the other functions Icicles
that redefines. Those things I mentioned that cannot be foregone would need
to be done anyway, irrespective of multi-commands.
Apparently I still haven't made myself clear: Icicles replaces no commands.
It simply _rebinds_ some keys (and only if a user asks it to). This is about
command remapping, which is about key bindings. There is nothing unclean
about command remapping.
I think you mean to say that your approach would provide some multi-command
behavior without the need to define some multi-commands. I agree that that
would be a good thing, if that's what you're referring to here by "commands
that we need to replace."
I just want to be clear that we do _not_ need to replace any commands. _If_
you want `find-file' to act as a multi-command, then, in Icicles, you need
to define a multi-command for that. In your approach, IIUC, `find-file'
itself (and all commands that use completion in their interactive specs)
would automatically be a multi-command. And, as I've said before, that is a
good thing: I support your idea, IIUC.
> > The only purpose that I know of for defining Icicle-find-file is to
> > implement multi-command behavior. Is there any other reason?
>
> No, that is correct - it is the only reason.
>
> That's what I thought. Therefore, my approach to multi-command
> behavior will eliminate the need for many of Icicle's substitutes for
> standard commands.
See above. You are phrasing the situation wrong (Icicles does not need to
substitute any standard commands), but I have no problem with what I think
you're really trying to say (see above).
> So I propose two things to be done in parallel:
>
> * Implement multi-command behavior at the level of Fcall_interactively.
>
> * Make a version of Icicles that doesn't define Icicle-find-file
> and the other simple replacements (which are just for the purpose
> of the multi-command feature).
Sounds good to me.
> #1 is necessary to enable `C-RET', that is, to make it a
> multi-command at all. With your implementation of
> multi-commands, some such variable would
> still be necessary in the general case, to override use of
> the command body for the action function - that is, to
> provide a different action from what the command itself
> performs when you finally choose a candidate once and for
> all.
>
> Can you explain some _specific_ reasons why that is needed?
> Becuase it seems to me we can probably do without it.
We can do without anything, of course. I already explained this and gave
examples. If you want to forego such features and have only a limited form
of multi-commands, then that's your decision.
I argued for adopting your implementation approach but also letting people
bind the 4 kinds of actions around any calls to completion functions (e.g.
`completing-read'): 1) action, 2) alternative action, 3) deletion, 4)
candidate help.
IIUC, your implementation limits a multi-command to using completion in the
`interactive' spec, and (so far), it does not let you provide specific
functions for the 4 possible multi-command actions.
> One use case is defining a command that is itself called when defining
> another command. The first command might define a default
> action function if `icicle-candidate-action-fn' is nil when it is
> called. The second command can bind the action function to
> override the default in the command it calls. (There was an
> example of this, but I no longer have one to point to.)
>
> That is rather abstract and I find I just can't follow it.
`icicle-search' provides for this, but there is today no command defined
using `icicle-search' that takes advantage of it. This is what `icicle
search' does:
(let ((icicle-candidate-action-fn
(or icicle-candidate-action-fn 'icicle-search-action))
(icicle-candidate-help-fn 'icicle-search-help)
(icicle-update-input-hook
(list 'icicle-search-highlight-all-input-matches)))
The binding of `icicle-candidate-action-fn' here lets a caller of
`icicle-search' bind its own action function, to override the default one,
`icicle-search-action'. There was a command that did that previously, but
there is none currently.
You can also see here an example of binding a candidate-help function that
is specific to this command (`icicle-search'). Icicles provides help on
individual candidates you choose (e.g. with `C-M-RET'), and a default help
function does that. It works quite well for lots of kinds of candidates, but
you might want, in your command, to define a specialized help function -
that's what `icicle-search' does: `icicle-search-help'.
> 2. `icicle-candidate-alternative-action-fn' - an alternative
> action function
> 3. `icicle-delete-candidate-object' - a deletion action
And I forgot to list:
4. `icicle-candidate-help-fn' - a candidate help function.
> The easiest way to handle these is to use properties of the
> command symbol, `minibuffer-alt-action', `minibuffer-delete-action'.
> So we could do
>
> (put 'find-file 'minibuffer-delete-action 'delete-file)
>
> S-delete would be defined to look for that property on this-command
> to decide what to do.
>
> We could implement the equivalent of `icicle-candidate-action-fn'
> easily in the same way.
Yes, that works too. I considered that, but I decided that binding was more
flexible, allowing more control over scope (overriding etc.).
next prev parent reply other threads:[~2007-06-15 21:04 UTC|newest]
Thread overview: 212+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-26 0:19 [drew.adams@oracle.com: RE: cannot find :enable in Elisp manual index] Richard Stallman
2007-05-26 6:05 ` Eli Zaretskii
2007-05-29 4:01 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Drew Adams
2007-05-29 19:12 ` Eli Zaretskii
2007-05-29 20:05 ` Stephen Berman
2007-05-29 20:58 ` Eli Zaretskii
2007-05-29 21:20 ` Stephen Berman
2007-05-29 21:25 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Drew Adams
2007-05-29 21:03 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Drew Adams
2007-05-30 3:20 ` Eli Zaretskii
2007-05-30 4:43 ` Drew Adams
2007-05-30 5:26 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Drew Adams
2007-05-30 15:17 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Johan Bockgård
2007-05-30 23:09 ` Eli Zaretskii
2007-05-30 5:23 ` David Kastrup
2007-05-30 23:01 ` Eli Zaretskii
2007-05-30 23:14 ` Eli Zaretskii
2007-06-02 2:54 ` Richard Stallman
2007-06-02 9:18 ` Jason Rumney
2007-06-02 17:29 ` Richard Stallman
2007-06-02 10:12 ` Robert J. Chassell
2007-06-02 17:29 ` Richard Stallman
2007-06-02 23:47 ` Robert J. Chassell
2007-06-03 21:27 ` Richard Stallman
2007-06-02 10:18 ` Alan Mackenzie
2007-06-02 14:36 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Drew Adams
2007-06-02 17:26 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Eli Zaretskii
2007-06-02 23:47 ` Alan Mackenzie
2007-06-02 23:48 ` Jason Rumney
2007-06-02 17:29 ` Richard Stallman
2007-06-02 18:10 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Drew Adams
2007-06-03 21:27 ` Richard Stallman
2007-06-04 5:30 ` [drew.adams@oracle.com: RE: cannot find :enable inElispmanualindex] Drew Adams
2007-06-02 23:01 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Miles Bader
2007-06-03 0:00 ` Karl Berry
2007-06-03 21:27 ` Richard Stallman
2007-06-03 22:52 ` Juri Linkov
2007-06-03 23:55 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Drew Adams
2007-06-04 5:01 ` Richard Stallman
2007-06-04 5:42 ` [drew.adams@oracle.com: RE: cannot find :enable inElispmanualindex] Drew Adams
2007-06-04 23:20 ` Richard Stallman
2007-06-05 0:10 ` [drew.adams@oracle.com: RE: cannot find :enableinElispmanualindex] Drew Adams
2007-06-06 0:50 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Stefan Monnier
2007-06-06 2:12 ` Drew Adams
2007-06-06 12:26 ` Stefan Monnier
2007-06-06 13:54 ` Drew Adams
2007-06-06 15:06 ` [drew.adams@oracle.com: RE: cannot find :enable inElispmanualindex] Drew Adams
2007-06-06 18:44 ` Juri Linkov
2007-06-06 20:01 ` Stefan Monnier
2007-06-06 20:51 ` Juri Linkov
2007-06-06 21:18 ` Stefan Monnier
2007-06-06 22:01 ` Juri Linkov
2007-06-06 22:24 ` Stefan Monnier
2007-06-06 22:40 ` Karl Berry
2007-06-07 12:37 ` Stefan Monnier
2007-06-07 22:22 ` Karl Berry
2007-06-08 1:00 ` Stefan Monnier
2007-06-08 2:28 ` Karl Berry
2007-06-08 6:58 ` csant
2007-06-08 15:42 ` Stefan Monnier
2007-06-08 7:12 ` Stefan Monnier
2007-06-08 8:34 ` Juri Linkov
2007-06-06 22:04 ` Karl Berry
2007-06-08 7:11 ` Richard Stallman
2007-06-08 8:32 ` Juri Linkov
2007-06-08 15:46 ` Stefan Monnier
2007-06-08 15:52 ` propose adding Icicles to Emacs Drew Adams
2007-06-10 13:19 ` Richard Stallman
2007-06-10 17:16 ` Drew Adams
2007-06-10 18:22 ` Sean O'Rourke
2007-06-11 0:09 ` Drew Adams
2007-06-11 9:44 ` Richard Stallman
2007-06-11 18:33 ` Drew Adams
2007-06-11 19:17 ` Stefan Monnier
2007-06-11 20:53 ` Drew Adams
2007-06-11 21:46 ` Stefan Monnier
2007-06-11 23:21 ` Drew Adams
2007-06-13 8:06 ` Richard Stallman
2007-06-14 7:48 ` Richard Stallman
2007-06-14 15:51 ` Drew Adams
2007-06-14 16:07 ` Stefan Monnier
2007-06-15 0:39 ` Drew Adams
2007-06-15 19:22 ` Richard Stallman
2007-06-15 21:04 ` Drew Adams
2007-06-16 18:51 ` Richard Stallman
2007-06-16 18:51 ` Richard Stallman
2007-06-16 18:51 ` Richard Stallman
2007-06-16 20:53 ` Drew Adams
2007-06-17 8:54 ` Richard Stallman
2007-06-17 18:48 ` Juri Linkov
2007-06-17 20:39 ` Drew Adams
2007-06-17 21:18 ` Juri Linkov
2007-06-17 23:07 ` Drew Adams
2007-06-18 21:17 ` Juri Linkov
2007-06-18 23:31 ` Drew Adams
2007-06-19 8:16 ` Juri Linkov
2007-06-19 14:47 ` Drew Adams
2007-06-18 14:56 ` Stefan Monnier
2007-06-19 22:26 ` Richard Stallman
2007-06-20 6:46 ` Stefan Monnier
2007-06-28 2:41 ` Stefan Monnier
2007-06-28 15:47 ` Drew Adams
2007-06-28 19:25 ` Richard Stallman
2007-06-28 20:03 ` Stefan Monnier
2007-06-29 5:10 ` Richard Stallman
2007-06-18 21:31 ` Richard Stallman
2007-06-19 3:52 ` Stefan Monnier
2007-06-19 22:26 ` Richard Stallman
2007-06-19 23:11 ` Drew Adams
2007-06-20 1:19 ` Stefan Monnier
2007-06-19 22:47 ` Drew Adams
2007-06-19 23:15 ` Drew Adams
2007-06-20 14:19 ` Juri Linkov
2007-06-20 15:13 ` Drew Adams
2007-06-20 15:13 ` Stefan Monnier
2007-06-20 15:34 ` Drew Adams
2007-06-20 15:50 ` Juri Linkov
2007-06-20 16:02 ` Juanma Barranquero
2007-06-20 16:38 ` Drew Adams
2007-06-20 17:28 ` Drew Adams
2007-06-20 17:51 ` Juri Linkov
2007-06-21 1:07 ` Richard Stallman
2007-06-19 22:48 ` Drew Adams
2007-06-20 17:36 ` Richard Stallman
2007-06-16 18:51 ` Richard Stallman
2007-06-16 19:58 ` Drew Adams
2007-06-16 18:51 ` Richard Stallman
2007-06-16 22:36 ` Drew Adams
2007-06-17 21:49 ` Richard Stallman
2007-06-16 18:51 ` Richard Stallman
2007-06-16 22:29 ` Drew Adams
2007-06-17 21:48 ` Richard Stallman
2007-06-17 22:18 ` Drew Adams
2007-06-18 16:15 ` Drew Adams
2007-06-25 13:19 ` Richard Stallman
2007-06-25 14:57 ` Drew Adams
2007-06-25 19:52 ` Richard Stallman
2007-06-25 21:40 ` Drew Adams
2007-06-26 16:57 ` Richard Stallman
2007-06-26 17:36 ` Drew Adams
2007-07-01 20:40 ` Richard Stallman
2007-07-01 21:54 ` Drew Adams
2007-07-02 19:47 ` Richard Stallman
2007-07-02 22:19 ` Drew Adams
2007-07-03 4:24 ` Richard Stallman
2007-07-03 7:56 ` Drew Adams
2007-07-04 3:43 ` Richard Stallman
2007-07-04 6:13 ` Drew Adams
2007-06-25 20:47 ` Juri Linkov
2007-06-21 18:35 ` Davis Herring
2007-06-21 18:39 ` Lennart Borgman (gmail)
2007-06-21 20:42 ` Drew Adams
2007-06-21 22:27 ` Davis Herring
2007-06-22 0:20 ` Drew Adams
2007-06-24 14:40 ` Richard Stallman
2007-06-15 8:48 ` Richard Stallman
2007-06-15 13:23 ` Drew Adams
2007-06-15 22:45 ` Richard Stallman
2007-06-13 16:21 ` Richard Stallman
2007-06-13 16:22 ` Richard Stallman
2007-06-13 19:00 ` Drew Adams
2007-06-14 16:19 ` Richard Stallman
2007-06-15 1:01 ` Drew Adams
2007-06-15 19:22 ` Richard Stallman
2007-06-15 21:04 ` Drew Adams
2007-06-16 18:50 ` Richard Stallman
2007-06-17 18:46 ` Juri Linkov
2007-06-17 19:35 ` Drew Adams
2007-06-18 21:31 ` Richard Stallman
2007-06-11 9:44 ` Richard Stallman
2007-06-11 17:29 ` Drew Adams
2007-06-11 18:10 ` Stefan Monnier
2007-06-13 8:07 ` Richard Stallman
2007-06-13 15:23 ` Drew Adams
2007-06-14 7:49 ` Richard Stallman
2007-06-15 0:41 ` Drew Adams
2007-06-15 19:22 ` Richard Stallman
2007-06-15 21:04 ` Drew Adams [this message]
2007-06-16 18:51 ` Richard Stallman
2007-06-16 22:30 ` Drew Adams
2007-06-13 8:07 ` Richard Stallman
2007-06-11 3:49 ` Miles Bader
2007-06-11 7:24 ` Drew Adams
2007-06-11 16:25 ` Richard Stallman
2007-06-11 9:44 ` Richard Stallman
2007-06-11 18:41 ` Drew Adams
2007-06-12 0:43 ` Miles Bader
2007-06-12 8:08 ` Kim F. Storm
2007-06-12 9:18 ` joakim
2007-06-12 11:04 ` Kim F. Storm
2007-06-12 11:16 ` joakim
2007-06-12 13:30 ` Drew Adams
2007-06-12 14:06 ` keys that work on terminals (was: Re: propose adding Icicles to Emacs) Dan Nicolaescu
2007-06-12 14:45 ` keys that work on terminals joakim
2007-06-12 13:22 ` propose adding Icicles to Emacs Drew Adams
2007-06-06 15:43 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Stefan Monnier
2007-06-04 5:01 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Richard Stallman
2007-06-04 23:51 ` Juri Linkov
2007-06-05 3:55 ` Miles Bader
2007-06-05 16:29 ` Juri Linkov
2007-06-05 17:12 ` [drew.adams@oracle.com: RE: cannot find :enable in Elispmanualindex] Drew Adams
2007-06-05 19:17 ` [drew.adams@oracle.com: RE: cannot find :enable in Elisp manualindex] Richard Stallman
2007-06-05 22:32 ` Richard Stallman
2007-06-06 0:32 ` Karl Berry
2007-06-06 22:10 ` Richard Stallman
2007-06-06 22:21 ` Karl Berry
2007-06-02 22:34 ` Juri Linkov
2007-06-02 22:42 ` Juri Linkov
2007-06-03 3:07 ` Eli Zaretskii
2007-06-03 9:34 ` Juri Linkov
2007-06-03 21:23 ` Karl Berry
2007-06-03 21:27 ` Richard Stallman
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=EIENLHALHGIMHGDOLMIMEEIMDCAA.drew.adams@oracle.com \
--to=drew.adams@oracle.com \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=rms@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.