--- Begin Message ---
Subject: |
23.0.94; define-derived-mode keymap inheritance |
Date: |
Tue, 26 May 2009 15:11:04 -0700 |
Reporting this as a bug just in case it is. I don't know.
I have a file that requires `buff-menu.el', then does this, to
redefine `Buffer-menu-mode'.
(when (> emacs-major-version 22)
(put 'Buffer-menu-mode 'mode-class 'special)
(define-derived-mode Buffer-menu-mode special-mode "Buffer Menu"
"..."
(set (make-local-variable 'revert-buffer-function)
'Buffer-menu-revert-function)
(set (make-local-variable 'buffer-stale-function)
#'(lambda (&optional noconfirm) 'fast))
(setq truncate-lines t)
(setq buffer-read-only t)))
That definition is actually identical to the original definition in
buff-menu.el. (In reality, my code adds a bit to the original
definition, but the problem occurs also with just the code above.
If I byte-compile the file in Emacs 22 or 23, which have
`define-derived-mode', then there is no problem. (Likewise, if
I load the *.el file instead of the *.elc.)
If I byte-compile in Emacs 20 (which does not have
`define-derived-mode'), then everything still works as usual,
except for one thing: The keymap for `special-mode' is apparently
not inherited. So for example, `q' and `g' have no key bindings
in the *Buffer List*.
By eyeballing it, the *.elc file would seem to be picking up the
`define-derived-mode' code as if it were a top-level function call,
which is what I would expect. I assume that the macro is defined when
the *.elc is loaded, so I would expect that `define-derived-mode'
would do its thing normally when the *.elc is loaded.
I know that there is no guarantee (quite the opposite) that code
byte-compiled in Emacs 20 will work in Emacs 23. But I wonder if there
might be a bug here anyway, wrt the keymap inheritance. If not, OK. In
that case, I'm just a bit curious what's happening - why everything
else seems to work fine, but the `special-mode' keymap doesn't seem to
be inherited.
In GNU Emacs 23.0.94.1 (i386-mingw-nt5.1.2600)
of 2009-05-24 on SOFT-MJASON
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4)'
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#3394: 23.0.94; define-derived-mode keymap inheritance |
Date: |
Tue, 26 May 2009 22:47:33 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.94 (gnu/linux) |
> I know that there is no guarantee (quite the opposite) that code
> byte-compiled in Emacs 20 will work in Emacs 23. But I wonder if there
> might be a bug here anyway, wrt the keymap inheritance. If not, OK. In
Well, yes, there was a bug in Emacs-20's implementation of
define-derived-mode. Not much we can do about it, I'm afraid.
Stefan
--- End Message ---