Subject: Re: 23.0.60; Unknown button type `quail-keyboard-layout-button'

From: Chong Yidong <[email-masked]>
Date: Thu, 21 Aug 2008 19:41:58 -0400

Hi Handa-san,

> 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.

Do you remember why you wrote quail-help-init this way?  It seems
unnecessary; why not define the button types directly at the top level
of quail.el?