unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: master 79d9f3982f: Add derived-mode test for bug#24176
       [not found] ` <20220124141512.66398C0DA30@vcs2.savannah.gnu.org>
@ 2022-01-24 14:53   ` Stefan Monnier
  2022-01-24 17:28     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2022-01-24 14:53 UTC (permalink / raw)
  To: emacs-devel; +Cc: Lars Ingebrigtsen

> +(ert-deftest test-add-font-lock ()
> +  (define-derived-mode mode-a fundamental-mode "mode-a"
> +    (font-lock-add-keywords nil `(("a" 0 'font-lock-keyword-face))))
> +  (define-derived-mode mode-b mode-a "mode-b"
> +    (font-lock-add-keywords nil `(("b" 0 'font-lock-builtin-face))))
> +  (define-derived-mode mode-c mode-b "mode-c"
> +    (font-lock-add-keywords nil `(("c" 0 'font-lock-constant-face))))
> +
> +  (with-temp-buffer
> +    (mode-c)
> +    (should (equal font-lock-keywords
> +                   '(t (("c" 0 'font-lock-constant-face)
> +                        ("b" 0 'font-lock-builtin-face)
> +                        ("a" 0 'font-lock-keyword-face))
> +                       ("c" (0 'font-lock-constant-face))
> +                       ("b" (0 'font-lock-builtin-face))
> +                       ("a" (0 'font-lock-keyword-face)))))))

An interesting other case is:

    (defvar mode-a-flk '(("a" 0 'font-lock-keyword-face)))
    (define-derived-mode mode-a fundamental-mode "mode-a"
      (setq-local font-lock-defaults '(mode-a-flk)))
    (define-derived-mode mode-b mode-a "mode-b"
      (font-lock-add-keywords nil `(("b" 0 'font-lock-builtin-face))))
    (defvar mode-c-flk '(("c" 0 'font-lock-keyword-face)))
    (define-derived-mode mode-c mode-b "mode-c"
      (setq-local font-lock-defaults '(mode-c-flk)))


-- Stefan




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: master 79d9f3982f: Add derived-mode test for bug#24176
  2022-01-24 14:53   ` master 79d9f3982f: Add derived-mode test for bug#24176 Stefan Monnier
@ 2022-01-24 17:28     ` Lars Ingebrigtsen
  2022-01-24 22:52       ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-24 17:28 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> An interesting other case is:
>
>     (defvar mode-a-flk '(("a" 0 'font-lock-keyword-face)))
>     (define-derived-mode mode-a fundamental-mode "mode-a"
>       (setq-local font-lock-defaults '(mode-a-flk)))
>     (define-derived-mode mode-b mode-a "mode-b"
>       (font-lock-add-keywords nil `(("b" 0 'font-lock-builtin-face))))
>     (defvar mode-c-flk '(("c" 0 'font-lock-keyword-face)))
>     (define-derived-mode mode-c mode-b "mode-c"
>       (setq-local font-lock-defaults '(mode-c-flk)))

And font-lock-keywords should then be...
(t (("c" 0 'font-lock-keyword-face)))?

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



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: master 79d9f3982f: Add derived-mode test for bug#24176
  2022-01-24 17:28     ` Lars Ingebrigtsen
@ 2022-01-24 22:52       ` Stefan Monnier
  2022-01-25 12:16         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2022-01-24 22:52 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen [2022-01-24 18:28:34] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> An interesting other case is:
>>
>>     (defvar mode-a-flk '(("a" 0 'font-lock-keyword-face)))
>>     (define-derived-mode mode-a fundamental-mode "mode-a"
>>       (setq-local font-lock-defaults '(mode-a-flk)))
>>     (define-derived-mode mode-b mode-a "mode-b"
>>       (font-lock-add-keywords nil `(("b" 0 'font-lock-builtin-face))))
>>     (defvar mode-c-flk '(("c" 0 'font-lock-keyword-face)))
>>     (define-derived-mode mode-c mode-b "mode-c"
>>       (setq-local font-lock-defaults '(mode-c-flk)))
>
> And font-lock-keywords should then be...
> (t (("c" 0 'font-lock-keyword-face)))?

I think so, yes, or maybe b+c, but it definitely should not be a+b.


        Stefan




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: master 79d9f3982f: Add derived-mode test for bug#24176
  2022-01-24 22:52       ` Stefan Monnier
@ 2022-01-25 12:16         ` Lars Ingebrigtsen
  2022-01-25 13:10           ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-25 12:16 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>>>     (defvar mode-a-flk '(("a" 0 'font-lock-keyword-face)))
>>>     (define-derived-mode mode-a fundamental-mode "mode-a"
>>>       (setq-local font-lock-defaults '(mode-a-flk)))
>>>     (define-derived-mode mode-b mode-a "mode-b"
>>>       (font-lock-add-keywords nil `(("b" 0 'font-lock-builtin-face))))
>>>     (defvar mode-c-flk '(("c" 0 'font-lock-keyword-face)))
>>>     (define-derived-mode mode-c mode-b "mode-c"
>>>       (setq-local font-lock-defaults '(mode-c-flk)))
>>
>> And font-lock-keywords should then be...
>> (t (("c" 0 'font-lock-keyword-face)))?
>
> I think so, yes, or maybe b+c, but it definitely should not be a+b.

Hm...  do you see any obvious way to fix this?  We could document that
you have to set font-lock-set-defaults to nil if you're setting
font-lock-defaults in a derived mode, but that's not very
satisfactory...  or we could store the value of font-lock-defaults and
check whether it's changed (in font-lock-set-defaults)?  Hm...

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



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: master 79d9f3982f: Add derived-mode test for bug#24176
  2022-01-25 12:16         ` Lars Ingebrigtsen
@ 2022-01-25 13:10           ` Stefan Monnier
  2022-01-25 14:39             ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2022-01-25 13:10 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

>>> And font-lock-keywords should then be...
>>> (t (("c" 0 'font-lock-keyword-face)))?
>> I think so, yes, or maybe b+c, but it definitely should not be a+b.
> Hm...  do you see any obvious way to fix this?  We could document that
> you have to set font-lock-set-defaults to nil if you're setting
> font-lock-defaults in a derived mode, but that's not very
> satisfactory...  or we could store the value of font-lock-defaults and
> check whether it's changed (in font-lock-set-defaults)?  Hm...

I'm not completely sure either, no.
I do think we should strive to make `font-lock-add/remove-keywords` work
in a more "declarative" way, such that we can throw away
`font-lock-keywords` and recompute it at any time.


        Stefan




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: master 79d9f3982f: Add derived-mode test for bug#24176
  2022-01-25 13:10           ` Stefan Monnier
@ 2022-01-25 14:39             ` Lars Ingebrigtsen
  0 siblings, 0 replies; 6+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-25 14:39 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I do think we should strive to make `font-lock-add/remove-keywords` work
> in a more "declarative" way, such that we can throw away
> `font-lock-keywords` and recompute it at any time.

Yes, that's a much better idea, I think.  So in addition to doing
everything they do now, they'd maintain a list of actions that can be
replayed?

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



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-01-25 14:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <164303371205.13369.5637099354011397679@vcs2.savannah.gnu.org>
     [not found] ` <20220124141512.66398C0DA30@vcs2.savannah.gnu.org>
2022-01-24 14:53   ` master 79d9f3982f: Add derived-mode test for bug#24176 Stefan Monnier
2022-01-24 17:28     ` Lars Ingebrigtsen
2022-01-24 22:52       ` Stefan Monnier
2022-01-25 12:16         ` Lars Ingebrigtsen
2022-01-25 13:10           ` Stefan Monnier
2022-01-25 14:39             ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).