* menu indications of key bindings for remapped commands
@ 2007-01-10 22:24 Drew Adams
2007-01-10 23:37 ` Stefan Monnier
2007-01-11 9:42 ` Kim F. Storm
0 siblings, 2 replies; 13+ messages in thread
From: Drew Adams @ 2007-01-10 22:24 UTC (permalink / raw)
What is the reason that a remapped command in a menu item has its key
binding listed as, for example, "(<remap> <switch-to-buffer>)"? Is it
because it would be impossible or difficult to pick up one of the final keys
that it is actually bound to - e.g. "(C-x b)"?
I assume this is not an oversight or a bug - I'm just curious as to why this
appears this way. It is not especially useful for users to see this, IMO.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: menu indications of key bindings for remapped commands
2007-01-10 22:24 menu indications of key bindings for remapped commands Drew Adams
@ 2007-01-10 23:37 ` Stefan Monnier
2007-01-13 5:49 ` Drew Adams
2007-01-11 9:42 ` Kim F. Storm
1 sibling, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2007-01-10 23:37 UTC (permalink / raw)
Cc: Emacs-Devel
> What is the reason that a remapped command in a menu item has its key
> binding listed as, for example, "(<remap> <switch-to-buffer>)"? Is it
> because it would be impossible or difficult to pick up one of the final keys
> that it is actually bound to - e.g. "(C-x b)"?
It's a bug.
Could you give a test case?
Stefan
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: menu indications of key bindings for remapped commands
2007-01-10 22:24 menu indications of key bindings for remapped commands Drew Adams
2007-01-10 23:37 ` Stefan Monnier
@ 2007-01-11 9:42 ` Kim F. Storm
1 sibling, 0 replies; 13+ messages in thread
From: Kim F. Storm @ 2007-01-11 9:42 UTC (permalink / raw)
Cc: Emacs-Devel
"Drew Adams" <drew.adams@oracle.com> writes:
> What is the reason that a remapped command in a menu item has its key
> binding listed as, for example, "(<remap> <switch-to-buffer>)"? Is it
> because it would be impossible or difficult to pick up one of the final keys
> that it is actually bound to - e.g. "(C-x b)"?
>
> I assume this is not an oversight or a bug - I'm just curious as to why this
> appears this way. It is not especially useful for users to see this, IMO.
I don't see it. And I have several remapped commands (from ido-mode).
Can you please give a specific example/recipe of this.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: menu indications of key bindings for remapped commands
[not found] <EIENLHALHGIMHGDOLMIMMEEFCOAA.drew.adams@oracle.com>
@ 2007-01-11 18:15 ` Drew Adams
2007-01-11 21:29 ` Kim F. Storm
0 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-01-11 18:15 UTC (permalink / raw)
[-- Attachment #1: Type: text/plain, Size: 128 bytes --]
The GIF file got rejected as a "bad attachment". Is the mailing list now
screening attachment file types?
Trying again as PNG.
[-- Attachment #2: menu-w-remapped-keys.png --]
[-- Type: image/png, Size: 10790 bytes --]
[-- Attachment #3: 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] 13+ messages in thread
* menu indications of key bindings for remapped commands
@ 2007-01-11 18:32 Drew Adams
2007-01-11 21:33 ` Kim F. Storm
0 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-01-11 18:32 UTC (permalink / raw)
I guess this whole message got rejected when the GIF attachment was deemed
"bad". Here it is again, without the attachment (see PNG sent separately).
From: Drew Adams Sent: Thursday, January 11, 2007 10:05 AM
> > What is the reason that a remapped command in a menu item has its key
> > binding listed as, for example, "(<remap> <switch-to-buffer>)"? Is it
> > because it would be impossible or difficult to pick up one of
> > the final keys that it is actually bound to - e.g. "(C-x b)"?
> >
> > I assume this is not an oversight or a bug - I'm just curious
> > as to why this appears this way. It is not especially useful for
> > users to see this, IMO.
>
> I don't see it. And I have several remapped commands (from ido-mode).
See attached image.
> Can you please give a specific example/recipe of this.
The code is here: http://www.emacswiki.org/cgi-bin/wiki/icicles-mode.el.
The relevant code creating the first menu item is this:
(setq icicle-mode-map (make-sparse-keymap))
(unless icicle-menu-map
(setq icicle-menu-map (make-sparse-keymap "Icicles"))
(define-key icicle-mode-map [menu-bar icicles]
(cons "Icicles" icicle-menu-map)))
(define-key icicle-menu-map [icicle-buffer]
'("+ Switch to Buffer..." . icicle-buffer)))
The code that does the remapping for the first menu item is this:
(define-key icicle-mode-map [remap switch-to-buffer]
'icicle-buffer)
The Icicles menubar menu is available whenever global minor mode
`icicle-mode' is turned on. In that minor mode, `switch-to-buffer' is
remapped to `icicle-buffer'. In the Icicles menu, that binding is indicated
as "(<remap> <switch-to-buffer>)".
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: menu indications of key bindings for remapped commands
2007-01-11 18:15 ` Drew Adams
@ 2007-01-11 21:29 ` Kim F. Storm
2007-01-12 2:06 ` Drew Adams
0 siblings, 1 reply; 13+ messages in thread
From: Kim F. Storm @ 2007-01-11 21:29 UTC (permalink / raw)
Cc: Emacs-Devel
"Drew Adams" <drew.adams@oracle.com> writes:
> The GIF file got rejected as a "bad attachment". Is the mailing list now
> screening attachment file types?
>
> Trying again as PNG.
>
That is not a standard menu ...so I cannot judge how the remap stuff
got into it.
If you start emacs -Q, then do M-x ido-mode, and the look at the File
and Buffer menus, it correctly shows the C-x C-f and C-x b bindings
even though the commands are remapped.
Maybe the problem is related to remapping stuff in the global map or
some such. Please be more specific.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: menu indications of key bindings for remapped commands
2007-01-11 18:32 Drew Adams
@ 2007-01-11 21:33 ` Kim F. Storm
0 siblings, 0 replies; 13+ messages in thread
From: Kim F. Storm @ 2007-01-11 21:33 UTC (permalink / raw)
Cc: Emacs-Devel
"Drew Adams" <drew.adams@oracle.com> writes:
> (define-key icicle-menu-map [icicle-buffer]
> '("+ Switch to Buffer..." . icicle-buffer)))
Does it help to use
(define-key icicle-menu-map [icicle-buffer]
'(menu-item "+ Switch to Buffer..." icicle-buffer)))
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: menu indications of key bindings for remapped commands
2007-01-11 21:29 ` Kim F. Storm
@ 2007-01-12 2:06 ` Drew Adams
0 siblings, 0 replies; 13+ messages in thread
From: Drew Adams @ 2007-01-12 2:06 UTC (permalink / raw)
I think I've discovered what the problem is. IMO, there is a bug in the
definition of menu items.
As Kim pointed out, ido has no such problem. However, ido does not create a
menu item; it simply remaps a command that was already used in a menu item -
e.g., command `switch-to-buffer', used in "Buffers" menu item "Select Named
Buffer... (C-x b)". It is the binding of the command `switch-to-buffer' that
is reflected in that menu item. The menu item calls command
`ido-switch-buffer', but the binding displayed is that of
`switch-to-buffer', not that of `ido-switch-buffer'.
In my case, I create menu items, both in standard menus such as "File" and
in a new menu, "Icicles". But that's not the difference that matters. When I
create a menu item for buffer switching, I use a new command,
`icicle-buffer', which is the target of a command remapping. I have this:
(define-key icicle-mode-map [remap switch-to-buffer]
'icicle-buffer)
And it is the new command `icicle-buffer', not the remapped command
`switch-to-buffer', that I use to define the menu item:
(define-key icicle-menu-map [icicle-buffer]
'("+ Switch to Buffer..." . icicle-buffer)))
^^^^^^^^^^^^^
It is the immediate binding of the command `icicle-buffer', "(<remap>
<switch-to-buffer>)", that is reflected in the menu item. From a user point
of view, it is only the ultimate, user-friendly key binding that is of
interest, that is, the binding of the remapped command, `switch-to-buffer'.
It is that binding, "(C-x b)", that should be displayed in the menu item.
Showing "(<remap> <switch-to-buffer>)" to the user is a bug, IMO.
If I use the remapped command, `switch-to-buffer', in the menu-item
definition, then the correct key binding, "(C-x b)", does indeed show up in
the menu item:
(define-key icicle-menu-map [icicle-buffer]
'("+ Switch to Buffer..." . switch-to-buffer)))
^^^^^^^^^^^^^^^^
But it is handy and more readable to use the new command that is the remap
target, `icicle-buffer', not the remapped command, `switch-to-buffer', in
the menu-item definition. A library will typically want to express
everything in terms of its own command, and then have a single remapping
that references the remapped command. And it is possible that the remapped
command has no key binding at runtime - in that case, the menu item should
show no key binding; it should not show (<remap>...). The bottom line is
that the key-binding indication in a menu item should be as helpful as
possible to the user.
So, I see two use cases:
1. (ido use case) Remap a command that was already used to define a menu
item.
2. (icicles use case) Define a new menu item, using a command that is a
remap target. (The remapped command might or might not itself also be
already used to define a different menu item.)
The key binding shown in the menu item should in both cases be user-friendly
(C-x b), that is, regardless of which command is used in the menu-item
definition: remap source or remap target.
In the case of Icicles, the "Buffers" menu item "Select Named Buffer..."
does show the user-friendly binding "(C-x b)", because it is a pre-existing
menu item that was defined using command `switch-to-buffer'. The same key
binding should also be shown for a new menu item that is defined using the
remap target, `icicle-buffer'.
The user should see only the final key binding - what s?he types, which is
always the binding of the remap source (`switch-to-buffer', in this case).
The fix is to treat a remap target the same way: always get and use the
ultimate key binding in the menu item.
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: menu indications of key bindings for remapped commands
2007-01-10 23:37 ` Stefan Monnier
@ 2007-01-13 5:49 ` Drew Adams
2007-01-14 1:56 ` Richard Stallman
0 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-01-13 5:49 UTC (permalink / raw)
> > What is the reason that a remapped command in a menu item has its key
> > binding listed as, for example, "(<remap> <switch-to-buffer>)"? Is it
> > because it would be impossible or difficult to pick up one of
> > the final keys
> > that it is actually bound to - e.g. "(C-x b)"?
>
> It's a bug.
> Could you give a test case?
See my previous mail. Just create a menu using a command that is the
*target* of a command remapping. IOW, remap foo to bar, and then create a
menu item using command bar (not foo). My previous email details the problem
and gives examples.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: menu indications of key bindings for remapped commands
2007-01-13 5:49 ` Drew Adams
@ 2007-01-14 1:56 ` Richard Stallman
2007-01-22 19:44 ` Drew Adams
0 siblings, 1 reply; 13+ messages in thread
From: Richard Stallman @ 2007-01-14 1:56 UTC (permalink / raw)
Cc: emacs-devel
> Could you give a test case?
See my previous mail. Just create a menu using a command that is the
*target* of a command remapping.
That is not a test case, that is a general description. A test case
is code we can execute and see the failure. A complete test case has
no place where it says "you fill in these details."
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: menu indications of key bindings for remapped commands
2007-01-14 1:56 ` Richard Stallman
@ 2007-01-22 19:44 ` Drew Adams
2007-05-20 23:54 ` Drew Adams
0 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-01-22 19:44 UTC (permalink / raw)
> > It's a bug.
> > Could you give a test case?
>
> See my previous mail. Just create a menu using a command that is the
> *target* of a command remapping.
>
> That is not a test case, that is a general description. A test case
> is code we can execute and see the failure.
Try this in emacs -Q
(defvar bar-mode-map (make-sparse-keymap)
"Keymap for Bar mode.")
(defvar bar-menu-map (make-sparse-keymap "Bar")
"Keymap for Bar menu.")
(define-key bar-mode-map [menu-bar bar]
(cons "Bar" bar-menu-map))
(define-key bar-mode-map [remap switch-to-buffer]
'bar-buffer)
;; This way, the key binding shows incorrectly in the menu.
(define-key bar-menu-map [bar-buffer]
'("Bar Buffer..." . bar-buffer))
;; This way, the key binding shows correctly in the menu.
;;(define-key bar-menu-map [bar-buffer]
;; '("Bar Buffer..." . switch-to-buffer))
(define-minor-mode bar-mode "Bar mode")
M-x bar-mode
You'll see the bad menu item (bad key-binding description) in menu Bar.
Now execute the commented code. The menu item is now as it should be.
--
Interestingly, this apparently has something to do with the minor-mode map,
because similar code using the global map does not have the same problem. It
shows, however, no binding at all in the menu item.
(defvar foo-menu-map (make-sparse-keymap "Foo")
"Keymap for Foo menu.")
(define-key global-map [menu-bar foo]
(cons "Foo" foo-menu-map))
(define-key global-map [remap switch-to-buffer]
'foo-buffer)
;; This way, there is no key binding in the menu.
(define-key foo-menu-map [foo-buffer]
'("Foo Buffer..." . foo-buffer))
;; This way, the key binding shows correctly in the menu.
;;(define-key foo-menu-map [foo-buffer]
;; '("Foo Buffer..." . switch-to-buffer))
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: menu indications of key bindings for remapped commands
2007-01-22 19:44 ` Drew Adams
@ 2007-05-20 23:54 ` Drew Adams
2007-05-24 21:22 ` Richard Stallman
0 siblings, 1 reply; 13+ messages in thread
From: Drew Adams @ 2007-05-20 23:54 UTC (permalink / raw)
To: emacs-devel
I reported this bug in January, but I have not heard anything since. It is
still a bug, as of a build from March 21. Any news?
> From: Drew Adams Sent: Monday, January 22, 2007 11:44 AM
> > > It's a bug.
> > > Could you give a test case?
> >
> > See my previous mail. Just create a menu using a command that is the
> > *target* of a command remapping.
> >
> > That is not a test case, that is a general description. A test case
> > is code we can execute and see the failure.
>
> Try this in emacs -Q
>
> (defvar bar-mode-map (make-sparse-keymap)
> "Keymap for Bar mode.")
> (defvar bar-menu-map (make-sparse-keymap "Bar")
> "Keymap for Bar menu.")
>
> (define-key bar-mode-map [menu-bar bar]
> (cons "Bar" bar-menu-map))
> (define-key bar-mode-map [remap switch-to-buffer]
> 'bar-buffer)
>
> ;; This way, the key binding shows incorrectly in the menu.
> (define-key bar-menu-map [bar-buffer]
> '("Bar Buffer..." . bar-buffer))
>
> ;; This way, the key binding shows correctly in the menu.
> ;;(define-key bar-menu-map [bar-buffer]
> ;; '("Bar Buffer..." . switch-to-buffer))
>
> (define-minor-mode bar-mode "Bar mode")
>
> M-x bar-mode
>
> You'll see the bad menu item (bad key-binding description) in menu Bar.
>
> Now execute the commented code. The menu item is now as it should be.
>
> --
>
> Interestingly, this apparently has something to do with the
> minor-mode map,
> because similar code using the global map does not have the same
> problem. It
> shows, however, no binding at all in the menu item.
>
> (defvar foo-menu-map (make-sparse-keymap "Foo")
> "Keymap for Foo menu.")
>
> (define-key global-map [menu-bar foo]
> (cons "Foo" foo-menu-map))
> (define-key global-map [remap switch-to-buffer]
> 'foo-buffer)
>
> ;; This way, there is no key binding in the menu.
> (define-key foo-menu-map [foo-buffer]
> '("Foo Buffer..." . foo-buffer))
>
> ;; This way, the key binding shows correctly in the menu.
> ;;(define-key foo-menu-map [foo-buffer]
> ;; '("Foo Buffer..." . switch-to-buffer))
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: menu indications of key bindings for remapped commands
2007-05-20 23:54 ` Drew Adams
@ 2007-05-24 21:22 ` Richard Stallman
0 siblings, 0 replies; 13+ messages in thread
From: Richard Stallman @ 2007-05-24 21:22 UTC (permalink / raw)
To: emacs-devel; +Cc: Drew Adams
Would someone please fix this and ack?
> Try this in emacs -Q
>
> (defvar bar-mode-map (make-sparse-keymap)
> "Keymap for Bar mode.")
> (defvar bar-menu-map (make-sparse-keymap "Bar")
> "Keymap for Bar menu.")
>
> (define-key bar-mode-map [menu-bar bar]
> (cons "Bar" bar-menu-map))
> (define-key bar-mode-map [remap switch-to-buffer]
> 'bar-buffer)
>
> ;; This way, the key binding shows incorrectly in the menu.
> (define-key bar-menu-map [bar-buffer]
> '("Bar Buffer..." . bar-buffer))
>
> ;; This way, the key binding shows correctly in the menu.
> ;;(define-key bar-menu-map [bar-buffer]
> ;; '("Bar Buffer..." . switch-to-buffer))
>
> (define-minor-mode bar-mode "Bar mode")
>
> M-x bar-mode
>
> You'll see the bad menu item (bad key-binding description) in menu Bar.
>
> Now execute the commented code. The menu item is now as it should be.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2007-05-24 21:22 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-10 22:24 menu indications of key bindings for remapped commands Drew Adams
2007-01-10 23:37 ` Stefan Monnier
2007-01-13 5:49 ` Drew Adams
2007-01-14 1:56 ` Richard Stallman
2007-01-22 19:44 ` Drew Adams
2007-05-20 23:54 ` Drew Adams
2007-05-24 21:22 ` Richard Stallman
2007-01-11 9:42 ` Kim F. Storm
[not found] <EIENLHALHGIMHGDOLMIMMEEFCOAA.drew.adams@oracle.com>
2007-01-11 18:15 ` Drew Adams
2007-01-11 21:29 ` Kim F. Storm
2007-01-12 2:06 ` Drew Adams
-- strict thread matches above, loose matches on Subject: below --
2007-01-11 18:32 Drew Adams
2007-01-11 21:33 ` Kim F. Storm
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.