mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-25 07:28:20 +00:00
Added face parameter :extend.
This is an initial change to add a parameter :extend that will be used in the display engine later.
This commit is contained in:
parent
f9206f34d6
commit
bc8db39775
@ -233,7 +233,11 @@
|
||||
(file :tag "File"
|
||||
:help-echo "Name of bitmap file."
|
||||
:must-match t)))
|
||||
|
||||
(:extend
|
||||
(choice :tag "Extend"
|
||||
:help-echo "Control whether attributes should be extended after EOL."
|
||||
(const :tag "Off" nil)
|
||||
(const :tag "On" t)))
|
||||
(:inherit
|
||||
(repeat :tag "Inherit"
|
||||
:help-echo "List of faces to inherit attributes from."
|
||||
|
@ -342,6 +342,7 @@ is either `foreground-color', `background-color', or a keyword."
|
||||
(:box (".attributeBox" . "Face.AttributeBox"))
|
||||
(:underline (".attributeUnderline" . "Face.AttributeUnderline"))
|
||||
(:inverse-video (".attributeInverse" . "Face.AttributeInverse"))
|
||||
(:extend (".attributeExtend" . "Face.AttributeExtend"))
|
||||
(:stipple
|
||||
(".attributeStipple" . "Face.AttributeStipple")
|
||||
(".attributeBackgroundPixmap" . "Face.AttributeBackgroundPixmap"))
|
||||
@ -594,6 +595,13 @@ Use `face-attribute' for finer control."
|
||||
(let ((italic (face-attribute face :slant frame inherit)))
|
||||
(memq italic '(italic oblique))))
|
||||
|
||||
(defun face-extend-p (face &optional frame inherit)
|
||||
"Return non-nil if FACE specifies a non-nil extend.
|
||||
If the optional argument FRAME is given, report on face FACE in that frame.
|
||||
If FRAME is t, report on the defaults for face FACE (for new frames).
|
||||
If FRAME is omitted or nil, use the selected frame.
|
||||
Optional argument INHERIT is passed to `face-attribute'."
|
||||
(eq (face-attribute face :extend frame inherit) t))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -760,6 +768,11 @@ For convenience, attributes `:family', `:foundry', `:width',
|
||||
`:height', `:weight', and `:slant' may also be set in one step
|
||||
from an X font name:
|
||||
|
||||
`:extend'
|
||||
|
||||
VALUE specifies whether the FACE should be extended after EOL.
|
||||
VALUE must be one of t or nil.
|
||||
|
||||
`:font'
|
||||
|
||||
Set font-related face attributes from VALUE.
|
||||
@ -979,6 +992,18 @@ Use `set-face-attribute' or `modify-face' for finer control."
|
||||
|
||||
(define-obsolete-function-alias 'set-face-italic-p 'set-face-italic "24.4")
|
||||
|
||||
(defun set-face-extend (face extend-p &optional frame)
|
||||
"Specify whether face FACE should be extended.
|
||||
EXTEND-P nil means FACE explicitly doesn't extend after EOL.
|
||||
EXTEND-P t means FACE extends after EOL.
|
||||
|
||||
FRAME nil or not specified means change face on all frames.
|
||||
Use `set-face-attribute' to \"unspecify\" underlining."
|
||||
(interactive
|
||||
(let ((list (read-face-and-attribute :extend)))
|
||||
(list (car list) (if (cadr list) t))))
|
||||
(set-face-attribute face frame :extend extend-p))
|
||||
|
||||
|
||||
(defalias 'set-face-background-pixmap 'set-face-stipple)
|
||||
|
||||
@ -1102,7 +1127,7 @@ an integer value."
|
||||
(:slant
|
||||
(mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
|
||||
font-slant-table))
|
||||
(:inverse-video
|
||||
((or :inverse-video :extend)
|
||||
(mapcar #'(lambda (x) (cons (symbol-name x) x))
|
||||
(internal-lisp-face-attribute-values attribute)))
|
||||
((or :underline :overline :strike-through :box)
|
||||
@ -1147,6 +1172,7 @@ an integer value."
|
||||
(:slant . "slant")
|
||||
(:underline . "underline")
|
||||
(:overline . "overline")
|
||||
(:extend . "extend")
|
||||
(:strike-through . "strike-through")
|
||||
(:box . "box")
|
||||
(:inverse-video . "inverse-video display")
|
||||
@ -1549,7 +1575,8 @@ is given, in which case return its value instead."
|
||||
;; (see also realize_default_face in xfaces.c).
|
||||
(append
|
||||
'(:underline nil :overline nil :strike-through nil
|
||||
:box nil :inverse-video nil :stipple nil :inherit nil)
|
||||
:box nil :inverse-video nil :stipple nil :inherit nil
|
||||
:extend nil)
|
||||
;; `display-graphic-p' is unavailable when running
|
||||
;; temacs, prior to loading frame.el.
|
||||
(when (fboundp 'display-graphic-p)
|
||||
@ -2314,24 +2341,24 @@ If you set `term-file-prefix' to nil, this function does nothing."
|
||||
;; if background is light.
|
||||
(defface region
|
||||
'((((class color) (min-colors 88) (background dark))
|
||||
:background "blue3")
|
||||
:background "blue3" :extend t)
|
||||
(((class color) (min-colors 88) (background light) (type gtk))
|
||||
:distant-foreground "gtk_selection_fg_color"
|
||||
:background "gtk_selection_bg_color")
|
||||
:background "gtk_selection_bg_color" :extend t)
|
||||
(((class color) (min-colors 88) (background light) (type ns))
|
||||
:distant-foreground "ns_selection_fg_color"
|
||||
:background "ns_selection_bg_color")
|
||||
:background "ns_selection_bg_color" :extend t)
|
||||
(((class color) (min-colors 88) (background light))
|
||||
:background "lightgoldenrod2")
|
||||
:background "lightgoldenrod2" :extend t)
|
||||
(((class color) (min-colors 16) (background dark))
|
||||
:background "blue3")
|
||||
:background "blue3" :extend t)
|
||||
(((class color) (min-colors 16) (background light))
|
||||
:background "lightgoldenrod2")
|
||||
:background "lightgoldenrod2" :extend t)
|
||||
(((class color) (min-colors 8))
|
||||
:background "blue" :foreground "white")
|
||||
:background "blue" :foreground "white" :extend t)
|
||||
(((type tty) (class mono))
|
||||
:inverse-video t)
|
||||
(t :background "gray"))
|
||||
(t :background "gray" :extend t))
|
||||
"Basic face for highlighting the region."
|
||||
:version "21.1"
|
||||
:group 'basic-faces)
|
||||
|
@ -1385,6 +1385,7 @@ If FRAME is omitted or nil, use the selected frame."
|
||||
(:stipple . "Stipple")
|
||||
(:font . "Font")
|
||||
(:fontset . "Fontset")
|
||||
(:extend . "Extend")
|
||||
(:inherit . "Inherit")))
|
||||
(max-width (apply #'max (mapcar #'(lambda (x) (length (cdr x)))
|
||||
attrs))))
|
||||
|
@ -1677,11 +1677,9 @@ struct face
|
||||
/* Pixel value or color index of background color. */
|
||||
unsigned long background;
|
||||
|
||||
/* Pixel value or color index of underline color. */
|
||||
/* Pixel value or color index of underline, overlined,
|
||||
strike-through, or box color. */
|
||||
unsigned long underline_color;
|
||||
|
||||
/* Pixel value or color index of overlined, strike-through, or box
|
||||
color. */
|
||||
unsigned long overline_color;
|
||||
unsigned long strike_through_color;
|
||||
unsigned long box_color;
|
||||
@ -1864,6 +1862,9 @@ struct face_cache
|
||||
? FRAME_FACE_CACHE (F)->faces_by_id[ID] \
|
||||
: NULL)
|
||||
|
||||
#define FACE_EXTENSIBLE_P(F) \
|
||||
(!NILP (F->lface[LFACE_EXTEND_INDEX]))
|
||||
|
||||
/* True if FACE is suitable for displaying ASCII characters. */
|
||||
INLINE bool
|
||||
FACE_SUITABLE_FOR_ASCII_CHAR_P (struct face *face)
|
||||
@ -2373,7 +2374,7 @@ struct it
|
||||
/* Face id of the iterator saved in case a glyph from dpvec contains
|
||||
a face. The face is restored when all glyphs from dpvec have
|
||||
been delivered. */
|
||||
int saved_face_id;
|
||||
int saved_face_id, saved_extend_face_id;
|
||||
|
||||
/* Vector of glyphs for control character translation. The pointer
|
||||
dpvec is set to ctl_chars when a control character is translated.
|
||||
@ -2435,7 +2436,7 @@ struct it
|
||||
ptrdiff_t prev_stop;
|
||||
ptrdiff_t base_level_stop;
|
||||
struct composition_it cmp_it;
|
||||
int face_id;
|
||||
int face_id, extend_face_id;
|
||||
|
||||
/* Save values specific to a given method. */
|
||||
union {
|
||||
@ -2493,6 +2494,9 @@ struct it
|
||||
/* Face to use. */
|
||||
int face_id;
|
||||
|
||||
/* Face to extend at EOL/ */
|
||||
int extend_face_id;
|
||||
|
||||
/* Setting of buffer-local variable selective-display-ellipses. */
|
||||
bool_bf selective_display_ellipsis_p : 1;
|
||||
|
||||
|
40
src/xfaces.c
40
src/xfaces.c
@ -1590,6 +1590,7 @@ the WIDTH times as wide as FACE on FRAME. */)
|
||||
#define LFACE_FONT(LFACE) AREF ((LFACE), LFACE_FONT_INDEX)
|
||||
#define LFACE_INHERIT(LFACE) AREF ((LFACE), LFACE_INHERIT_INDEX)
|
||||
#define LFACE_FONTSET(LFACE) AREF ((LFACE), LFACE_FONTSET_INDEX)
|
||||
#define LFACE_EXTEND(LFACE) AREF ((LFACE), LFACE_EXTEND_INDEX)
|
||||
#define LFACE_DISTANT_FOREGROUND(LFACE) \
|
||||
AREF ((LFACE), LFACE_DISTANT_FOREGROUND_INDEX)
|
||||
|
||||
@ -1633,6 +1634,10 @@ check_lface_attrs (Lisp_Object attrs[LFACE_VECTOR_SIZE])
|
||||
|| SYMBOLP (attrs[LFACE_UNDERLINE_INDEX])
|
||||
|| STRINGP (attrs[LFACE_UNDERLINE_INDEX])
|
||||
|| CONSP (attrs[LFACE_UNDERLINE_INDEX]));
|
||||
eassert (UNSPECIFIEDP (attrs[LFACE_EXTEND_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_EXTEND_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_EXTEND_INDEX])
|
||||
|| STRINGP (attrs[LFACE_EXTEND_INDEX]));
|
||||
eassert (UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX])
|
||||
|| IGNORE_DEFFACE_P (attrs[LFACE_OVERLINE_INDEX])
|
||||
|| SYMBOLP (attrs[LFACE_OVERLINE_INDEX])
|
||||
@ -2512,6 +2517,13 @@ merge_face_ref (struct window *w,
|
||||
err_msgs, named_merge_points))
|
||||
err = true;
|
||||
}
|
||||
else if (EQ (keyword, QCextend))
|
||||
{
|
||||
if (EQ (value, Qt) || NILP (value))
|
||||
to[LFACE_EXTEND_INDEX] = value;
|
||||
else
|
||||
err = true;
|
||||
}
|
||||
else
|
||||
err = true;
|
||||
|
||||
@ -3030,6 +3042,17 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
old_value = LFACE_INVERSE (lface);
|
||||
ASET (lface, LFACE_INVERSE_INDEX, value);
|
||||
}
|
||||
else if (EQ (attr, QCextend))
|
||||
{
|
||||
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
|
||||
{
|
||||
CHECK_SYMBOL (value);
|
||||
if (!EQ (value, Qt) && !NILP (value))
|
||||
signal_error ("Invalid extend face attribute value", value);
|
||||
}
|
||||
old_value = LFACE_EXTEND (lface);
|
||||
ASET (lface, LFACE_EXTEND_INDEX, value);
|
||||
}
|
||||
else if (EQ (attr, QCforeground))
|
||||
{
|
||||
/* Compatibility with 20.x. */
|
||||
@ -3503,7 +3526,9 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource",
|
||||
value = face_boolean_x_resource_value (value, true);
|
||||
else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth))
|
||||
value = intern (SSDATA (value));
|
||||
else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video))
|
||||
else if (EQ (attr, QCreverse_video)
|
||||
|| EQ (attr, QCinverse_video)
|
||||
|| EQ (attr, QCextend))
|
||||
value = face_boolean_x_resource_value (value, true);
|
||||
else if (EQ (attr, QCunderline)
|
||||
|| EQ (attr, QCoverline)
|
||||
@ -3727,6 +3752,8 @@ frames). If FRAME is omitted or nil, use the selected frame. */)
|
||||
value = LFACE_SWIDTH (lface);
|
||||
else if (EQ (keyword, QCinherit))
|
||||
value = LFACE_INHERIT (lface);
|
||||
else if (EQ (keyword, QCextend))
|
||||
value = LFACE_EXTEND (lface);
|
||||
else if (EQ (keyword, QCfont))
|
||||
value = LFACE_FONT (lface);
|
||||
else if (EQ (keyword, QCfontset))
|
||||
@ -3754,7 +3781,9 @@ Value is nil if ATTR doesn't have a discrete set of valid values. */)
|
||||
|
||||
if (EQ (attr, QCunderline) || EQ (attr, QCoverline)
|
||||
|| EQ (attr, QCstrike_through)
|
||||
|| EQ (attr, QCinverse_video) || EQ (attr, QCreverse_video))
|
||||
|| EQ (attr, QCinverse_video)
|
||||
|| EQ (attr, QCreverse_video)
|
||||
|| EQ (attr, QCextend))
|
||||
result = list2 (Qt, Qnil);
|
||||
|
||||
return result;
|
||||
@ -4784,6 +4813,9 @@ gui_supports_face_attributes_p (struct frame *f,
|
||||
|| (!UNSPECIFIEDP (attrs[LFACE_INVERSE_INDEX])
|
||||
&& face_attr_equal_p (attrs[LFACE_INVERSE_INDEX],
|
||||
def_attrs[LFACE_INVERSE_INDEX]))
|
||||
|| (!UNSPECIFIEDP (attrs[LFACE_EXTEND_INDEX])
|
||||
&& face_attr_equal_p (attrs[LFACE_EXTEND_INDEX],
|
||||
def_attrs[LFACE_EXTEND_INDEX]))
|
||||
|| (!UNSPECIFIEDP (attrs[LFACE_FOREGROUND_INDEX])
|
||||
&& face_attr_equal_p (attrs[LFACE_FOREGROUND_INDEX],
|
||||
def_attrs[LFACE_FOREGROUND_INDEX]))
|
||||
@ -5362,6 +5394,9 @@ realize_default_face (struct frame *f)
|
||||
ASET (lface, LFACE_FONTSET_INDEX, Qnil);
|
||||
}
|
||||
|
||||
if (UNSPECIFIEDP (LFACE_EXTEND (lface)))
|
||||
ASET (lface, LFACE_EXTEND_INDEX, Qnil);
|
||||
|
||||
if (UNSPECIFIEDP (LFACE_UNDERLINE (lface)))
|
||||
ASET (lface, LFACE_UNDERLINE_INDEX, Qnil);
|
||||
|
||||
@ -6539,6 +6574,7 @@ syms_of_xfaces (void)
|
||||
DEFSYM (QCstrike_through, ":strike-through");
|
||||
DEFSYM (QCbox, ":box");
|
||||
DEFSYM (QCinherit, ":inherit");
|
||||
DEFSYM (QCextend, ":extend");
|
||||
|
||||
/* Symbols used for Lisp face attribute values. */
|
||||
DEFSYM (QCcolor, ":color");
|
||||
|
Loading…
Reference in New Issue
Block a user