Subject: Re: bug#4362: 23.1: proced -- Mode help lists 'd' as mark command (prefer 'm')

From: Stefan Monnier <[email-masked]>
Date: Fri, 11 Sep 2009 14:56:21 -0400

>> - u	Move "up" from this node.
>> + ^	Move "up" from this node.

>> - t	Go to the Top node of this file.
>> + <	Go to the Top node of this file.

>> - b	Go to beginning of node.
>> + .	Go to beginning of node.

>> - w	Put name of current Info node in the kill ring.
>> + c	Put name of current Info node in the kill ring.

> These are trickier.  I still haven't figured out why the preference
> order has changed.  Admittedly, this order was arbitrary (doesn't even
> depend on the order of calls to define-key since these bindings are
> stored in the vector part of a dense map) and is also arbitrary in the
> new code, but it would be better to preserve the old order.

Actually, having investigated it some more, I see that the source of the
discrepency is that the new code unifies different paths which
previously traversed the keymaps in different orders.  I.e. in Emacs-23,
the where-is-internal code traversed the keymaps slightly differently
depending on whether or not the cache was used.  So, in the above
example, C-h m (which calls where-is-internal in a way that doesn't use
the cache) returned "u" for Info-up, but the menu-bar entry for "Info =>
Up" listed "^" as the corresponding keybinding.

This explains why I didn't notice this difference: I mostly tested my
code by comparing the bindings listed in the menus.

>> Should we put `:advertised-binding' for all old preferred key bindings
>> explicitly?
> Arguably, it would be good, yes.  But first, I'll try to adjust the code
> to get back the original behavior.  Thanks for bringing it up.

So in the end I don't think the original behavior (i.e. inconsistent
between very slightly different situations) is desirable.  If people
really prefer "u" over "^", then they'll have to add
an :advertised-binding to it.  I personally do care either way.

        Stefan

PS: Note that the advantage of the :advertised-binding feature over the
use of "advertised-foo" aliases is that it doesn't suffer from as many
drawbacks, so it can be used more liberally.  The main drawback was of
course that (where-is 'undo) listed a whole bunch of bindings, but
ironically not the "advertised" one.

PPS: As for the actual proced-mark binding, I've just added
a :advertised-binding, which should fix this bug.