unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
Subject: RE: feature request: indicator of minibuffer-recursion depth
Date: Fri, 17 Mar 2006 10:06:36 -0800	[thread overview]
Message-ID: <DNEMKBNJBGPAOPIJOOICCENNDDAA.drew.adams@oracle.com> (raw)
In-Reply-To: <E1FKHsG-0000Nt-W6@fencepost.gnu.org>

    Regarding the proposal for recursive minibuffer commands to
    quit the outer minibuffer:

1) Are you referring to David R's suggestion to "automatically quit the
command that's occupying the minibuffer whenever another command requires
it"?

David's example was `C-x b' after `C-x C-f'. I think he was suggesting that
`C-x b' should "take over", so that `C-x C-f' is abandoned (analogous to
`C-x b' exiting incremental search). Is that what you mean too?

Also, I believe that David was talking only about the case where
`enable-recursive-minibuffers' is nil. I don't think he suggested to change
the non-nil behavior. Is your "recursive minibuffer commands to quit the
outer minibuffer" also only for the nil case? (I hope so.)


2) Regarding the non-nil case, there is the question of how to handle
exiting the second command (the one that opens a recursive minibuffer).
Currently, no matter how you exit this recursive-minibuffer command (`RET',
`C-g'), you return to the previous level. It can be convenient sometimes for
a command at a deeper minibuffer level to return its result directly to the
top-level command reading minibuffer input - if the recursive-minibuffer
command knows that that is the right thing to do.

For example, an application I have uses recursive minibuffers to provide
additional match patterns for completion. You invoke a command that reads
another pattern in a recursive minibuffer, and that pattern applies to the
existing set of completion candidates, filtering them further. The effect is
cumulative, so there is no logical need to pass the result up the chain of
recursive minibuffers one by one, to return it to the top level.

Instead of requiring the user to exit from each level in turn (passing along
the same result value), I provide a `catch' within (a redefined)
`completing-read' and `read-file-name' to receive the `throw'n result. So,
`RET' effectively chooses a completion candidate for the top-level command.
(`C-g' cancels only a single minibuffer level, as usual.)

This works whenever `completing-read' or `read-file-name' is used, but
whenever `interactive' is used with a literal spec string (e.g. "fFile: ")
the user must still traverse the recursive minibuffer levels one by one.
Since literal `interactive' specs are handled by C code, my Lisp code has no
way to intervene there.

So, how about adding such a `catch' at a lower implementation level, so it
can be used with literal `interactive' specs also? IOW, implement the
equivalent of this change to `completing-read' (where `old-completing-read'
is the built-in `completing-read'), but at a lower level:

 (catch 'read-top
  (old-completing-read prompt table predicate require-match
                       initial-input hist def inherit-input-method)

Of course, most commands, perhaps even most commands that are used to open a
recursive minibuffer, will never `throw' their result here. But those that
want to could.

Just food for thought, for a possible change after the release.

  parent reply	other threads:[~2006-03-17 18:06 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-14 17:57 feature request: indicator of minibuffer-recursion depth Drew Adams
2006-03-14 18:13 ` Masatake YAMATO
2006-03-14 18:19   ` Drew Adams
2006-03-14 21:59     ` David Kastrup
2006-03-15  9:28       ` Miles Bader
2006-03-15  9:38         ` David Kastrup
2006-03-15 10:15           ` Miles Bader
2006-03-16  2:46             ` Miles Bader
2006-03-16 16:51               ` Drew Adams
2006-03-17  2:29                 ` Miles Bader
2006-03-16 18:44               ` Edward O'Connor
2006-03-16 21:35               ` Kim F. Storm
2006-03-16 23:16                 ` Drew Adams
2006-03-16 23:39                   ` Kim F. Storm
2006-03-16 23:56                     ` Drew Adams
2006-03-17  2:37                 ` Miles Bader
2006-03-18  8:44                 ` Richard Stallman
2006-03-20  2:39                   ` Miles Bader
2006-03-21  1:01                     ` Richard Stallman
2007-06-06 11:29                     ` Juanma Barranquero
2007-06-15 14:37                       ` Kim F. Storm
2007-06-15 15:52                         ` Juanma Barranquero
2007-06-15 16:27                           ` Juri Linkov
2007-06-15 17:41                             ` Juanma Barranquero
2007-06-15 18:39                               ` Stefan Monnier
2007-06-15 18:48                                 ` Juanma Barranquero
2007-06-16 17:08                                 ` Andreas Röhler
2007-06-15 19:41                             ` Drew Adams
2007-06-15 19:47                               ` Juanma Barranquero
2007-06-15 20:42                                 ` Drew Adams
2007-06-15 23:20                                   ` Juanma Barranquero
2007-06-16  1:17                                     ` Drew Adams
2007-06-16  1:30                                       ` Juanma Barranquero
2007-06-16  5:40                                         ` Drew Adams
2007-06-16 11:32                                           ` Juanma Barranquero
2007-06-16 12:47                                             ` Juri Linkov
2007-06-16 14:36                                             ` Drew Adams
2007-06-15 22:45                             ` Richard Stallman
2007-06-15 23:10                               ` Juri Linkov
2007-06-15 23:19                                 ` Juanma Barranquero
2007-06-15 23:34                                   ` Juri Linkov
2007-06-15 23:47                                     ` Juanma Barranquero
2007-06-15 23:57                                       ` Juri Linkov
2007-06-16  0:24                                         ` Juanma Barranquero
2007-06-16 18:50                                 ` Richard Stallman
2006-07-15 23:41                 ` Drew Adams
2006-07-17  1:41                   ` Richard Stallman
2006-07-17  8:33                     ` Kim F. Storm
2006-07-17 10:01                       ` Mathias Dahl
2006-11-19  1:25                       ` Drew Adams
2006-11-19  1:52                         ` Juanma Barranquero
2006-11-19 15:48                           ` Drew Adams
2006-11-19 16:19                             ` Juanma Barranquero
2006-11-19 20:19                               ` Drew Adams
2006-11-19 22:02                                 ` Juanma Barranquero
2006-11-20  2:22                                   ` Drew Adams
2006-08-05 22:04                   ` Drew Adams
2006-03-15  9:44         ` David Kastrup
2006-03-16 10:32           ` Richard Stallman
2006-03-15 15:59         ` Drew Adams
2006-03-15 18:30           ` Stefan Monnier
2006-03-15 19:18         ` David Reitter
2006-03-15 19:52           ` Drew Adams
2006-03-17 16:32           ` Richard Stallman
2006-03-17 17:17             ` David Kastrup
2006-03-17 22:02               ` Kim F. Storm
2006-03-18 18:29               ` Richard Stallman
2006-03-17 18:06             ` Drew Adams [this message]
2006-03-18 18:30               ` Richard Stallman
2006-03-15 15:59       ` Drew Adams
2006-03-15 16:19     ` Stefan Monnier
2006-03-15 17:01       ` Drew Adams
2006-03-15 20:20 ` 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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DNEMKBNJBGPAOPIJOOICCENNDDAA.drew.adams@oracle.com \
    --to=drew.adams@oracle.com \
    /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.savannah.gnu.org/cgit/emacs.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).