bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#24176: Confusing interaction between define-derived-mode and font-lo


From: Lars Ingebrigtsen
Subject: bug#24176: Confusing interaction between define-derived-mode and font-lock-add-keywords
Date: Sun, 17 Nov 2019 07:59:53 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

npostavs@users.sourceforge.net writes:

> Clément Pit--Claudel <clement.pitclaudel@live.com> writes:
>
>> Sorry, the original report had a confusing example; here is a fixed copy.
>>
>> (define-derived-mode ~/a fundamental-mode "~/a"
>>   (font-lock-add-keywords nil `(("a" 0 'font-lock-keyword-face))))
>> (define-derived-mode ~/b ~/a "~/b"
>>   (font-lock-add-keywords nil `(("b" 0 'font-lock-builtin-face))))
>> (define-derived-mode ~/c ~/b "~/c"
>>   (font-lock-add-keywords nil `(("c" 0 'font-lock-constant-face))))
>>
>> Explicitly calling (setq font-lock-major-mode major-mode) before
>> calling font-lock-add-keywords yields the expected behaviour.
>
> Yeah, it seems `font-lock-set-defaults' (called from
> `font-lock-add-keywords') deletes the parent mode's added keywords since
> they were not from the "correct" mode.
>
>     (defun font-lock-set-defaults ()
>       "Set fontification defaults appropriately for this mode.
>     Sets various variables using `font-lock-defaults' and
>     `font-lock-maximum-decoration'."
>       ;; Set fontification defaults if not previously set for correct major 
> mode.
>       (unless (and font-lock-set-defaults
>                (eq font-lock-major-mode major-mode))
>         (setq font-lock-major-mode major-mode)
>         (setq font-lock-set-defaults t)
>         ...

Stefan, is this working as designed?  If so, the behaviour should
perhaps be mentioned in the doc for font-lock-add-keywords and/or
define-derived-mode?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





reply via email to

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