unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* feature request: indicator of minibuffer-recursion depth
@ 2006-03-14 17:57 Drew Adams
  2006-03-14 18:13 ` Masatake YAMATO
  2006-03-15 20:20 ` Richard Stallman
  0 siblings, 2 replies; 73+ messages in thread
From: Drew Adams @ 2006-03-14 17:57 UTC (permalink / raw)


For consideration after the release -

Recursive-edit depth is indicated in the mode line by bracketing ([...]).
Being in a recursive minibuffer without knowing it is about as disorienting
as being in a recursive edit without knowing it. AFAIK, there is no feedback
regarding minibuffer-recursion depth.

How about having some indication (somewhere) of the minibuffer-recursion
depth? Perhaps use {...} in the mode line for this (like [...])? (Both
recursions are possible at the same time, though that is not common.)

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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-15 20:20 ` Richard Stallman
  1 sibling, 1 reply; 73+ messages in thread
From: Masatake YAMATO @ 2006-03-14 18:13 UTC (permalink / raw)
  Cc: emacs-devel

> For consideration after the release -
> 
> Recursive-edit depth is indicated in the mode line by bracketing ([...]).
> Being in a recursive minibuffer without knowing it is about as disorienting
> as being in a recursive edit without knowing it. AFAIK, there is no feedback
> regarding minibuffer-recursion depth.
>
> How about having some indication (somewhere) of the minibuffer-recursion
> depth? 

I think it is good idea.

> Perhaps use {...} in the mode line for this (like [...])? (Both
> recursions are possible at the same time, though that is not common.)

How do you think put [] on the prompt in minibuffer like:

[M-x] 
[[M-x]]
[[[Find file: ]]] ~/

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-14 18:13 ` Masatake YAMATO
@ 2006-03-14 18:19   ` Drew Adams
  2006-03-14 21:59     ` David Kastrup
  2006-03-15 16:19     ` Stefan Monnier
  0 siblings, 2 replies; 73+ messages in thread
From: Drew Adams @ 2006-03-14 18:19 UTC (permalink / raw)


    > How about having some indication (somewhere) of the
    > minibuffer-recursion depth?

    I think it is good idea.

    > Perhaps use {...} in the mode line for this (like [...])? (Both
    > recursions are possible at the same time, though that is not common.)

    How do you think put [] on the prompt in minibuffer like:
    [M-x]
    [[M-x]]
    [[[Find file: ]]] ~/

We can discuss the design after the release, if people think the idea is
useful.

However, personally I would prefer not to burden the prompt (which can
already be quite complex) and instead put the indicator in the mode line
somehow.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-14 18:19   ` Drew Adams
@ 2006-03-14 21:59     ` David Kastrup
  2006-03-15  9:28       ` Miles Bader
  2006-03-15 15:59       ` Drew Adams
  2006-03-15 16:19     ` Stefan Monnier
  1 sibling, 2 replies; 73+ messages in thread
From: David Kastrup @ 2006-03-14 21:59 UTC (permalink / raw)
  Cc: emacs-devel

"Drew Adams" <drew.adams@oracle.com> writes:

>     > How about having some indication (somewhere) of the
>     > minibuffer-recursion depth?
>
>     I think it is good idea.
>
>     > Perhaps use {...} in the mode line for this (like [...])? (Both
>     > recursions are possible at the same time, though that is not common.)
>
>     How do you think put [] on the prompt in minibuffer like:
>     [M-x]
>     [[M-x]]
>     [[[Find file: ]]] ~/
>
> We can discuss the design after the release, if people think the idea is
> useful.
>
> However, personally I would prefer not to burden the prompt (which can
> already be quite complex) and instead put the indicator in the mode line
> somehow.

The minibuffer does not have a mode line.  And if we want to avoid
confusion, putting the indicator somewhere far away from the
minibuffer would not help.  I think the minibuffer prompt a better
place.  And using the same "recursive" indicator as recursive edits do
in the mode line is sensible as well in my book.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-14 21:59     ` David Kastrup
@ 2006-03-15  9:28       ` Miles Bader
  2006-03-15  9:38         ` David Kastrup
                           ` (3 more replies)
  2006-03-15 15:59       ` Drew Adams
  1 sibling, 4 replies; 73+ messages in thread
From: Miles Bader @ 2006-03-15  9:28 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

David Kastrup <dak@gnu.org> writes:
> The minibuffer does not have a mode line.  And if we want to avoid
> confusion, putting the indicator somewhere far away from the
> minibuffer would not help.  I think the minibuffer prompt a better
> place.  And using the same "recursive" indicator as recursive edits do
> in the mode line is sensible as well in my book.

I don't think it's trivial to modify the prompt like that though -- in
most cases, the minibuffer prompt is just a part of the minbuffer, and
blindly modifying it may screw other things up.

Given that the default is to disable recursive minibuffer use entirely,
and the people who intentionally enable such usage tend to be more
knowledgeable users (and thus less likely to be confused by recursive
minibuffers), it seems that such an indicator would be of somewhat
limited applicability.

-Miles
-- 
In New York, most people don't have cars, so if you want to kill a person, you
have to take the subway to their house.  And sometimes on the way, the train
is delayed and you get impatient, so you have to kill someone on the subway.
  [George Carlin]

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15  9:28       ` Miles Bader
@ 2006-03-15  9:38         ` David Kastrup
  2006-03-15 10:15           ` Miles Bader
  2006-03-15  9:44         ` David Kastrup
                           ` (2 subsequent siblings)
  3 siblings, 1 reply; 73+ messages in thread
From: David Kastrup @ 2006-03-15  9:38 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

Miles Bader <miles.bader@necel.com> writes:

> David Kastrup <dak@gnu.org> writes:
>> The minibuffer does not have a mode line.  And if we want to avoid
>> confusion, putting the indicator somewhere far away from the
>> minibuffer would not help.  I think the minibuffer prompt a better
>> place.  And using the same "recursive" indicator as recursive edits do
>> in the mode line is sensible as well in my book.
>
> I don't think it's trivial to modify the prompt like that though -- in
> most cases, the minibuffer prompt is just a part of the minbuffer, and
> blindly modifying it may screw other things up.

Well, there are things like minibuffer-electric-default-mode already
fiddling with the minibuffer prompt, so it would not seem like that
would be inattainable.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15  9:28       ` Miles Bader
  2006-03-15  9:38         ` David Kastrup
@ 2006-03-15  9:44         ` David Kastrup
  2006-03-16 10:32           ` Richard Stallman
  2006-03-15 15:59         ` Drew Adams
  2006-03-15 19:18         ` David Reitter
  3 siblings, 1 reply; 73+ messages in thread
From: David Kastrup @ 2006-03-15  9:44 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

Miles Bader <miles.bader@necel.com> writes:

[...]

> Given that the default is to disable recursive minibuffer use
> entirely, and the people who intentionally enable such usage tend to
> be more knowledgeable users (and thus less likely to be confused by
> recursive minibuffers), it seems that such an indicator would be of
> somewhat limited applicability.

Uh, what?  We are not talking about

[You are in recursive minibuffer mode! Press C-g to exit it]

We are talking about

[[M-x]] ...

You already need to have a clue about the concept to interpret that.

Anyway, don't be too sure that everybody with disabled recursive
minibuffer has intentionally done so: most people's dotemacs is pasted
together from multiple sources without a clue.

One should probably place an electronic signature into dotemacs files
and prohibit people from using any code they have not entered all by
themselves.

But I guess this scheme would not be compatible with GPL3.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15  9:38         ` David Kastrup
@ 2006-03-15 10:15           ` Miles Bader
  2006-03-16  2:46             ` Miles Bader
  0 siblings, 1 reply; 73+ messages in thread
From: Miles Bader @ 2006-03-15 10:15 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

David Kastrup <dak@gnu.org> writes:
> Well, there are things like minibuffer-electric-default-mode already
> fiddling with the minibuffer prompt, so it would not seem like that
> would be inattainable.

Certainly not unattainable, but probably rather fiddly.

-Miles
-- 
`Cars give people wonderful freedom and increase their opportunities.
 But they also destroy the environment, to an extent so drastic that
 they kill all social life' (from _A Pattern Language_)

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-14 21:59     ` David Kastrup
  2006-03-15  9:28       ` Miles Bader
@ 2006-03-15 15:59       ` Drew Adams
  1 sibling, 0 replies; 73+ messages in thread
From: Drew Adams @ 2006-03-15 15:59 UTC (permalink / raw)


    > We can discuss the design after the release, if people think
    > the idea is useful.
    >
    > However, personally I would prefer not to burden the prompt (which can
    > already be quite complex) and instead put the indicator in
    > the mode line somehow.

    The minibuffer does not have a mode line.  And if we want to avoid
    confusion, putting the indicator somewhere far away from the
    minibuffer would not help.

Mode line far away from the minibuffer?  I use a standalone minibuffer frame
(with no mode line, as you point out), and I still wouldn't have trouble
seeing the indicator in the mode line.

    I think the minibuffer prompt a better
    place.  And using the same "recursive" indicator as recursive edits do
    in the mode line is sensible as well in my book.

Anyway, we can figure out the best design after the release. It sounds like
you might be in favor of such a feature, at least.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-15  9:28       ` Miles Bader
  2006-03-15  9:38         ` David Kastrup
  2006-03-15  9:44         ` David Kastrup
