[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: how to track down "invalid face attribute" errors?
From: |
Robert Pluim |
Subject: |
Re: how to track down "invalid face attribute" errors? |
Date: |
Tue, 27 Sep 2022 16:08:27 +0200 |
>>>>> On Tue, 27 Sep 2022 13:12:12 +0200, Felix Dietrich
>>>>> <felix.dietrich@sperrhaken.name> said:
Felix> Robert Pluim <rpluim@gmail.com> writes:
>> On Mon, 26 Sep 2022 10:04:09 +0100, Eric S Fraga <e.fraga@ucl.ac.uk>
said:
>>
>>> On Sunday, 25 Sep 2022 at 15:00, Emanuel Berg wrote:
>>>
>>>> Sounds like that error message should be changed to include
>>>> what face causes trouble, if possible?
>>
>> I think youʼre looking for the `debug-on-message' variable, since this
>> is a log in *Messages*, not an error.
Felix> Would this work in this case? The variable ‘debug-on-message’ seems
to
Felix> be handled in the C-function ‘set_message’ which, on a cursory
glance, I
Felix> cannot see being called from ‘add_to_log’ or below. Therefore,
Felix> ‘debug-on-message’ may be bypassed in this case here.
In that case gdb and something like this
gdb emacs
> b add_to_log
> commands
> bt
> c
> end
> run
add_to_log is not called that often, so this shouldnʼt create too much
output.
>> (If you have a reproducer, we can look at changing the message)
Felix> Here is one:
Felix> #+begin_src emacs-lisp
Felix> (let ((buf (generate-new-buffer "*test*"))
Felix> (s (propertize "Hello World" 'face '(:foreground nil))))
Felix> (with-current-buffer buf
Felix> (insert s))
Felix> (display-buffer buf))
Felix> #+end_src
Thereʼs no actual face there for Emacs to log, what the low-level code
receives is "(:foreground nil)"
Felix> Upon evaluation, the resulting output in the “*Messages*” buffer also
Felix> shows another issues with a missing newline between messages (in
Emacs
Felix> 28.1 at least).
Felix> #+begin_example
Felix> #<window 54 on *test*<2>>Invalid face attribute :foreground nil
Felix> Invalid face attribute :foreground nil
Felix> #+end_example
Itʼs still there in emacs-29, but itʼs deep in the guts of the elisp
engine, so I havenʼt found exactly where it comes from.
Felix> Maybe a value of nil for the :foreground attribute in an anonymous
face
Felix> should be handled the same way as it is in a face defined with
Felix> ‘defface’, that is being treated as the symbol ‘unspecified’?
Felix> #+begin_src emacs-lisp
Felix> (progn
Felix> (defface my/test '((t . (:foreground nil))) "test face")
Felix> (face-attribute 'my/test :foreground))
Felix> #+end_src
Felix> #+RESULTS:
Felix> : unspecified
There was recently a long thread about this on emacs-devel, which I
didnʼt read :-) It might be worth suggesting this there.
Robert
--
- Re: how to track down "invalid face attribute" errors?, (continued)
Re: how to track down "invalid face attribute" errors?, Felix Dietrich, 2022/09/25
Re: how to track down "invalid face attribute" errors?, Emanuel Berg, 2022/09/26
Re: how to track down "invalid face attribute" errors?, Stefan Monnier, 2022/09/28