emacs-devel
[Top][All Lists]
Advanced

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

Re: Extending define-derived-mode


From: Eli Zaretskii
Subject: Re: Extending define-derived-mode
Date: Thu, 01 Jun 2023 08:47:19 +0300

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



reply via email to

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