GNU bug report logs - #9922
24.0.91; prompt by y-or-n-p changes tool bar on another frame

Previous Next

Package: emacs;

Reported by: Eli Zaretskii <eliz <at> gnu.org>

Date: Mon, 31 Oct 2011 18:27:02 UTC

Severity: normal

Found in version 24.0.91

Done: Chong Yidong <cyd <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #11 received at 9922 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 9922 <at> debbugs.gnu.org
Subject: Re: bug#9922: 24.0.91;
	prompt by y-or-n-p changes tool bar on another frame
Date: Thu, 26 Apr 2012 22:46:47 +0800
Eli Zaretskii <eliz <at> gnu.org> writes:

>>  emacs -Q
>>  C-h i
>>  C-x 5 b RET
>>  
>> Now switch to the frame that shows the "*info*" buffer and type
>> 
>>  M-: (y-or-n-p "Foo?") RET
>> 
>> After you hit RET, Emacs prompts in the minibuffer, and the tool bar
>> on the frame that shows "*scratch*" suddenly shows button
>> configuration of the Info mode!

> the problem seems to be caused by this fragment from subr.el:read-key:
>
> 	  (use-global-map
>            (let ((map (make-sparse-keymap)))
>              ;; Don't hide the menu-bar and tool-bar entries.
>              (define-key map [menu-bar] (lookup-key global-map [menu-bar]))
>              (define-key map [tool-bar] (lookup-key global-map [tool-bar]))
>              map))

The above `lookup-key' call returns the tool bar map generated by
evaluating `tool-bar-make-keymap' (which is the :filter function for the
menu item bound to [tool-bar]).  The value returned by that function is
frame- and buffer-specific, but because it gets applied to the
replacement global map, it takes effect in all frames.

Unfortunately, currently we don't have a way to tell `lookup-key' to
just return the menu item without evaluating :filter functions.  The
following hack would work around this for 24.1, though it's a bit
black-magicky.

Stefan, AFAICT think you wrote the code in question.  Opinions?


=== modified file 'lisp/subr.el'
*** lisp/subr.el	2012-04-19 06:04:05 +0000
--- lisp/subr.el	2012-04-26 14:40:59 +0000
***************
*** 2019,2025 ****
             (let ((map (make-sparse-keymap)))
               ;; Don't hide the menu-bar and tool-bar entries.
               (define-key map [menu-bar] (lookup-key global-map [menu-bar]))
!              (define-key map [tool-bar] (lookup-key global-map [tool-bar]))
               map))
  	  (aref	(catch 'read-key (read-key-sequence-vector prompt nil t)) 0))
        (cancel-timer timer)
--- 2019,2027 ----
             (let ((map (make-sparse-keymap)))
               ;; Don't hide the menu-bar and tool-bar entries.
               (define-key map [menu-bar] (lookup-key global-map [menu-bar]))
!              (define-key map [tool-bar]
! 	       (or (cdr (assq 'tool-bar global-map))
! 		   (lookup-key global-map [tool-bar])))
               map))
  	  (aref	(catch 'read-key (read-key-sequence-vector prompt nil t)) 0))
        (cancel-timer timer)





This bug report was last modified 13 years and 23 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.