@ 2006-03-15 15:59         ` Drew Adams
  2006-03-15 18:30           ` Stefan Monnier
  2006-03-15 19:18         ` David Reitter
  3 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-03-15 15:59 UTC (permalink / raw)


    I don't think it's trivial to modify the prompt like that though -- in
    most cases, the minibuffer prompt is just a part of the minbuffer, and
    blindly modifying it may screw other things up.

Yes.

1) Non-trivial to do well (in all cases).

2) The minibuffer content is often complex already (prompt info, default
value info, choice info ([ynq!.]), sometimes minibuffer-message
feedback,...)

    Given that the default is to disable recursive minibuffer use entirely,
    and the people who intentionally enable such usage tend to be more
    knowledgeable users (and thus less likely to be confused by recursive
    minibuffers), it seems that such an indicator would be of somewhat
    limited applicability.

Perhaps, but it wouldn't hurt. Even those intrepid souls who venture within
the grotto of recursive minibuffers might appreciate such a compass.
Recursive edits are also relatively rare, but we offer a (mode-line) compass
for them.

FWIW - I have an application that lets users match completion candidates
against regexp input. Because it is sometimes simpler to use more than one
simple regexp than it is to come up with an equivalent single, complex
regexp, they can alternatively enter multiple regexps in recursive
minibuffers (to get the match intersection - like grep foo *.c | grep bar |
grep toto).

This is just an example of using recursive minibuffers with an application.
There could be other such uses. (I could of course add a recursion-depth
indicator myself, for that particular app.)

FWIW2 - In my standalone minibuffer setup I modify the minibuffer-frame
background hue slightly each time the minibuffer recursion-depth changes. I
also modify it when in isearch. This feedback is subtle, but it helps you
"feel" where you are.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-14 18:19   ` Drew Adams
  2006-03-14 21:59     ` David Kastrup
@ 2006-03-15 16:19     ` Stefan Monnier
  2006-03-15 17:01       ` Drew Adams
  1 sibling, 1 reply; 73+ messages in thread
From: Stefan Monnier @ 2006-03-15 16:19 UTC (permalink / raw)
  Cc: emacs-devel

> However, personally I would prefer not to burden the prompt (which can
> already be quite complex) and instead put the indicator in the mode line
> somehow.

At startup my Emacs has 1 frame, with 1 (mini) window, and 0 mode-lines.
Also, even after I've opened a few other frames, there's still only ever
1 miniwindow and it has no mode-line next to it (and all the frames with
their mode lines may be iconified or displayed on some other display).

I.e. putting the info on the mode line is not a good idea.


        Stefan

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-15 16:19     ` Stefan Monnier
@ 2006-03-15 17:01       ` Drew Adams
  0 siblings, 0 replies; 73+ messages in thread
From: Drew Adams @ 2006-03-15 17:01 UTC (permalink / raw)


    > However, personally I would prefer not to burden the prompt (which can
    > already be quite complex) and instead put the indicator in
    > the mode line somehow.

    At startup my Emacs has 1 frame, with 1 (mini) window, and 0 mode-lines.
    Also, even after I've opened a few other frames, there's still only ever
    1 miniwindow and it has no mode-line next to it (and all the frames with
    their mode lines may be iconified or displayed on some other display).

Well, then you have the same problem already with recursive edits, no? And
the same problem with other stuff that Emacs puts into the mode line.
Obviously, if someone chooses not to show mode lines, then mode line stuff
is, well, not visible ;-).

A minibuffer recursion-depth indicator (which you seem to favor, in general)
would be a new feature. If you've gotten by so far without any such
indication, and you often do without similar stuff (edit recursion-depth
indicator) that is already in the mode line, then perhaps you'll not miss
it?

My guess is that most people do show mode lines most - nay all - of the
time. I could be wrong.

    I.e. putting the info on the mode line is not a good idea.

for those people who don't display mode lines.

Where would you put the info? So far, the mode line and the minibuffer have
been suggested.

Here's another idea: Use the minibuffer window fringe as a recursion-depth
indicator somehow. (That's probably not a great idea; I'm not sure what uses
the fringe might already serve in the minibuffer, or what uses it might
better serve there in the future.)

To me, it makes sense to put the two recursion-depth indicators in the same
place (mode line).  You would see things like [[[...]]] for recursive edits
and things like {{...}} for recursive minibuffers. If, for some reason, you
entered a recursive minibuffer from a recursive edit, the indicator would be
[{...}]. The opposite order of events would be indicated by {[...]}.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15 15:59         ` Drew Adams
@ 2006-03-15 18:30           ` Stefan Monnier
  0 siblings, 0 replies; 73+ messages in thread
From: Stefan Monnier @ 2006-03-15 18:30 UTC (permalink / raw)
  Cc: emacs-devel

> 1) Non-trivial to do well (in all cases).

> 2) The minibuffer content is often complex already (prompt info, default
> value info, choice info ([ynq!.]), sometimes minibuffer-message
> feedback,...)

I don't think it has to be hard.  The least-intrusive way is probably to not
add text in the (mini)buffer, but to use overlays with after/before-strings.


        Stefan

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15  9:28       ` Miles Bader
                           ` (2 preceding siblings ...)
  2006-03-15 15:59         ` Drew Adams
@ 2006-03-15 19:18         ` David Reitter
  2006-03-15 19:52           ` Drew Adams
  2006-03-17 16:32           ` Richard Stallman
  3 siblings, 2 replies; 73+ messages in thread
From: David Reitter @ 2006-03-15 19:18 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

On 15 Mar 2006, at 09:28, Miles Bader wrote:

> Given that the default is to disable recursive minibuffer use  
> entirely,
> and the people who intentionally enable such usage tend to be more
> knowledgeable users (and thus less likely to be confused by recursive
> minibuffers), it seems that such an indicator would be of somewhat
> limited applicability.

Let's say it adds another visual clue that wants to be deciphered.  
The cost/benefit ratio is debatable.

Either way, since you are implying that the default setting  
(recursive minibuffers off) is easier to understand, I'd like to  
bring up the following problem that the default behavior may pose.
Let's step through a simple thought experiment, logging the steps a  
user would sometimes experience:

- User wants to switch to a file.
- User types C-x C-f by mistake.
- User realizes: oh, the file is already loaded, I'd actually like to  
switch to a buffer.
- User types C-x b to switch to the buffer.
- Error appears :"Command attempted to use minibuffer while in  
minibuffer"
    (point of frustration, because command doesn't work.)
- (*) user has to a) understand the error message,
- (*) and type C-g to  quit the first prompt.
- and then repeat C-x b.

Now, the steps marked (*) require the user to be knowledgeable. I  
remember well that C-g was one of the essential commands that I  
didn't learn early on, so the situation caused a lot of frustration.  
And because issuing the wrong command happens often when you're new  
to Emacs, you get frustrated rather often. [Part of the trouble is  
that it's C-g and not Esc, but that can't be changed.]

So if you're seriously considering modifying the minibuffer  
interaction before the release, I urge you to make the default  
setting (no recursion) easier to use. One solution would be to  
automatically quit the command that's occupying the minibuffer  
whenever another command requires it (i.e. instead of signaling the  
above error). I proposed something like that a while ago, and the  
reason that I haven't implemented it is that I have no clue how to  
properly do a non-local exit.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-15 19:18         ` David Reitter
@ 2006-03-15 19:52           ` Drew Adams
  2006-03-17 16:32           ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Drew Adams @ 2006-03-15 19:52 UTC (permalink / raw)


    I remember well that C-g was one of the essential commands that I
    didn't learn early on, so the situation caused a lot of frustration.

Not that this is a defense of `C-g' or anything else, but one thing I
learned many moon ago is that perhaps the first thing to learn about
something new is how to stop it, get out of it, quit it, or (if possible)
undo it. ;-) `C-x C-c' and `C-g' should be emblazoned on the startup screen.

[This goes for teaching, as well, BTW. And the second thing to teach is how
to use or modify something (e.g. a program) that exists, not how to create a
new one; it's nearly always simpler (and more rewarding to newbies, and more
informative) to use or change something that exists than it is to create one
from scratch.]

    So if you're seriously considering modifying the minibuffer
    interaction before the release,

I was clear in my initial proposal to consider this feature - here is the
first line of that message (emphasis added):

 For consideration ***after*** the release -

    I urge you to make the default setting (no recursion) easier to use.

The message could be improved. When I see "Command attempted to use
minibuffer while in minibuffer" my reaction is "Of course the command I'm
using in the minibuffer attempts to use the minibuffer while in the
minibuffer!"

There are two problems understanding the message: 1) "Command" - what
command? I might not be aware that I invoked a command. 2) "use the
minibuffer" is not clear.

This might be better: "`...' (command `...') cannot be run during minibuffer
input", where the first `...' is whatever you typed that invoked a command,
and the second `...' is the command name. For your example, the message
would be:

 `C-x b' (command `switch-to-buffer') cannot be run during minibuffer input

Additional info *might* be added to the message, and the command name might
be dropped. Some additional info that could help:

. Mention that the command cannot be run because it would, itself, ask for
input

. Mention that you can toggle `enable-recursive-minibuffers' to allow the
command to be run.

Another possibility for the message:

 You cannot use `C-x b' while entering input, because it too prompts for
input

    One solution would be to
    automatically quit the command that's occupying the minibuffer
    whenever another command requires it (i.e. instead of signaling the
    above error).

That might be confusing also. If you don't realize that what you type is
bound to a command, then you think you are still inputting what the first
command wants, and in fact the first command has already been (silently)
offed.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-14 17:57 feature request: indicator of minibuffer-recursion depth Drew Adams
  2006-03-14 18:13 ` Masatake YAMATO
@ 2006-03-15 20:20 ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2006-03-15 20:20 UTC (permalink / raw)
  Cc: emacs-devel

    Recursive-edit depth is indicated in the mode line by bracketing ([...]).
    Being in a recursive minibuffer without knowing it is about as disorienting
    as being in a recursive edit without knowing it. AFAIK, there is no feedback
    regarding minibuffer-recursion depth.

Recursive minibuffers are disallowed by default.  The few commands
that allow them as an exception will not often be used by beginners,
and C-g should get out anyway.

    How do you think put [] on the prompt in minibuffer like:

    [M-x] 
    [[M-x]]
    [[[Find file: ]]] ~/

It could be an improvement, for those who set the variable
to allow recursive minibuffers.  I think this would be better
than putting it in the mode line.  It is more clearly
related to the minibuffer if it is in the minibuffer prompt,
and more visible too.

However, this should wait for after the release.  Can someone
add this to etc/TODO?

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15 10:15           ` Miles Bader
@ 2006-03-16  2:46             ` Miles Bader
  2006-03-16 16:51               ` Drew Adams
                                 ` (2 more replies)
  0 siblings, 3 replies; 73+ messages in thread
From: Miles Bader @ 2006-03-16  2:46 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 87 bytes --]

I wrote:
> Certainly not unattainable, but probably rather fiddly.

Ok, or maybe not:


[-- Attachment #2: minibuf-depth.el --]
[-- Type: application/emacs-lisp, Size: 2561 bytes --]

[-- Attachment #3: Type: text/plain, Size: 152 bytes --]


-miles
-- 
"Though they may have different meanings, the cries of 'Yeeeee-haw!' and
 'Allahu akbar!' are, in spirit, not actually all that different."

[-- Attachment #4: Type: text/plain, Size: 142 bytes --]

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-15  9:44         ` David Kastrup
@ 2006-03-16 10:32           ` Richard Stallman
  0 siblings, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2006-03-16 10:32 UTC (permalink / raw)
  Cc: emacs-devel, drew.adams, miles

    One should probably place an electronic signature into dotemacs files
    and prohibit people from using any code they have not entered all by
    themselves.

    But I guess this scheme would not be compatible with GPL3.

GPLv3 would have nothing to say about the matter as long as users
really can change the code and get rid of the feature.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  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
  2 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-03-16 16:51 UTC (permalink / raw)


Seems fine (given Richard's decision to put the indicator in the
minibuffer). A minor mode for this is a good idea.

However, the particular indicator you use adds 17 characters to the
minibuffer text, which is often already very busy. Just the number itself
should be sufficient, perhaps followed by a separator such as `)'. IOW,
instead of

 Find file:
 (minibuf-depth 2) Match also (regexp):
 (minibuf-depth 3) Match also (regexp):

