mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-15 17:00:26 +00:00
* xfaces.c (Qignore_defface): New variable.
(syms_of_xfaces): Provide `:ignore-defface'. (IGNORE_DEFFACE_P): New macro. (check_lface_attrs): Qignore_defface is a possible value. (lface_fully_specified_p): Likewise. (Finternal_set_lisp_face_attribute): Likewise. (merge_face_vectors): The merged face is `unspecified' if the mergee specifies `:ignore-defface'.
This commit is contained in:
parent
39c7cde2a4
commit
2ff1066384
@ -1,3 +1,14 @@
|
||||
2005-11-17 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* xfaces.c (Qignore_defface): New variable.
|
||||
(syms_of_xfaces): Provide `:ignore-defface'.
|
||||
(IGNORE_DEFFACE_P): New macro.
|
||||
(check_lface_attrs): Qignore_defface is a possible value.
|
||||
(lface_fully_specified_p): Likewise.
|
||||
(Finternal_set_lisp_face_attribute): Likewise.
|
||||
(merge_face_vectors): The merged face is `unspecified' if the
|
||||
mergee specifies `:ignore-defface'.
|
||||
|
||||
2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* lread.c (readevalloop): Add missing GCPROs.
|
||||
|
59
src/xfaces.c
59
src/xfaces.c
@ -274,6 +274,10 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
#define UNSPECIFIEDP(ATTR) EQ ((ATTR), Qunspecified)
|
||||
|
||||
/* Non-zero if face attribute ATTR is `ignore-defface'. */
|
||||
|
||||
#define IGNORE_DEFFACE_P(ATTR) EQ ((ATTR), Qignore_defface)
|
||||
|
||||
/* Value is the number of elements of VECTOR. */
|
||||
|
||||
#define DIM(VECTOR) (sizeof (VECTOR) / sizeof *(VECTOR))
|
||||
@ -312,6 +316,7 @@ Lisp_Object Qultra_expanded;
|
||||
Lisp_Object Qreleased_button, Qpressed_button;
|
||||
Lisp_Object QCstyle, QCcolor, QCline_width;
|
||||
Lisp_Object Qunspecified;
|
||||
Lisp_Object Qignore_defface;
|
||||
|
||||
char unspecified_fg[] = "unspecified-fg", unspecified_bg[] = "unspecified-bg";
|
||||
|
||||
@ -3104,48 +3109,64 @@ check_lface_attrs (attrs)
|
||||
Lisp_Object *attrs;
|
||||
{
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_FAMILY_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_FAMILY_INDEX])
|
||||
|| STRINGP (attrs[LFACE_FAMILY_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_SWIDTH_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_SWIDTH_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_AVGWIDTH_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_AVGWIDTH_INDEX])
|
||||
|| INTEGERP (attrs[LFACE_AVGWIDTH_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_HEIGHT_INDEX])
|
||||
|| INTEGERP (attrs[LFACE_HEIGHT_INDEX])
|
||||
|| FLOATP (attrs[LFACE_HEIGHT_INDEX])
|
||||
|| FUNCTIONP (attrs[LFACE_HEIGHT_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_WEIGHT_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_WEIGHT_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_WEIGHT_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_SLANT_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_SLANT_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_SLANT_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_UNDERLINE_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_UNDERLINE_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_UNDERLINE_INDEX])
|
||||
|| STRINGP (attrs[LFACE_UNDERLINE_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_OVERLINE_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_OVERLINE_INDEX])
|
||||
|| STRINGP (attrs[LFACE_OVERLINE_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_STRIKE_THROUGH_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_STRIKE_THROUGH_INDEX])
|
||||
|| STRINGP (attrs[LFACE_STRIKE_THROUGH_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_BOX_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_BOX_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_BOX_INDEX])
|
||||
|| STRINGP (attrs[LFACE_BOX_INDEX])
|
||||
|| INTEGERP (attrs[LFACE_BOX_INDEX])
|
||||
|| CONSP (attrs[LFACE_BOX_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_INVERSE_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_INVERSE_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_INVERSE_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_FOREGROUND_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_FOREGROUND_INDEX])
|
||||
|| STRINGP (attrs[LFACE_FOREGROUND_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_BACKGROUND_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_BACKGROUND_INDEX])
|
||||
|| STRINGP (attrs[LFACE_BACKGROUND_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_INHERIT_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_INHERIT_INDEX])
|
||||
|| NILP (attrs[LFACE_INHERIT_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_INHERIT_INDEX])
|
||||
|| CONSP (attrs[LFACE_INHERIT_INDEX]));
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_STIPPLE_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_STIPPLE_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_STIPPLE_INDEX])
|
||||
|| !NILP (Fbitmap_spec_p (attrs[LFACE_STIPPLE_INDEX])));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_FONT_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_FONT_INDEX])
|
||||
|| NILP (attrs[LFACE_FONT_INDEX])
|
||||
|| STRINGP (attrs[LFACE_FONT_INDEX]));
|
||||
#endif
|
||||
@ -3340,7 +3361,7 @@ lface_fully_specified_p (attrs)
|
||||
for (i = 1; i < LFACE_VECTOR_SIZE; ++i)
|
||||
if (i != LFACE_FONT_INDEX && i != LFACE_INHERIT_INDEX
|
||||
&& i != LFACE_AVGWIDTH_INDEX)
|
||||
if (UNSPECIFIEDP (attrs[i])
|
||||
if ((UNSPECIFIEDP (attrs[i]) || IGNORE_DEFFACE_P (attrs[i]))
|
||||
#ifdef MAC_OS
|
||||
/* MAC_TODO: No stipple support on Mac OS yet, this index is
|
||||
always unspecified. */
|
||||
@ -3555,6 +3576,8 @@ merge_face_vectors (f, from, to, named_merge_points)
|
||||
{
|
||||
if (i == LFACE_HEIGHT_INDEX && !INTEGERP (from[i]))
|
||||
to[i] = merge_face_heights (from[i], to[i], to[i]);
|
||||
else if (IGNORE_DEFFACE_P (from[i]))
|
||||
to[i] = Qunspecified;
|
||||
else
|
||||
to[i] = from[i];
|
||||
}
|
||||
@ -4047,7 +4070,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
|
||||
if (EQ (attr, QCfamily))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_STRING (value);
|
||||
if (SCHARS (value) == 0)
|
||||
@ -4059,7 +4082,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCheight))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
Lisp_Object test;
|
||||
|
||||
@ -4080,7 +4103,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCweight))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_SYMBOL (value);
|
||||
if (face_numeric_weight (value) < 0)
|
||||
@ -4092,7 +4115,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCslant))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_SYMBOL (value);
|
||||
if (face_numeric_slant (value) < 0)
|
||||
@ -4104,7 +4127,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCunderline))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
if ((SYMBOLP (value)
|
||||
&& !EQ (value, Qt)
|
||||
&& !EQ (value, Qnil))
|
||||
@ -4118,7 +4141,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCoverline))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
if ((SYMBOLP (value)
|
||||
&& !EQ (value, Qt)
|
||||
&& !EQ (value, Qnil))
|
||||
@ -4132,7 +4155,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCstrike_through))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
if ((SYMBOLP (value)
|
||||
&& !EQ (value, Qt)
|
||||
&& !EQ (value, Qnil))
|
||||
@ -4153,7 +4176,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
if (EQ (value, Qt))
|
||||
value = make_number (1);
|
||||
|
||||
if (UNSPECIFIEDP (value))
|
||||
if (UNSPECIFIEDP (value) || IGNORE_DEFFACE_P (value))
|
||||
valid_p = 1;
|
||||
else if (NILP (value))
|
||||
valid_p = 1;
|
||||
@ -4210,7 +4233,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
else if (EQ (attr, QCinverse_video)
|
||||
|| EQ (attr, QCreverse_video))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_SYMBOL (value);
|
||||
if (!EQ (value, Qt) && !NILP (value))
|
||||
@ -4221,7 +4244,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCforeground))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
/* Don't check for valid color names here because it depends
|
||||
on the frame (display) whether the color will be valid
|
||||
@ -4235,7 +4258,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCbackground))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
/* Don't check for valid color names here because it depends
|
||||
on the frame (display) whether the color will be valid
|
||||
@ -4250,7 +4273,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
else if (EQ (attr, QCstipple))
|
||||
{
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
if (!UNSPECIFIEDP (value)
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)
|
||||
&& !NILP (value)
|
||||
&& NILP (Fbitmap_spec_p (value)))
|
||||
signal_error ("Invalid stipple attribute", value);
|
||||
@ -4260,7 +4283,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
}
|
||||
else if (EQ (attr, QCwidth))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_SYMBOL (value);
|
||||
if (face_numeric_swidth (value) < 0)
|
||||
@ -4285,7 +4308,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
else
|
||||
f = check_x_frame (frame);
|
||||
|
||||
if (!UNSPECIFIEDP (value))
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_STRING (value);
|
||||
|
||||
@ -4333,7 +4356,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
signal_error ("Invalid face attribute name", attr);
|
||||
|
||||
if (font_related_attr_p
|
||||
&& !UNSPECIFIEDP (value))
|
||||
&& !UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
/* If a font-related attribute other than QCfont is specified, the
|
||||
original `font' attribute nor that of default face is useless
|
||||
to determine a new font. Thus, we set it to nil so that font
|
||||
@ -4354,7 +4377,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
++windows_or_buffers_changed;
|
||||
}
|
||||
|
||||
if (!UNSPECIFIEDP (value)
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)
|
||||
&& NILP (Fequal (old_value, value)))
|
||||
{
|
||||
Lisp_Object param;
|
||||
@ -8012,6 +8035,8 @@ syms_of_xfaces ()
|
||||
staticpro (&Qforeground_color);
|
||||
Qunspecified = intern ("unspecified");
|
||||
staticpro (&Qunspecified);
|
||||
Qignore_defface = intern (":ignore-defface");
|
||||
staticpro (&Qignore_defface);
|
||||
|
||||
Qface_alias = intern ("face-alias");
|
||||
staticpro (&Qface_alias);
|
||||
|
Loading…
Reference in New Issue
Block a user