emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Extending define-derived-mode


From: Yuan Fu
Subject: Re: Extending define-derived-mode
Date: Fri, 2 Jun 2023 00:45:31 -0700


> On May 31, 2023, at 10:47 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> 
>> From: Yuan Fu <casouri@gmail.com>
>> Date: Wed, 31 May 2023 13:48:56 -0700
>> Cc: Stefan Monnier <monnier@iro.umontreal.ca>,
>> emacs-devel@gnu.org,
>> mickey@masteringemacs.org,
>> theo@thornhill.no,
>> dgutov@yandex.ru
>> 
>>> This is not simple in practice.  Ask yourself why don't the
>>> FOO-ts-mode's simply run the (existing) hooks of FOO-mode?  Look at
>>> the code, and you will understand: the stuff people put in these hooks
>>> usually customizes aspects that are very different in each of the
>>> modes: font-lock, indentation, syntax tables, supporting "electric"
>>> sub-modes, styles of comments and other things, etc.  The few places
>>> where the new TS modes tried to run the same hooks and share most of
>>> the initialization code (for example, bash-ts-mode and sh-mode,
>>> python-ts-mode and python-mode) introduced subtle bugs which were only
>>> recently fixed.  One problem with inheriting from the same base mode
>>> is that doing initialization there could be problematic because the
>>> mode stuff that gets automatically instantiated and initialized by
>>> define-derived-mode, such as the mode's map and variable, is not yet
>>> set up when the base mode's initialization runs, so you cannot do some
>>> of the things we are used to do there, like setting up the menu-bar
>>> menus.
>>> 
>>> So it would seem that, for efficient and convenient facilities of this
>>> kind, we need some way of defining stuff in the base mode, which will
>>> be actually run later, when the child mode is set up.
>> 
>> I don’t entirely understand the example. Say I have a xxx-base-mode, and I 
>> want to setup menu-bar menus in it to be shared by xxx-mode and xxx-ts-mode. 
>> What is the problem that I’m gonna run into? Couldn’t you just use the 
>> base-mode’s keymap?
> 
> A base mode usually doesn't have a map, only the actually used derived
> modes do.

We can create a map for the base mode, and the child mode’s map will inherit 
from it.

Yuan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]