[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#11716: 24.1; `substitute-command-keys' does not respect `defalias'
From: |
Drew Adams |
Subject: |
bug#11716: 24.1; `substitute-command-keys' does not respect `defalias' |
Date: |
Fri, 15 Jun 2012 14:49:27 -0700 |
> > (defun foo () "foo" (interactive) (message "FOO"))
> > (defalias 'bar 'foo)
> > (global-set-key "\C-d" 'foo)
> > (substitute-command-keys "\\[bar]")
> >
> > The last sexp returns "M-x bar". It should return "C-d".
>
> No. C-d is not bound to bar.
No what? I didn't say it was.
C-d is, _in effect_, that is, from a user perspective, bound to `bar'. It is
not bound to `bar' but the effect is that it invokes the code that `bar' runs.
`substitute-command-keys' is used most often in doc strings and such,
communicating to users what they can use to invoke particular commands etc.
It is far more useful to let a user know that s?he can use C-d than it is to
just punt and say "M-x bar".
If a programmer explicitly wants to choose "M-x bar" over letting users know
they can use C-d, s?he can use "M-x bar" and not "\\[bar]".
And yes, the user CAN use C-d, because of the binding of C-d to `foo' and the
defalias of `bar' to `foo'. What's important here is what users can do, not
whether `bar' is actually bound to C-d.
Do you have a counter use case? A typical use of `substitute-command-keys' (or
even an atypical case) where fixing this would cause a problem? A case where
the user should see a distinction between `foo' and `bar' wrt key bindings?