[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Adding new variable for face-list in internal-make-lisp-face.
From: |
Keith David Bershatsky |
Subject: |
Adding new variable for face-list in internal-make-lisp-face. |
Date: |
Thu, 02 Nov 2017 20:50:47 -0700 |
In implementing feature requests crosshairs (17684) and multiple fake cursors
(22873), I thought it would be nifty to identify the background color (if
applicable) associated with a tab ('\t') glyph code in the
buffer-display-table. In doing so, I discovered that the Lisp function
face-list is way too slow. Even after I ported the face-list function over to
C, it was still way too slow. So, I tried my luck at adding a new variable in
xfaces.c for the face-list and am setting it from within the function
internal-make-lisp-face, like so:
Vface_list = Fcons (face, Vface_list);
and, it is done within the same section where we already have:
Vface_new_frame_defaults = Fcons (Fcons (face, global_lface),
Vface_new_frame_defaults);
Accessing the tab face in the face-list variable works just fine UNTIL I
manually `eval-defun` on the `defface` for the tab face to change its
background color. Thereafter, when I try to get information about that tab
face in the face-list from within xdisp.c, I get:
Error during redisplay: (my-custom-face-attribute #<EMACS BUG: INVALID DATATYPE
(MISC 0xc9ff) Save your buffers immediately and please report this bug>
:background [frame information] default) signaled (error "Invalid face" #<EMACS
BUG: INVALID DATATYPE (MISC 0xc9ff) Save your buffers immediately and please
report this bug>)
Here is the gdb breakpoint information when I try to access that face (in the
face-list variable) after manually changing the background color with
eval-defun -- I get INVALID_LISP_OBJECT:
Breakpoint 3, Fmc_face_attribute (face=..., attribute=..., frame=...,
inherit=...) at xdisp.c:1119
1119 Lisp_Object value = Finternal_get_lisp_face_attribute (face,
attribute, frame);
(gdb) pp face
#<INVALID_LISP_OBJECT 0x10013c199>
How can I properly implement a new face-list variable so that the lisp object
will be valid after manually running `eval-defun` on a defface?
Thanks,
Keith
- Adding new variable for face-list in internal-make-lisp-face.,
Keith David Bershatsky <=