Subject: bug#553 closed by Chong Yidong <[email-masked]> (Re: 23.0.60; Unknown button type `quail-keyboard-layout-button')

From: [email-masked] (Emacs bug Tracking System)

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#553: 23.0.60; Unknown button type `quail-keyboard-layout-button'

It has been closed by Chong Yidong <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Chong Yidong <[email-masked]> by
replying to this email.

-- 
553: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=553
Emacs Bug Tracking System
Contact [email-masked] with problems
>From [email-masked] Fri Sep  5 15:12:47 2008
From: Chong Yidong <[email-masked]>
To: Juri Linkov <[email-masked]>
Cc: [email-masked]
Subject: Re: 23.0.60; Unknown button type `quail-keyboard-layout-button'
Date: Fri, 05 Sep 2008 18:15:22 -0400

> I don't know the reason of writing quail-help-init this way, but it
> seems it was to not load `help-mode' after loading `quail.el'.
> `help-mode' is not necessary for quail's operations, so its loading
> should be postponed for rare cases when the user needs to see the help
> buffer with keyboard layouts.

I don't think it's a big deal to just load help-mode, so I changed
quail.el to do that.

>From [email-masked] Sat Jul 12 15:05:44 2008
From: Juri Linkov <[email-masked]>
To: [email-masked]
Subject: 23.0.60; Unknown button type `quail-keyboard-layout-button'
Organization: JURTA
Date: Sun, 13 Jul 2008 01:04:42 +0300

1. `emacs -Q'
2. `M-: (require 'help-mode) RET'
   or run any Help command that loads this mode
3. Activate an input method by C-\
4. Click `mouse-3' on the input method's indicator
   on the mode-line

It fills the *Help* buffer with the text only until
it tries to create a button, and fails with the error
"make-text-button: Unknown button type `quail-keyboard-layout-button'".

This is because `quail-help-init' fails to define new button types.
It currently has the form:

(defun quail-help-init ()
  (unless (featurep 'help-mode)
    (require 'help-mode)
    (define-button-type 'quail-keyboard-layout-button
      :supertype 'help-xref
      'help-function '(lambda (layout)
			(help-setup-xref `(quail-keyboard-layout-button ,layout)
					 nil)
			(quail-show-keyboard-layout layout))
      'help-echo (purecopy "mouse-2, RET: show keyboard layout"))

    (define-button-type 'quail-keyboard-customize-button
      :supertype 'help-customize-variable
      'help-echo (purecopy "mouse-2, RET: customize keyboard layout"))))

So it doesn't define two button types if `help-mode' is already loaded.

I guess it was done to define them only once, and not redefine on next
invocations.  Instead of checking for (featurep 'help-mode) it could
check if these buttons were already defined.  I can't find a function
like `button-defined-p' to do this.  But the following check seems to work:

(get 'quail-keyboard-layout-button 'button-category-symbol)

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