[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
- Re: Extending define-derived-mode, (continued)
Re: Extending define-derived-mode, Yuan Fu, 2023/06/02
Re: Extending define-derived-mode, Theodor Thornhill, 2023/06/01
Re: Extending define-derived-mode, Eli Zaretskii, 2023/06/01
- Re: Extending define-derived-mode,
Yuan Fu <=
Re: Extending define-derived-mode, Philip Kaludercic, 2023/06/05