use just:

 Find file:
 2) Match also (regexp):
 3) Match also (regexp):

We could add an option whose value is the text to use, with default value
(format "%s)" (minibuffer-depth)).

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-16  2:46             ` Miles Bader
  2006-03-16 16:51               ` Drew Adams
@ 2006-03-16 18:44               ` Edward O'Connor
  2006-03-16 21:35               ` Kim F. Storm
  2 siblings, 0 replies; 73+ messages in thread
From: Edward O'Connor @ 2006-03-16 18:44 UTC (permalink / raw)


> ;;; minibuf-depth.el --- Indicate minibuffer-depth in prompt

I'm trying this out (with "%d] " as the format string), and it seems
very natural to me.

-- 
Edward O'Connor
hober0@gmail.com

Ense petit placidam sub libertate quietem.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-16  2:46             ` Miles Bader
  2006-03-16 16:51               ` Drew Adams
  2006-03-16 18:44               ` Edward O'Connor
@ 2006-03-16 21:35               ` Kim F. Storm
  2006-03-16 23:16                 ` Drew Adams
                                   ` (3 more replies)
  2 siblings, 4 replies; 73+ messages in thread
From: Kim F. Storm @ 2006-03-16 21:35 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

Miles Bader <miles.bader@necel.com> writes:

> ;;; minibuf-depth.el --- Indicate minibuffer-depth in prompt

Very clever!!  Thanks!

I made a few changes:

1) rename file to mb-depth.el to avoid 8+3 conflict with minibuf-eldef.el
2) use propertized "[%d]" as depth>1 marker
3) added autoload cookie.

I definitely think we should add this little gem.


;;; mb-depth.el --- Indicate minibuffer-depth in prompt
;;
;; Copyright (C) 2006 Free Software Foundation, Inc.
;;
;; Author: Miles Bader <miles@gnu.org>
;; Keywords: convenience

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:
;;
;; Defines the minor mode `minibuffer-indicate-depth-mode'.
;;
;; When active, any recursive use of the minibuffer will show
;; the recursion depth in the minibuffer prompt.  This is only
;; useful if `enable-recursive-minibuffers' is non-nil.

;;; Code:

;; An overlay covering the prompt.  This is a buffer-local variable in
;; each affected minibuffer.
;;
(defvar minibuf-depth-overlay)
(make-variable-buffer-local 'minibuf-depth-overlay)

;; This function goes on minibuffer-setup-hook
(defun minibuf-depth-setup-minibuffer ()
  "Set up a minibuffer for `minibuffer-indicate-depth-mode'.
The prompt should already have been inserted."
  (when (> (minibuffer-depth) 1)
    (setq minibuf-depth-overlay (make-overlay (point-min) (1+ (point-min))))
    (overlay-put minibuf-depth-overlay 'before-string
		 (propertize (format "[%d]" (minibuffer-depth))
			     'face 'highlight))
    (overlay-put minibuf-depth-overlay 'evaporate t)))

;;;###autoload
(define-minor-mode minibuffer-indicate-depth-mode
  "Toggle Minibuffer Indicate Depth mode.
When active, any recursive use of the minibuffer will show
the recursion depth in the minibuffer prompt.  This is only
useful if `enable-recursive-minibuffers' is non-nil.

With prefix argument ARG, turn on if positive, otherwise off.
Returns non-nil if the new state is enabled."
  :global t
  :group 'minibuffer
  (if minibuffer-indicate-depth-mode
      ;; Enable the mode
      (add-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)
    ;; Disable the mode
    (remove-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)))

(provide 'mb-depth)

;;; mb-depth.el ends here

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  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-17  2:37                 ` Miles Bader
                                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-03-16 23:16 UTC (permalink / raw)


    2) use propertized "[%d]" as depth>1 marker

a. I prefer unpropertized (certainly not `highlight'). There is no need to
make this so prominent. It's been missing altogether for decades with no
disastrous consequences.

b. I prefer "%d) ":

 Find file:
 2) Match also (regexp):
 3) Match also (regexp):

instead of "[%d]":

 Find file:
 [2]Match also (regexp):
 [3]Match also (regexp):

There's no need to enclose the level in brackets (or parens or braces).
There is nothing to its left to separate it from. There is a need, howeve,
to separate it from the prompt. At least a space is needed.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-16 23:16                 ` Drew Adams
@ 2006-03-16 23:39                   ` Kim F. Storm
  2006-03-16 23:56                     ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Kim F. Storm @ 2006-03-16 23:39 UTC (permalink / raw)
  Cc: emacs-devel

"Drew Adams" <drew.adams@oracle.com> writes:

>     2) use propertized "[%d]" as depth>1 marker
>
> a. I prefer unpropertized (certainly not `highlight'). There is no need to
> make this so prominent. It's been missing altogether for decades with no
> disastrous consequences.

But even if you have enabled recursive minibuffers, it happens so rarely
in practice, that I think it makes good sense to bring attention
to the fact that this is indeed a recursive invocation.  Some things
works quite differently when activated in this state.

It sounds like a 

    (defcustom minibuffer-depth-indicator "%d) " 
     ...)

would be the best solution  -- then anyone can change it to their
own liking.their own

>
> b. I prefer "%d) ":
>
>  Find file:
>  2) Match also (regexp):
>  3) Match also (regexp):
>
> instead of "[%d]":
>
>  Find file:
>  [2]Match also (regexp):
>  [3]Match also (regexp):
>

> There's no need to enclose the level in brackets (or parens or braces).

I prefer [n] because it is analogue to the way we indicate recursive edit in the mode line.

> There is nothing to its left to separate it from. There is a need, howeve,
> to separate it from the prompt. At least a space is needed.

Not if you propertize the string, IMHO.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-16 23:39                   ` Kim F. Storm
@ 2006-03-16 23:56                     ` Drew Adams
  0 siblings, 0 replies; 73+ messages in thread
From: Drew Adams @ 2006-03-16 23:56 UTC (permalink / raw)


    It sounds like a 
        (defcustom minibuffer-depth-indicator "%d) "  ...)
    would be the best solution  -- then anyone can change it to their
    own liking.

Good idea.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-16 16:51               ` Drew Adams
@ 2006-03-17  2:29                 ` Miles Bader
  0 siblings, 0 replies; 73+ messages in thread
From: Miles Bader @ 2006-03-17  2:29 UTC (permalink / raw)
  Cc: emacs-devel

"Drew Adams" <drew.adams@oracle.com> writes:
> However, the particular indicator you use adds 17 characters to the
> minibuffer text, which is often already very busy. Just the number itself
> should be sufficient, perhaps followed by a separator such as `)'. IOW,
> instead of

The reason I chose such a "verbose" indicator is because of David
Reitter's comments:  If the point is to help people avoid confusion (and
such a mode is turned on by default), using a cryptic indicator is
almost as bad as no indicator at all.  I don't think the extra length is
a huge problem, because it will be very rare to actually see this
indicator, and usually the user will simply hit ^G when they do.

On the other hand, if the point is simply to help advanced users
recognize the situation more quickly, then I suppose the format doesn't
matter much.

Clearly it should get the actual indicator format from a variable, as
everybody in this thread seems have their own preferred format.
So the question is more "What should the default format be?", and the
answer depends strongly on what the intention of the indicator really is.

-Miles
-- 
"Suppose He doesn't give a shit?  Suppose there is a God but He
just doesn't give a shit?"  [George Carlin]

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-16 21:35               ` Kim F. Storm
  2006-03-16 23:16                 ` Drew Adams
@ 2006-03-17  2:37                 ` Miles Bader
  2006-03-18  8:44                 ` Richard Stallman
  2006-07-15 23:41                 ` Drew Adams
  3 siblings, 0 replies; 73+ messages in thread
From: Miles Bader @ 2006-03-17  2:37 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

storm@cua.dk (Kim F. Storm) writes:
> 1) rename file to mb-depth.el to avoid 8+3 conflict with minibuf-eldef.el

@#$!*& God I hate this stupid kowtowing to a long obsolete brain-damaged
operating system that is only used by about 3 people (none of who've ever
heard of emacs)...!

Anyway, if you're going to do such a thing, please at least limit the
damage as much as you can -- e.g., "mbuf-depth.el" -- it isn't a problem if
the length is greater than 8+3, only if it's ambiguous within that length.

> 2) use propertized "[%d]" as depth>1 marker

It's a good idea to add a face, but the indicator format (and property list
or face?) should clearly be a defcustom because everybody seems to have
their own preferred format...

See my reply to Drew for my thoughts on the default format, especially with
respect to David Reitter's comments.

> 3) added autoload cookie.

Thanks,

-Miles

-- 
`Suppose Korea goes to the World Cup final against Japan and wins,' Moon said.
`All the past could be forgiven.'   [NYT]

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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 18:06             ` Drew Adams
  1 sibling, 2 replies; 73+ messages in thread
From: Richard Stallman @ 2006-03-17 16:32 UTC (permalink / raw)
  Cc: emacs-devel, drew.adams, miles

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

Can someone please investigate what UI experts suggest about this
kind of case?

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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
  1 sibling, 2 replies; 73+ messages in thread
From: David Kastrup @ 2006-03-17 17:17 UTC (permalink / raw)
  Cc: David Reitter, miles, drew.adams, emacs-devel

Richard Stallman <rms@gnu.org> writes:

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

Uh, don't they do that already by default?

> Can someone please investigate what UI experts suggest about this
> kind of case?

I am afraid we already lost them with "minibuffer", never mind about
"recursive".  vi has something like that, but you can't leave the
minibuffer leaving pending stuff behind, and there is no way to enter
another one: vi conceptually turns into a complete different (and
line-based) editor in its command line, called "ex".

In pretty much every editor I know, things like "file entry" and stuff
happens essentially in "transient windows", and you can't leave such a
window before completing things.

Dumbing Emacs' interface down like that does not seem worth the
price.  For example, I quite often do stuff like

C-x C-f ~/junk-2/ M-x make-directory ~/junk-2 RET somefile.tex RET

This is too convenient to abandon, even though I can understand the
choice to not make it the default.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-17 16:32           ` Richard Stallman
  2006-03-17 17:17             ` David Kastrup
@ 2006-03-17 18:06             ` Drew Adams
  2006-03-18 18:30               ` Richard Stallman
  1 sibling, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-03-17 18:06 UTC (permalink / raw)


    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.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-17 17:17             ` David Kastrup
