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

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



reply via email to

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