@ 2006-03-17 22:02               ` Kim F. Storm
  2006-03-18 18:29               ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Kim F. Storm @ 2006-03-17 22:02 UTC (permalink / raw)
  Cc: David Reitter, emacs-devel, drew.adams, miles

David Kastrup <dak@gnu.org> writes:

> Dumbing Emacs' interface down like that does not seem worth the
> price.  For example, I quite often do stuff like

I _like_ recursive minibuffers, too
>
> C-x C-f ~/junk-2/ M-x make-directory ~/junk-2 RET somefile.tex RET

[tip on] With ido-mode, 

C-x C-f ~/junk-2 M-m RET somefile.tex RET

does the same thing.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-16 21:35               ` Kim F. Storm
  2006-03-16 23:16                 ` Drew Adams
  2006-03-17  2:37                 ` Miles Bader
@ 2006-03-18  8:44                 ` Richard Stallman
  2006-03-20  2:39                   ` Miles Bader
  2006-07-15 23:41                 ` Drew Adams
  3 siblings, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2006-03-18  8:44 UTC (permalink / raw)
  Cc: emacs-devel, drew.adams, miles

If this uses a variable to specify the string, it does not need
to be a mode that you can enable or disable.  You could just set
the variable to the empty string.

That makes it so simple that it ought to be installed at the C level
and this avoid needing to use a hook.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-17 17:17             ` David Kastrup
  2006-03-17 22:02               ` Kim F. Storm
@ 2006-03-18 18:29               ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2006-03-18 18:29 UTC (permalink / raw)
  Cc: david.reitter, miles, drew.adams, emacs-devel

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

    Uh, don't they do that already by default?

Not when you're in the minibuffer.  Then they just signal an error,
and the existing minibuffer level remains active.

    In pretty much every editor I know, things like "file entry" and stuff
    happens essentially in "transient windows", and you can't leave such a
    window before completing things.

We're not talking about such a complex case now.  We're talking about
typing C-x b while you are in C-x C-f.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-17 18:06             ` Drew Adams
@ 2006-03-18 18:30               ` Richard Stallman
  0 siblings, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2006-03-18 18:30 UTC (permalink / raw)
  Cc: emacs-devel

	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?

They are not exactly the same.  Both ideas could be considered.

     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.

I am completely lost, I don't follow your scenario.
However, since it is complex, it is irrelevant to our
decision about what to do in a simple case.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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
  0 siblings, 2 replies; 73+ messages in thread
From: Miles Bader @ 2006-03-20  2:39 UTC (permalink / raw)
  Cc: emacs-devel, drew.adams, Kim F. Storm

Richard Stallman <rms@gnu.org> writes:
> If this uses a variable to specify the string, it does not need
> to be a mode that you can enable or disable.  You could just set
> the variable to the empty string.
>
> That makes it so simple that it ought to be installed at the C level
> and this avoid needing to use a hook.

How about this:


orig = miles@gnu.org--2006/emacs--miles--0--patch-12

M  src/minibuf.c

* modified files

--- orig/src/minibuf.c
+++ mod/src/minibuf.c
@@ -123,6 +123,13 @@
 
 int minibuffer_auto_raise;
 
+/* A string used to indicate minibuffer depths greater than one.
+   It is passed to Fformat, along with the minibuffer depth, and the
+   resulting string added before the minibuffer prompt.  If it is not a
+   string, or its length is zero, then it is ignored.  */
+
+Lisp_Object Vminibuffer_depth_indicator;
+
 /* If last completion attempt reported "Complete but not unique"
    then this is the string completed then; otherwise this is nil.  */
 
@@ -141,6 +148,9 @@
 extern Lisp_Object Qmouse_face;
 
 extern Lisp_Object Qfield;
+
+extern Lisp_Object Qbefore_string;
+
 \f
 /* Put minibuf on currently selected frame's minibuffer.
    We do this whenever the user starts a new minibuffer
@@ -717,6 +727,24 @@
       && !NILP (Vrun_hooks))
     call1 (Vrun_hooks, Qminibuffer_setup_hook);
 
+  if (minibuf_level > 1
+      && STRINGP (Vminibuffer_depth_indicator)
+      && SCHARS (Vminibuffer_depth_indicator) > 0
+      && ZV > BEGV)
+    {
+      Lisp_Object args[4];
+      Lisp_Object ov;
+
+      ov = Fmake_overlay (make_number (BEGV), make_number (BEGV + 1),
+			  Qnil, Qnil, Qnil);
+
+      Foverlay_put (ov, Qevaporate, Qt);
+
+      args[0] = Vminibuffer_depth_indicator;
+      args[1] = make_number (minibuf_level);
+      Foverlay_put (ov, Qbefore_string, Fformat (2, args));
+    }
+
   /* Don't allow the user to undo past this point.  */
   current_buffer->undo_list = Qnil;
 
@@ -2902,6 +2930,13 @@
   Vminibuffer_prompt_properties
     = Fcons (intern ("read-only"), Fcons (Qt, Qnil));
 
+  DEFVAR_LISP ("minibuffer-depth-indicator", &Vminibuffer_depth_indicator,
+	       doc: /* A string used to indicate minibuffer depths greater than one.
+It is passed to `format', along with the minibuffer depth, and the
+resulting string added before the minibuffer prompt.  If it is not a
+string, or its length is zero, then it is ignored.  */);
+    Vminibuffer_depth_indicator = Qnil;
+
   defsubr (&Sset_minibuffer_window);
   defsubr (&Sread_from_minibuffer);
   defsubr (&Seval_minibuffer);





-- 
"1971 pickup truck; will trade for guns"

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-03-20  2:39                   ` Miles Bader
@ 2006-03-21  1:01                     ` Richard Stallman
  2007-06-06 11:29                     ` Juanma Barranquero
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2006-03-21  1:01 UTC (permalink / raw)
  Cc: emacs-devel, drew.adams, storm

It looks good to me, but it needs to be accompanied by changes in NEWS
and the Emacs Manual and the Lisp Manual.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-03-16 21:35               ` Kim F. Storm
                                   ` (2 preceding siblings ...)
  2006-03-18  8:44                 ` Richard Stallman
@ 2006-07-15 23:41                 ` Drew Adams
  2006-07-17  1:41                   ` Richard Stallman
  2006-08-05 22:04                   ` Drew Adams
  3 siblings, 2 replies; 73+ messages in thread
From: Drew Adams @ 2006-07-15 23:41 UTC (permalink / raw)


Did this never make it into the release? I don't have a CVS version more
recent than 2006/3/20, but checking the list of source files under CVS now,
I don't see this library. I looked for mb-depth.el, minibuf-depth.el,
mbuf-depth.el, and so on.

This is a useful thing. I think it should not only be present, but should be
enabled by default.

    From: Kim F. Storm [mailto:storm@cua.dk]
    Sent: Thursday, March 16, 2006 1:36 PM
    Subject: Re: feature request: indicator of minibuffer-recursion depth

    Miles Bader <miles.bader@necel.com> writes:
    > ;;; minibuf-depth.el --- Indicate minibuffer-depth in prompt

    Very clever!!  Thanks!
    I made a few changes:

    1) rename file to mb-depth.el to avoid 8+3 conflict with
    minibuf-eldef.el
    ...

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-07-15 23:41                 ` Drew Adams
@ 2006-07-17  1:41                   ` Richard Stallman
  2006-07-17  8:33                     ` Kim F. Storm
  2006-08-05 22:04                   ` Drew Adams
  1 sibling, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2006-07-17  1:41 UTC (permalink / raw)
  Cc: emacs-devel

At this point, I would rather save it for after the release.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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
  0 siblings, 2 replies; 73+ messages in thread
From: Kim F. Storm @ 2006-07-17  8:33 UTC (permalink / raw)
  Cc: Drew Adams, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> At this point, I would rather save it for after the release.

For those who need this before 23.x, maybe someone would add it to
the EmacsWiki.  Here is the latest version (AFAIK):



;;; mb-depth.el --- Indicate minibuffer-depth in prompt
;;
;; Copyright (C) 2006 Free Software Foundation, Inc.
;;
;; Author: Miles Bader <miles@gnu.org>
;; Keywords: convenience

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:
;;
;; Defines the minor mode `minibuffer-indicate-depth-mode'.
;;
;; When active, any recursive use of the minibuffer will show
;; the recursion depth in the minibuffer prompt.  This is only
;; useful if `enable-recursive-minibuffers' is non-nil.

;;; Code:

;; An overlay covering the prompt.  This is a buffer-local variable in
;; each affected minibuffer.
;;
(defvar minibuf-depth-overlay)
(make-variable-buffer-local 'minibuf-depth-overlay)

;; This function goes on minibuffer-setup-hook
(defun minibuf-depth-setup-minibuffer ()
  "Set up a minibuffer for `minibuffer-indicate-depth-mode'.
The prompt should already have been inserted."
  (when (> (minibuffer-depth) 1)
    (setq minibuf-depth-overlay (make-overlay (point-min) (1+ (point-min))))
    (overlay-put minibuf-depth-overlay 'before-string
		 (propertize (format "[%d]" (minibuffer-depth))
			     'face 'highlight))
    (overlay-put minibuf-depth-overlay 'evaporate t)))

;;;###autoload
(define-minor-mode minibuffer-indicate-depth-mode
  "Toggle Minibuffer Indicate Depth mode.
When active, any recursive use of the minibuffer will show
the recursion depth in the minibuffer prompt.  This is only
useful if `enable-recursive-minibuffers' is non-nil.

With prefix argument ARG, turn on if positive, otherwise off.
Returns non-nil if the new state is enabled."
  :global t
  :group 'minibuffer
  (if minibuffer-indicate-depth-mode
      ;; Enable the mode
      (add-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)
    ;; Disable the mode
    (remove-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)))

(provide 'mb-depth)

;;; mb-depth.el ends here

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-07-17  8:33                     ` Kim F. Storm
@ 2006-07-17 10:01                       ` Mathias Dahl
  2006-11-19  1:25                       ` Drew Adams
  1 sibling, 0 replies; 73+ messages in thread
From: Mathias Dahl @ 2006-07-17 10:01 UTC (permalink / raw)
  Cc: rms, Drew Adams, emacs-devel

> For those who need this before 23.x, maybe someone would add it to
> the EmacsWiki.  Here is the latest version (AFAIK):

Done:

http://www.emacswiki.org/cgi-bin/wiki/mb-depth.el

/Mathias

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-07-15 23:41                 ` Drew Adams
  2006-07-17  1:41                   ` Richard Stallman
@ 2006-08-05 22:04                   ` Drew Adams
  1 sibling, 0 replies; 73+ messages in thread
From: Drew Adams @ 2006-08-05 22:04 UTC (permalink / raw)


        From: Kim F. Storm [mailto:storm@cua.dk]
        Miles Bader <miles.bader@necel.com> writes:
        > ;;; minibuf-depth.el --- Indicate minibuffer-depth in prompt
        Very clever!!  Thanks! I made a few changes:
        1) rename file to mb-depth.el to avoid 8+3 conflict with
        minibuf-eldef.el ...

    From:Drew Adams
    Did this never make it into the release? ...
    This is a useful thing. I think it should not only be present,
    but should be enabled by default.

  From: Richard Stallman Sent: Sunday, July 16, 2006 6:42 PM
  At this point, I would rather save it for after the release.

Why? This wouldn't impact anything else in any way, especially if it were
turned off by default. The code itself is miniscule. I think this is quite
useful.

It could even be argued that having *no* user feedback to indicate that you
are in a recursive minibuffer is a *bug* - even a serious UI bug. It is
this, more than anything else, that turns a recursive minibuffer into a mine
field: users don't know what's happening. With this feedback, the mine field
is cleared, IMO.

That was why I brought this up in the first place: I argued that [[...]] in
the mode line was a good indication of recursive editing, and something
similar is missing for recursive minibuffers. I originally suggested
indicating this too in the mode line, but I'm happy with the solution
implemented by Miles.

Imagine if we had no [...] in the mode line for recursive edits. Wouldn't
you consider that a bug? Wouldn't a recursive edit become a mine field too,
without feedback?

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  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
  1 sibling, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-11-19  1:25 UTC (permalink / raw)


> From: Kim F. Storm Sent: Monday, July 17, 2006 1:33 AM
> For those who need this before 23.x, maybe someone would add it to
> the EmacsWiki.  Here is the latest version (AFAIK):
>
> ;;; mb-depth.el --- Indicate minibuffer-depth in prompt
> ...

Mathias uploaded this to the Wiki last July.

When this is eventually added to a release, I would like to see these two
things be user-configurable, not hard-coded:

- the depth-indicator format (currently hard-coded "[%d]")
- the depth-indicator face (currently hard-coded `highlight')

For my own use, I've defined a face and a format-string user option for
this. I use "%d) ", instead of "[%d]", for the default value of the format,
and I use `default' for the default value of the face (inheritance).

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-11-19  1:25                       ` Drew Adams
@ 2006-11-19  1:52                         ` Juanma Barranquero
  2006-11-19 15:48                           ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2006-11-19  1:52 UTC (permalink / raw)
  Cc: emacs-devel

On 11/19/06, Drew Adams <drew.adams@oracle.com> wrote:

> > ;;; mb-depth.el --- Indicate minibuffer-depth in prompt

I like better Miles patch for src/minibuf.c. It's about 22 lines (not
counting comments or blank lines). I've been using it in my working
Emacs for months.

                    /L/e/k/t/u

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-11-19  1:52                         ` Juanma Barranquero
@ 2006-11-19 15:48                           ` Drew Adams
  2006-11-19 16:19                             ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-11-19 15:48 UTC (permalink / raw)


> > > ;;; mb-depth.el --- Indicate minibuffer-depth in prompt
> 
> I like better Miles patch for src/minibuf.c. It's about 22 lines (not
> counting comments or blank lines). I've been using it in my working
> Emacs for months.

I'm not aware of it. Can you describe it - does it do what mb-depth does? Can users control the appearance?

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-11-19 15:48                           ` Drew Adams
@ 2006-11-19 16:19                             ` Juanma Barranquero
  2006-11-19 20:19                               ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2006-11-19 16:19 UTC (permalink / raw)
  Cc: emacs-devel

On 11/19/06, Drew Adams <drew.adams@oracle.com> wrote:

> I'm not aware of it.

http://lists.gnu.org/archive/html/emacs-devel/2006-03/msg00840.html

                    /L/e/k/t/u

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-11-19 16:19                             ` Juanma Barranquero
@ 2006-11-19 20:19                               ` Drew Adams
  2006-11-19 22:02                                 ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2006-11-19 20:19 UTC (permalink / raw)


> On 11/19/06, Drew Adams <drew.adams@oracle.com> wrote:
> > I'm not aware of it.
> 
> http://lists.gnu.org/archive/html/emacs-devel/2006-03/msg00840.html
 
Thanks. So I guess Kim was mistaken when he wrote on 7/17 that it wouldn't be in Emacs 22? And Richard misunderstood when he said on 7/17 that he wanted to save it for after the release?

Very good, in any case. And I'm glad to see that the format string is a user variable (`minibuffer-depth-indicator'). I don't see a user-definable face, but perhaps no face is used. That would be fine with me; I use `default' anyway, just to get rid of the hard-coded `highlight' in mb-depth.el.

BTW, when did this make it into Emacs? I have a July 19 build, in which it is still absent, though the message you cite is from March.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2006-11-19 20:19                               ` Drew Adams
@ 2006-11-19 22:02                                 ` Juanma Barranquero
  2006-11-20  2:22                                   ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2006-11-19 22:02 UTC (permalink / raw)
  Cc: emacs-devel

On 11/19/06, Drew Adams <drew.adams@oracle.com> wrote:

> Thanks. So I guess Kim was mistaken when he wrote on 7/17 that it wouldn't be in Emacs 22? And Richard misunderstood when he said on 7/17 that he wanted to save it for after the release?

No. As far as I know, it has not been committed.

I pointed it out because it is quite small and seems better than
having an elisp package just for this.

> Very good, in any case. And I'm glad to see that the format string is a user variable (`minibuffer-depth-indicator'). I don't see a user-definable face, but perhaps no face is used.

You can always do, as I do:

 (defface my-minibuffer-depth-face ...)

 (setq minibuffer-depth-indicator
       (propertize "[%d] " 'face 'my-minibuffer-depth-face)))

                    /L/e/k/t/u

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2006-11-19 22:02                                 ` Juanma Barranquero
@ 2006-11-20  2:22                                   ` Drew Adams
  0 siblings, 0 replies; 73+ messages in thread
From: Drew Adams @ 2006-11-20  2:22 UTC (permalink / raw)


> No. As far as I know, it has not been committed.

OK, so I guess we're back to hoping for it to be added to a later release.

Until that happens, I've uploaded a trivial mb-depth.el tweak to Emacs Wiki (mb-depth+.el) that lets you define the format and face. It won't be useful or needed, once the C code is committed.

> I pointed it out because it is quite small and seems better than
> having an elisp package just for this.

Yes. Looking forward to it.

> Very good, in any case. And I'm glad to see that the format 
> string is a user variable (`minibuffer-depth-indicator'). I don't 
> see a user-definable face, but perhaps no face is used.
> 
> You can always do, as I do:
>  (defface my-minibuffer-depth-face ...)
>  (setq minibuffer-depth-indicator
>        (propertize "[%d] " 'face 'my-minibuffer-depth-face)))

Yes, good. And it's good that no highlighting is hard-coded in the C version, so one is not obliged to add a face definition just to get rid of the highlighting.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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
  1 sibling, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-06 11:29 UTC (permalink / raw)
  To: Miles Bader; +Cc: drew.adams, emacs-devel

On 3/20/06, Miles Bader <miles.bader@necel.com> wrote:

> How about this:
>
>
> orig = miles@gnu.org--2006/emacs--miles--0--patch-12
>
> M  src/minibuf.c

The minibuffer-depth-indicator patch was never applied. Perhaps it could be now?

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-06 11:29                     ` Juanma Barranquero
@ 2007-06-15 14:37                       ` Kim F. Storm
  2007-06-15 15:52                         ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Kim F. Storm @ 2007-06-15 14:37 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: emacs-devel, drew.adams, Miles Bader

"Juanma Barranquero" <lekktu@gmail.com> writes:

> The minibuffer-depth-indicator patch was never applied. Perhaps it could be now?

Done.

I've installed a slightly modified version (discussed back then) under the name of
mb-depth.el (to avoid 8.3 conflicts).

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 14:37                       ` Kim F. Storm
@ 2007-06-15 15:52                         ` Juanma Barranquero
  2007-06-15 16:27                           ` Juri Linkov
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 15:52 UTC (permalink / raw)
  To: Kim F. Storm; +Cc: emacs-devel, drew.adams, Miles Bader

[-- Attachment #1: Type: text/plain, Size: 2691 bytes --]

On 6/15/07, Kim F. Storm <storm@cua.dk> wrote:

> Done.
>
> I've installed a slightly modified version (discussed back then) under the name of
> mb-depth.el (to avoid 8.3 conflicts).

I was referring to this C patch by Miles, which Richard said to prefer
(and, honestly, I do too). I see no point in adding an elisp package
(and, worse, stuff to minibuffer-setup-hook) to avoid 15 or 20 lines
of very clean C code.

Could we please try that answer first? (I used it for months with no
problem whatsoever.)

             Juanma


Index: src/minibuf.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/minibuf.c,v
retrieving revision 1.314
diff -u -2 -r1.314 minibuf.c
--- src/minibuf.c	14 Nov 2006 19:25:39 -0000	1.314
+++ src/minibuf.c	15 Nov 2006 08:38:02 -0000
@@ -128,4 +128,11 @@
 int minibuffer_auto_raise;

+/* A string used to indicate minibuffer depths greater than one.
+   It is passed to Fformat, along with the minibuffer depth, and the
+   resulting string added before the minibuffer prompt.	 If it is not a
+   string, or its length is zero, then it is ignored.  */
+
+Lisp_Object Vminibuffer_depth_indicator;
+
 /* If last completion attempt reported "Complete but not unique"
    then this is the string completed then; otherwise this is nil.  */
@@ -151,4 +158,7 @@

 extern Lisp_Object Qfield;
+
+extern Lisp_Object Qbefore_string;
+
 \f
 /* Put minibuf on currently selected frame's minibuffer.
@@ -725,4 +735,22 @@
     call1 (Vrun_hooks, Qminibuffer_setup_hook);

+  if (minibuf_level > 1
+      && STRINGP (Vminibuffer_depth_indicator)
+      && SCHARS (Vminibuffer_depth_indicator) > 0
+      && ZV > BEGV)
+    {
+      Lisp_Object args[4];
+      Lisp_Object ov;
+
+      ov = Fmake_overlay (make_number (BEGV), make_number (BEGV + 1),
+                          Qnil, Qnil, Qnil);
+
+      Foverlay_put (ov, Qevaporate, Qt);
+
+      args[0] = Vminibuffer_depth_indicator;
+      args[1] = make_number (minibuf_level);
+      Foverlay_put (ov, Qbefore_string, Fformat (2, args));
+    }
+
   /* Don't allow the user to undo past this point.  */
   current_buffer->undo_list = Qnil;
@@ -2948,4 +2976,11 @@
   Vread_expression_map = Qnil;

+  DEFVAR_LISP ("minibuffer-depth-indicator", &Vminibuffer_depth_indicator,
+               doc: /* A string used to indicate minibuffer depths
greater than one.
+It is passed to `format', along with the minibuffer depth, and the
+resulting string added before the minibuffer prompt.  If it is not a
+string, or its length is zero, then it is ignored.  */);
+  Vminibuffer_depth_indicator = Qnil;
+
   defsubr (&Sset_minibuffer_window);
   defsubr (&Sread_from_minibuffer);

[-- Attachment #2: Type: text/plain, Size: 142 bytes --]

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 15:52                         ` Juanma Barranquero
@ 2007-06-15 16:27                           ` Juri Linkov
  2007-06-15 17:41                             ` Juanma Barranquero
                                               ` (2 more replies)
  0 siblings, 3 replies; 73+ messages in thread
From: Juri Linkov @ 2007-06-15 16:27 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: miles, emacs-devel, storm

>> I've installed a slightly modified version (discussed back then) under the name of
>> mb-depth.el (to avoid 8.3 conflicts).
>
> I was referring to this C patch by Miles, which Richard said to prefer
> (and, honestly, I do too).

According to the header of this file its author is also Miles.

> I see no point in adding an elisp package (and, worse, stuff to
> minibuffer-setup-hook) to avoid 15 or 20 lines of very clean C code.

There is no reason to add code in C when it is possible to do the same
thing in Emacs Lisp.

Perhaps, creating a new package with just two functions is not justified.
This functionality might fit to one of the existing files.

> Could we please try that answer first? (I used it for months with no
> problem whatsoever.)

The only drawback I see in installed code that it misses the user option
minibuffer-depth-indicator (it was in the C patch).  I suggest adding it
to make this feature more customizable.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 16:27                           ` Juri Linkov
@ 2007-06-15 17:41                             ` Juanma Barranquero
  2007-06-15 18:39                               ` Stefan Monnier
  2007-06-15 19:41                             ` Drew Adams
  2007-06-15 22:45                             ` Richard Stallman
  2 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 17:41 UTC (permalink / raw)
  To: Juri Linkov; +Cc: miles, emacs-devel, storm

On 6/15/07, Juri Linkov <juri@jurta.org> wrote:

> There is no reason to add code in C when it is possible to do the same
> thing in Emacs Lisp.

Fragility. My minibuffer-setup-hook already has eight functions.

> The only drawback I see in installed code that it misses the user option
> minibuffer-depth-indicator (it was in the C patch).

Yes, at the very minimum that should be added; the default is useless
to me. But I still think that doesn't belong in an elisp package.

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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
  0 siblings, 2 replies; 73+ messages in thread
From: Stefan Monnier @ 2007-06-15 18:39 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Juri Linkov, emacs-devel, storm, miles

>> There is no reason to add code in C when it is possible to do the same
>> thing in Emacs Lisp.
> Fragility.  My minibuffer-setup-hook already has eight functions.

AFAIK, the number of elements on this hook doesn't have any impact
on fragility.

I haven't looked in detail, but unless the Elisp code needs to go through
funny contortions to do its job, it looks like a better option.


        Stefan

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 18:39                               ` Stefan Monnier
@ 2007-06-15 18:48                                 ` Juanma Barranquero
  2007-06-16 17:08                                 ` Andreas Röhler
  1 sibling, 0 replies; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 18:48 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Juri Linkov, emacs-devel, storm, miles

On 6/15/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> AFAIK, the number of elements on this hook doesn't have any impact
> on fragility.

IMO, the more functions in a hook, the bigger the possibility of
unexpected interactions. Call me paranoid.

> I haven't looked in detail, but unless the Elisp code needs to go through
> funny contortions to do its job

No, no funny contortions. It's non configurable, though; it should be fixed.

The C version is not a mode, it's always on (though it does nothing
unless minibuffer-depth-indicator is a string of non-zero length).
That's a big plus in my view. I hate having modes for trivialities: a
new function and a new mode variable just for this. Grr.

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2007-06-15 16:27                           ` Juri Linkov
  2007-06-15 17:41                             ` Juanma Barranquero
@ 2007-06-15 19:41                             ` Drew Adams
  2007-06-15 19:47                               ` Juanma Barranquero
  2007-06-15 22:45                             ` Richard Stallman
  2 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2007-06-15 19:41 UTC (permalink / raw)
  To: emacs-devel

> There is no reason to add code in C when it is possible to do the same
> thing in Emacs Lisp.

I doubt that everyone agrees with that strong statement, but. FWIW, I pretty
much do.

I haven't followed the discussion and the various versions, but I do still
use and appreciate Miles's original Lisp version.

I would also ask that the face used for the overlay be customizable - that
is, use a face variable that defaults to `highlight', or add a new face for
this.

I'm against hard-coding faces, making it impossible for users to configure
things such as this (without changing `highlight' everywhere else as well).

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 19:41                             ` Drew Adams
@ 2007-06-15 19:47                               ` Juanma Barranquero
  2007-06-15 20:42                                 ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 19:47 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

On 6/15/07, Drew Adams <drew.adams@oracle.com> wrote:

> I would also ask that the face used for the overlay be customizable - that
> is, use a face variable that defaults to `highlight', or add a new face for
> this.

Something like the following patch?

I'd like to make `minibuffer-depth-indicator' a defcustom, but I don't
see a way to allow propertizing it (other than adding a second
variable, ugh).

             Juanma



Index: lisp/mb-depth.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/mb-depth.el,v
retrieving revision 1.1
diff -u -2 -r1.1 mb-depth.el
--- lisp/mb-depth.el	15 Jun 2007 14:36:17 -0000	1.1
+++ lisp/mb-depth.el	15 Jun 2007 19:38:36 -0000
@@ -39,4 +39,9 @@
 (make-variable-buffer-local 'minibuf-depth-overlay)

+(defvar minibuffer-depth-indicator (propertize "[%d]" 'face 'highlight)
+  "A string used to indicate minibuffer depths greater than one.
+It is passed to `format', along with the minibuffer depth, and the
+resulting string added before the minibuffer prompt.")
+
 ;; This function goes on minibuffer-setup-hook
 (defun minibuf-depth-setup-minibuffer ()
@@ -46,6 +51,5 @@
     (setq minibuf-depth-overlay (make-overlay (point-min) (1+ (point-min))))
     (overlay-put minibuf-depth-overlay 'before-string
-		 (propertize (format "[%d]" (minibuffer-depth))
-			     'face 'highlight))
+		 (format minibuffer-depth-indicator (minibuffer-depth)))
     (overlay-put minibuf-depth-overlay 'evaporate t)))

@@ -53,7 +57,8 @@
 (define-minor-mode minibuffer-indicate-depth-mode
   "Toggle Minibuffer Indicate Depth mode.
-When active, any recursive use of the minibuffer will show
-the recursion depth in the minibuffer prompt.  This is only
-useful if `enable-recursive-minibuffers' is non-nil.
+When active, any recursive use of the minibuffer will show the
+recursion depth in the minibuffer prompt by means of
+`minibuffer-depth-indicator' (which see).
+This is only useful if `enable-recursive-minibuffers' is non-nil.

 With prefix argument ARG, turn on if positive, otherwise off.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2007-06-15 19:47                               ` Juanma Barranquero
@ 2007-06-15 20:42                                 ` Drew Adams
  2007-06-15 23:20                                   ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2007-06-15 20:42 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: emacs-devel

> Something like the following patch?
...
> +(defvar minibuffer-depth-indicator (propertize "[%d]" 'face 'highlight)

Sure, something like that would be OK. 

Better, IMO, would be something that even non-Lispers could use. Just use a face-valued variable in place of the face symbol. Or just add a `defface' and use that new face, not `highlight'.

> I'd like to make `minibuffer-depth-indicator' a defcustom, but I don't
> see a way to allow propertizing it (other than adding a second
> variable, ugh).

What's wrong with that? I do that in Icicles: a variable for the text and a face for the face. 

It beats making users know how to use `propertize' just to customize the appearance of this, IMO. It doesn't take a newbie long to figure out how to change either the face or the text. It would take a newbie long (and s?he'd need a fair amount of confidence) to "customize" a propertized string value such as your indicator's.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 16:27                           ` Juri Linkov
  2007-06-15 17:41                             ` Juanma Barranquero
  2007-06-15 19:41                             ` Drew Adams
@ 2007-06-15 22:45                             ` Richard Stallman
  2007-06-15 23:10                               ` Juri Linkov
  2 siblings, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2007-06-15 22:45 UTC (permalink / raw)
  To: Juri Linkov; +Cc: lekktu, emacs-devel, storm, miles

    There is no reason to add code in C when it is possible to do the same
    thing in Emacs Lisp.

Oh no!  When something is cleaner in C, we should do it in C.

That is the case here, so would someone please please put in the C
version, and remove the Lisp version?

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 22:45                             ` Richard Stallman
@ 2007-06-15 23:10                               ` Juri Linkov
  2007-06-15 23:19                                 ` Juanma Barranquero
  2007-06-16 18:50                                 ` Richard Stallman
  0 siblings, 2 replies; 73+ messages in thread
From: Juri Linkov @ 2007-06-15 23:10 UTC (permalink / raw)
  To: rms; +Cc: lekktu, emacs-devel, storm, miles

>     There is no reason to add code in C when it is possible to do the same
>     thing in Emacs Lisp.
>
> Oh no!  When something is cleaner in C, we should do it in C.

What in the C implementation makes it cleaner?

> That is the case here, so would someone please please put in the C
> version, and remove the Lisp version?

I wonder why do you prefer making Emacs less customizable?

In Lisp, the user can change formatting, colors and placement of the
minibuffer depth indicator as the user likes.  But how this can be done
with the C implementation?

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:10                               ` Juri Linkov
@ 2007-06-15 23:19                                 ` Juanma Barranquero
  2007-06-15 23:34                                   ` Juri Linkov
  2007-06-16 18:50                                 ` Richard Stallman
  1 sibling, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 23:19 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel, rms, storm, miles

On 6/16/07, Juri Linkov <juri@jurta.org> wrote:

> In Lisp, the user can change formatting, colors and placement of the
> minibuffer depth indicator as the user likes. But how this can be done
> with the C implementation?

Have you looked to both implementations as they stand? The only way to
change formatting, colors and placement in the elisp version is by
hacking, while the C version includes a customizable
`minibuffer-depth-indicator' just for that purpose (well, placement
cannot be changed in any of them, truth be told).

It can be added to the elisp version, of course. Or we could just go
with the C version, which would have been committed months ago with no
discussion, were not for the freeze... <sigh>

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 20:42                                 ` Drew Adams
@ 2007-06-15 23:20                                   ` Juanma Barranquero
  2007-06-16  1:17                                     ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 23:20 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

On 6/15/07, Drew Adams <drew.adams@oracle.com> wrote:

> Better, IMO, would be something that even non-Lispers could use. Just use a face-valued variable in place of the face symbol. Or just add a `defface' and use that new face, not `highlight'.

Ugh.

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:19                                 ` Juanma Barranquero
@ 2007-06-15 23:34                                   ` Juri Linkov
  2007-06-15 23:47                                     ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Juri Linkov @ 2007-06-15 23:34 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: emacs-devel, rms, storm, miles

>> In Lisp, the user can change formatting, colors and placement of the
>> minibuffer depth indicator as the user likes. But how this can be done
>> with the C implementation?
>
> Have you looked to both implementations as they stand? The only way to
> change formatting, colors and placement in the elisp version is by
> hacking, while the C version includes a customizable
> `minibuffer-depth-indicator' just for that purpose

It is very easy to add a customizable variable to the Lisp version,
as you already did in your patch.

> (well, placement cannot be changed in any of them, truth be told).

Placement can be changed in Lisp by redefining the function
`minibuf-depth-setup-minibuffer'.  And I can do this because I prefer
putting this indicator to the end of the prompt by using after-string
instead of before-string.

> It can be added to the elisp version, of course. Or we could just go
> with the C version, which would have been committed months ago with no
> discussion, were not for the freeze... <sigh>

Please note that the C version uses the same method of putting the overlay
with the formatted indicator to the minibuffer prompt as the Lisp version.
And if it interacts badly with your other eight minibuffer setup hooks,
you are unable to fix this conflict with the hard-coded C version.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:34                                   ` Juri Linkov
@ 2007-06-15 23:47                                     ` Juanma Barranquero
  2007-06-15 23:57                                       ` Juri Linkov
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-15 23:47 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel, rms, storm, miles

On 6/16/07, Juri Linkov <juri@jurta.org> wrote:

> It is very easy to add a customizable variable to the Lisp version,
> as you already did in your patch.

I know. But it is not there, so it's difficult to understand how would
the elisp version (as it stands) be more configurable that the C one.

> Placement can be changed in Lisp by redefining the function
> `minibuf-depth-setup-minibuffer'.  And I can do this because I prefer
> putting this indicator to the end of the prompt by using after-string
> instead of before-string.

That's a bit of a cheat, isn't? For the same reason you can say that
the C version is equally configurable: just don't set
`minibuffer-depth-indicator', and hack something for
`minibuffer-setup-hook'...

> And if it interacts badly with your other eight minibuffer setup hooks,
> you are unable to fix this conflict with the hard-coded C version.

The C version happens after the hook is run.

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:47                                     ` Juanma Barranquero
@ 2007-06-15 23:57                                       ` Juri Linkov
  2007-06-16  0:24                                         ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Juri Linkov @ 2007-06-15 23:57 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: emacs-devel, rms, storm, miles

>> It is very easy to add a customizable variable to the Lisp version,
>> as you already did in your patch.
>
> I know. But it is not there, so it's difficult to understand how would
> the elisp version (as it stands) be more configurable that the C one.

While it is not there, you can redefine `minibuf-depth-setup-minibuffer'
in your .emacs.

>> Placement can be changed in Lisp by redefining the function
>> `minibuf-depth-setup-minibuffer'.  And I can do this because I prefer
>> putting this indicator to the end of the prompt by using after-string
>> instead of before-string.
>
> That's a bit of a cheat, isn't? For the same reason you can say that
> the C version is equally configurable: just don't set
> `minibuffer-depth-indicator', and hack something for
> `minibuffer-setup-hook'...

I like such a configurability of the C version when it means: don't use
the C version and start hacking `minibuffer-setup-hook' in Lisp.

>> And if it interacts badly with your other eight minibuffer setup hooks,
>> you are unable to fix this conflict with the hard-coded C version.
>
> The C version happens after the hook is run.

This is very bad.  This means that you have no control on what it does
with the minibuffer, and can't fix its bad effects.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:57                                       ` Juri Linkov
@ 2007-06-16  0:24                                         ` Juanma Barranquero
  0 siblings, 0 replies; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-16  0:24 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel, rms, storm, miles

On 6/16/07, Juri Linkov <juri@jurta.org> wrote:

> I like such a configurability of the C version when it means: don't use
> the C version and start hacking `minibuffer-setup-hook' in Lisp.

And I like what you define as configurability of the elisp version,
which is: "throw the only significant, non-trivial function of the
module and redefine it in your .emacs".

> This is very bad.  This means that you have no control on what it does
> with the minibuffer, and can't fix its bad effects.

Yeah, is quite difficult just to deactivate it.

Whatever.

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:20                                   ` Juanma Barranquero
@ 2007-06-16  1:17                                     ` Drew Adams
  2007-06-16  1:30                                       ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2007-06-16  1:17 UTC (permalink / raw)
  To: emacs-devel

> > Better, IMO, would be something that even non-Lispers could 
> > use. Just use a face-valued variable in place of the face symbol. 
> > Or just add a `defface' and use that new face, not `highlight'.
> 
> Ugh.

And your reason for your ughness is? Because you enjoy making things harder for users? ;-) Something else?

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-16  1:17                                     ` Drew Adams
@ 2007-06-16  1:30                                       ` Juanma Barranquero
  2007-06-16  5:40                                         ` Drew Adams
  0 siblings, 1 reply; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-16  1:30 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

On 6/16/07, Drew Adams <drew.adams@oracle.com> wrote:

> And your reason for your ughness is? Because you enjoy making things harder for users? ;-) Something else?

Because this is a tiny feature that I think most users won't
customize, and that doesn't merit (IMHO, etc.) one defcustom, let
alone two...

And more to the point, you're arbitrarily supposing that changing the
text (the "[%s]") and the face is all the user would want to
customize. If you want to be *really* general, allow a function, so I
can do

(setq minibuffer-depth-indicator
      #'(lambda (level)
          (concat (make-string level ?*) " ")))

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2007-06-16  1:30                                       ` Juanma Barranquero
@ 2007-06-16  5:40                                         ` Drew Adams
  2007-06-16 11:32                                           ` Juanma Barranquero
  0 siblings, 1 reply; 73+ messages in thread
From: Drew Adams @ 2007-06-16  5:40 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: emacs-devel

> Because this is a tiny feature that I think most users won't
> customize, and that doesn't merit (IMHO, etc.) one defcustom, let
> alone two...

"Most users" misses the mark. It is a self-fulfilling prophecy - if you make it difficult for most users to change this, they won't. Most users will limit their changes to whatever you have facilitated changing. If you require a password that only you know, for instance, then "most users" is limited to (at most) you.

Regardless of the calculation of "most users", you think wrong for at least one user - me. The first thing I did after getting Miles's code was to add a defface and a defcustom to it. Here's my mb-depth+.el, which at least some other users have also been using since last November:

(require 'mb-depth nil t)

(defface mb-depth-indicator '((t (:inherit default)))
  "Face used to indicate minibuffer depth."
  :group 'convenience :group 'faces)

(defcustom mb-depth-indicator-format "%d) "
  "*Format string for minibuffer depth indicator."
  :type 'string :group 'convenience)

;; REPLACE original defined in `mb-depth.el'.
;; Uses customizable format string and face.
(defun minibuf-depth-setup-minibuffer ()
  "Set up a minibuffer for `minibuffer-indicate-depth-mode'.
The prompt should already have been inserted."
  (when (> (minibuffer-depth) 1)
    (setq minibuf-depth-overlay
          (make-overlay (point-min) (1+ (point-min))))
    (overlay-put minibuf-depth-overlay 'before-string
		 (propertize
              (format mb-depth-indicator-format
                     (minibuffer-depth))
              'face 'mb-depth-indicator))
    (overlay-put minibuf-depth-overlay 'evaporate t)))

(provide 'mb-depth+)

Call me silly. Call me interested in "tiny features" that "most users" don't care about. I call someone who thinks that most users don't care about things like this naive - or uninterested in most users. 

Have you seen the use of cell-phone customizing gadgets in, say, Seoul or Bangkok?  Think users don't care much about personalizing the appearance of the things they use? Think again. One might even argue that that's all we _do_ care about. Look at the interest in Emacs color themes or Windows desktop customizing fluff. One fish, two fish, red fish, blue fish.

It's not all silly. But people are passionate even about preferences that others think of as perfectly silly. (Did I mention religious preferences? Oops...)

> And more to the point, you're arbitrarily supposing that changing the
> text (the "[%s]") and the face is all the user would want to
> customize. 

Arbitrarily? No. Judiciously.  Only? No. Typically. Facilitating changing what users typically have preferences about - when you give them the chance. 

I'd be willing to bet that some users will want to change the text, others will want to change the face, and others both. But you won't see any sign of such preferences as long as you make it hard for them to do that.

["Since we've taken a tough stance and stopped listening to them, we haven't heard anything from them." - French government wrt independentists in New Caledonia in the 90s]

> If you want to be *really* general, allow a function, so I can do
> (setq minibuffer-depth-indicator
>       #'(lambda (level)
>           (concat (make-string level ?*) " ")))

That's no more general than doing nothing - you might as well just provide the original source code, to "be *really* general". Arbitrary generality is not the aim, in any case. Ease of use for the target user audience is the aim. This tiny feature is just a user convenience. And, for me, that target audience is not just Lispers.

This is only a "tiny feature", yes, but it is big enough to bring out differences in point of view wrt what you and I think about the appearance and what we think about how much users might care about the appearance. Imagine how much more difference in point of view there must be in the wider user population! This tiny feature is a good litmus test in user friendliness, IMO.

You proposed:
(defvar minibuffer-depth-indicator 
        (propertize "[%d]" 'face 'highlight)

I replied "Sure, something like that would be OK." So I'm not hostile to your effort.

But I pointed out that having a defvar for that is not very useful - it's about the same amount of difficulty (and requires as much Lisp knowledge) to change the appearance using this variable as it would be to change the source code itself - you've simply extracted a piece of code into an internal variable.

Just replacing defvar with defcustom wouldn't help much either, because non-Lispers still wouldn't have a clue how to change the appearance. Just think about how much Lisp you need to know to understand (propertize "[%d]" 'face 'highlight). Seriously - think about it.

And this is something that is _not_ inherently difficult to change. This is a _trivial_ change for users, provided you don't make it unnecessarily hard to change - for most users. Losers indeed.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  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
  0 siblings, 2 replies; 73+ messages in thread
From: Juanma Barranquero @ 2007-06-16 11:32 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

On 6/16/07, Drew Adams <drew.adams@oracle.com> wrote:

> "Most users" misses the mark. It is a self-fulfilling prophecy - if you make it difficult for most users to change this, they won't. Most users will limit their changes to whatever you have facilitated changing.

When did Emacs turn into something where every single little
featurette had to be configurable with *customize*? Because I
obviously didn't say that you *shouldn't* be able to change the
minibuffer-depth-indicator. Even in the most customize-friendly
packages, often there are defcustoms and there are defvars (and not
only for internal use).

A few years ago, while discussing the help argument highlighting
support, Richard said:

"To say that a user can customize something does not necessarily mean
introducing a defcustom to customize it.  That is one of many
customization mechanisms in Emacs. Another customization mechanism is
to redefine a function.

Some customizations are natural to do in that way, and some are
important enough to be worth installing a defcustom for.  But we
should refuse to fall into thinking automatically "add a defcustom"
whenever we think something might want to be changed by some users.

Many of those things are definitely not worth adding a defcustom for."

That's exactly what I feel about this feature.

> If you require a password that only you know, for instance,
> then "most users" is limited to (at most) you.

Strawman.

> Regardless of the calculation of "most users", you think wrong
> for at least one user - me.

Only if "most" doesn't mean what I think it means in English...

> The first thing I did after getting Miles's code was to add a
> defface and a defcustom to it.

Judging by the prodigious amount of *+.el packages you produce, I tend
to think this is the first thing you do with everyone's code... (I'm
joking here, please don't take it personally.)

> Call me interested in "tiny features" that "most users" don't care about.

Yes.

> I call someone who thinks that most users don't care about
> things like this naive - or uninterested in most users.

Strawman again. "Things like this" suddenly includes a lot of
customizations that I'm *not* *speaking* *about*. And I didn't propose
making the thing non-customizable; only that the user who wants to do
it takes the effort to use a little lisp. That's what .emacs was for,
I thought.

> Have you seen the use of cell-phone customizing gadgets in, say,
> Seoul or Bangkok?  Think users don't care much about
> personalizing the appearance of the things they use? Think again.

Please, Drew, this is starting to get old. Did I *ever* say that
"users don't care much about personalizing the appearance of the
things they use"? Just *once*? [If you answer this message, don't skip
this question; I'm really interested in the answer.]

> It's not all silly. But people are passionate even about
> preferences that others think of as perfectly silly. (Did I
> mention religious preferences? Oops...)

Don't you thing that's a little over the top? Suddenly I'm
ridiculizing people's religious beliefs?

> Arbitrarily? No. Judiciously.

Ah. So suddenly what you do want to customize is judicious, and what
I'd like is not.

> That's no more general than doing nothing - you might as well just provide the original source code, to "be *really* general". Arbitrary generality is not the aim, in any case. Ease of use for the target user audience is the aim.

And you're the target audience. People who can use customize and
change the color is the target audience. People who knows how to
program, or that is not afraid of adding one line of lisp code to
their .emacs is now not the target audience.

> Imagine how much more difference in point of view there must be in the wider user population! This tiny feature is a good litmus test in user friendliness, IMO.

Please.

> And this is something that is _not_ inherently difficult to change. This is a _trivial_ change for users, provided you don't make it unnecessarily hard to change - for most users. Losers indeed.

Please, don't hesitate to write the defcustom that allows the
customizations you want, and *also* the ones I want (including the
ability to run a function). I swear I won't be opposed to it. You
think it should be customizable, you do the effort.

             Juanma

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-16 11:32                                           ` Juanma Barranquero
@ 2007-06-16 12:47                                             ` Juri Linkov
  2007-06-16 14:36                                             ` Drew Adams
  1 sibling, 0 replies; 73+ messages in thread
From: Juri Linkov @ 2007-06-16 12:47 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Drew Adams, emacs-devel

> A few years ago, while discussing the help argument highlighting
> support, Richard said:
>
> "To say that a user can customize something does not necessarily mean
> introducing a defcustom to customize it.  That is one of many
> customization mechanisms in Emacs. Another customization mechanism is
> to redefine a function.

I completely agree with Richard.  Actually I argue not against
the C implementation as such, but I argue for customization.
If the C implementation will allow the user to redefine a function,
this would be good for users.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 73+ messages in thread

* RE: feature request: indicator of minibuffer-recursion depth
  2007-06-16 11:32                                           ` Juanma Barranquero
  2007-06-16 12:47                                             ` Juri Linkov
@ 2007-06-16 14:36                                             ` Drew Adams
  1 sibling, 0 replies; 73+ messages in thread
From: Drew Adams @ 2007-06-16 14:36 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: emacs-devel

> A few years ago, while discussing the help argument highlighting
> support, Richard said:

> > "To say that a user can customize something does not necessarily mean
> > introducing a defcustom to customize it.  That is one of many
> > customization mechanisms in Emacs. Another customization mechanism is
> > to redefine a function.

I agree with that 100%.  And?

> Some customizations are natural to do in that way, and some are
> important enough to be worth installing a defcustom for.  But we
> should refuse to fall into thinking automatically "add a defcustom"
> whenever we think something might want to be changed by some users.

No one has argued that. Just as no one, including you so far, has argued that we should _never_ add a defcustom when we think users might want to change something, and instead we should _always_ expect them to redefine functions. This is not about "always" and "never". As in all such cases, it's about judgment, not catechism - there is no hardline rule that you can apply in all cases.

People can judge differently. Richard will ultimately judge, and he might well agree with you on this one. I sometimes disagree with Richard and I sometimes agree with him - same as with anyone else. It is not because Richard said what you quoted above that I adhere to it - exegesis doesn't persuade me - I agree with it because I too think that Customize, like anything else, has its limits.

> > The first thing I did after getting Miles's code was to add a
> > defface and a defcustom to it.
> 
> Judging by the prodigious amount of *+.el packages you produce, I tend
> to think this is the first thing you do with everyone's code... (I'm
> joking here, please don't take it personally.)

I don't take it personally; I don't even interpret it as a criticism, personal or technical. Here is the logic behind that practice, in case you are interested:

Miles posted that code as a snippet to emacs-devel. I expected that code to be added to Emacs 22 (with Kim's 8.3 file renaming and possibly with some other changes). That was the gist of the discussion here at that time.

In order that users besides those who read emacs-devel could benefit from it before the release, I posted Miles's snippet to Emacs Wiki (with his name as author) as mb-depth.el - the file name being talked about here at that time. 

Rather than change that code directly, I provided a separate snippet that improves it a bit for at least some users. I posted that snippet to the wiki separately, under my name (only I am to blame for it). There are snippets of enhancements to Emacs code all over the wiki - people use them or don't use them, as they please. Some are posted as separate files for easy loading, some are just pasted on Web pages and people copy them to their .emacs.

I named my snippet file mb-depth+.el for easy reference to the code it enhances. Would you prefer a different file name? Would you prefer that I didn't post the original at all? Would you prefer that I modified the original directly? What would be your preference?

I was unable to supply patches directly at that time (or, rather, FSF was unwilling to accept them, because of a lack of employer papers). I filed bugs. I sometimes filed enhancement requests or suggested enhancements on emacs-devel. I sometimes added enhancements to the wiki as separate *+.el or *-.el files that I wanted to make available to users immediately (vs them waiting until the next release or perhaps forever if the enhancement isn't deemed of general use for Emacs itself).

I act similarly with libraries by others that are not part of Emacs: I write to the authors, proposing my amendment or enhancement, saying that they can add it to their library if they like (and that no attribution to me is needed). If I cannot get a reply or the author doesn't want to add the enhancement to the original library, and if I still think it can be useful, then I add it to the wiki as a separate library, and I use my `+/-' file-name convention to make the connection to the file it enhances. My convention uses `-' for a file to be loaded before, and `+' for a file to be loaded after, the file to be enhanced.

That seems like a good approach, to me. What approach would you prefer that I take, Juanma?

> I didn't propose making the thing non-customizable; only that the
> user who wants to do it takes the effort to use a little lisp.
> That's what .emacs was for, I thought.

Learn Lisp to change a color. Right.

Don't get me wrong - I am all in favor of encouraging Emacs users to learn Lisp. And making them do so to be able to change the text or face used here might help some of them to do that. But others will not learn Lisp for such a minor preference change, and there is no good reason that they should not be able to express their preference also.

> > people are passionate even about preferences that others think
> > of as perfectly silly. (Did I mention religious preferences? Oops...)
> 
> Don't you thing that's a little over the top? Suddenly I'm
> ridiculizing people's religious beliefs?

No, I was hinting that _I_ might be doing so.

The point was that people care about things that might seem to others to be only silly "tiny features". One person's silliness can be another person's sacred object. (In traditional English, the expression would in fact be "sacred cow", but that might offend someone - precisely in keeping with the spirit of this point).

> > That's no more general than doing nothing - you might as well 
> > just provide the original source code, to "be *really* general". 
> > Arbitrary generality is not the aim, in any case. Ease of use for 
> > the target user audience is the aim.
> 
> And you're the target audience. 

?

> People who can use customize and
> change the color is the target audience.

Yes. They are _part_ of the Emacs-user target audience. They too are Emacs users or potential users.

> People who knows how to
> program, or that is not afraid of adding one line of lisp code to
> their .emacs is now not the target audience.

No one said that they are not also part of the target audience. Adding ease of use for non-Lispers does not exclude Lispers. Your approach excludes non-Lisper users. That's OK for some things, but it's not necessary for something as simple as this. Even non-Lispers should be able to customize this tiny feature.

> > And this is something that is _not_ inherently difficult to 
> > change. This is a _trivial_ change for users, provided you don't 
> > make it unnecessarily hard to change - for most users. Losers indeed.
> 
> Please, don't hesitate to write the defcustom that allows the
> customizations you want, and *also* the ones I want (including the
> ability to run a function). I swear I won't be opposed to it. You
> think it should be customizable, you do the effort.

I don't think it's a matter of measuring effort. I am not discounting your effort.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 18:39                               ` Stefan Monnier
  2007-06-15 18:48                                 ` Juanma Barranquero
@ 2007-06-16 17:08                                 ` Andreas Röhler
  1 sibling, 0 replies; 73+ messages in thread
From: Andreas Röhler @ 2007-06-16 17:08 UTC (permalink / raw)
  To: emacs-devel

Am Freitag, 15. Juni 2007 20:39 schrieb Stefan Monnier:
> >> There is no reason to add code in C when it is possible to do the same
> >> thing in Emacs Lisp.
> >
> > Fragility.  My minibuffer-setup-hook already has eight functions.
>
> AFAIK, the number of elements on this hook doesn't have any impact
> on fragility.
>
> I haven't looked in detail, but unless the Elisp code needs to go through
> funny contortions to do its job, it looks like a better option.
>
>
>         Stefan
>
>

Herewith a red-nosed users view in this discussion:

If in a programm it's expected, users will write their
own derived functions from it, I'd prefer elisp, in all
other cases C.

As minibuffer-stuff seems rather an Emacs internal
matter, I'd opt for C.

Thanks to all

Andreas Roehler

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: feature request: indicator of minibuffer-recursion depth
  2007-06-15 23:10                               ` Juri Linkov
  2007-06-15 23:19                                 ` Juanma Barranquero
@ 2007-06-16 18:50                                 ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2007-06-16 18:50 UTC (permalink / raw)
  To: Juri Linkov; +Cc: lekktu, emacs-devel, storm, miles

    What in the C implementation makes it cleaner?

It is simple and avoids the need for using hooks.

Please, someone, install the C version
and remove the Lisp version.

^ permalink raw reply	[flat|nested] 73+ messages in thread

end of thread, other threads:[~2007-06-16 18:50 UTC | newest]

Thread overview: 73+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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).