[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master e0e147e 1/2: TTY Support for ECMA-48 strike-through graphic rendi
From: |
Eli Zaretskii |
Subject: |
master e0e147e 1/2: TTY Support for ECMA-48 strike-through graphic rendition |
Date: |
Fri, 18 Sep 2020 04:34:30 -0400 (EDT) |
branch: master
commit e0e147e10389e407531ca81d0063a11a5716d765
Author: Mike Hamrick <mikeh@muppetlabs.com>
Commit: Eli Zaretskii <eliz@gnu.org>
TTY Support for ECMA-48 strike-through graphic rendition
* term.c: Support strike-through in capable terminals.
(no_color_bit): Replace unused NC_INVIS with
NC_STRIKE_THROUGH.
(turn_on_face): Output via TS_enter_strike_through_mode
if available.
(turn_off_face): Handle strike-through case.
(tty_capable_p, init_tty): Support strike-through.
* termchar.h (struct tty_display_info): Add field for
strike-through.
* xfaces.c (tty_supports_face_attributes_p, realize_tty_face):
Handle strike-through case.
* dispextern.h: Add TTY_CAP_STRIKE_THROUGH definition.
(struct face): Add field tty_strike_through_p.
---
etc/NEWS | 7 +++++++
src/dispextern.h | 2 ++
src/term.c | 34 ++++++++++++++++++++--------------
src/termchar.h | 1 +
src/xfaces.c | 12 +++++++++++-
5 files changed, 41 insertions(+), 15 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 3a7180c..54bad06 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -85,6 +85,13 @@ useful on systems such as FreeBSD which ships only with
"etc/termcap".
* Changes in Emacs 28.1
+---
+** Support for the 'strike-through' face attribute on TTY frames.
+If your terminal's termcap or terminfo database entry has the 'smxx'
+capability defined, Emacs will now emit the prescribed escape
+sequences necessary to render faces with the 'strike-through'
+attribute on TTY frames.
+
+++
*** Emacs now defaults to UTF-8 instead of ISO-8859-1.
This is only for the default, where the user has set no 'LANG' (or
diff --git a/src/dispextern.h b/src/dispextern.h
index 956ca96..e20f7bb 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -1744,6 +1744,7 @@ struct face
bool_bf tty_italic_p : 1;
bool_bf tty_underline_p : 1;
bool_bf tty_reverse_p : 1;
+ bool_bf tty_strike_through_p : 1;
/* True means that colors of this face may not be freed because they
have been copied bitwise from a base face (see
@@ -3290,6 +3291,7 @@ enum tool_bar_item_image
#define TTY_CAP_BOLD 0x04
#define TTY_CAP_DIM 0x08
#define TTY_CAP_ITALIC 0x10
+#define TTY_CAP_STRIKE_THROUGH 0x20
/***********************************************************************
diff --git a/src/term.c b/src/term.c
index 5cbb092..22035f4 100644
--- a/src/term.c
+++ b/src/term.c
@@ -105,14 +105,14 @@ struct tty_display_info *tty_list;
enum no_color_bit
{
- NC_STANDOUT = 1 << 0,
- NC_UNDERLINE = 1 << 1,
- NC_REVERSE = 1 << 2,
- NC_ITALIC = 1 << 3,
- NC_DIM = 1 << 4,
- NC_BOLD = 1 << 5,
- NC_INVIS = 1 << 6,
- NC_PROTECT = 1 << 7
+ NC_STANDOUT = 1 << 0,
+ NC_UNDERLINE = 1 << 1,
+ NC_REVERSE = 1 << 2,
+ NC_ITALIC = 1 << 3,
+ NC_DIM = 1 << 4,
+ NC_BOLD = 1 << 5,
+ NC_STRIKE_THROUGH = 1 << 6,
+ NC_PROTECT = 1 << 7
};
/* internal state */
@@ -1931,6 +1931,9 @@ turn_on_face (struct frame *f, int face_id)
if (face->tty_underline_p && MAY_USE_WITH_COLORS_P (tty, NC_UNDERLINE))
OUTPUT1_IF (tty, tty->TS_enter_underline_mode);
+ if (face->tty_strike_through_p && MAY_USE_WITH_COLORS_P (tty,
NC_STRIKE_THROUGH))
+ OUTPUT1_IF (tty, tty->TS_enter_strike_through_mode);
+
if (tty->TN_max_colors > 0)
{
const char *ts;
@@ -1971,7 +1974,8 @@ turn_off_face (struct frame *f, int face_id)
if (face->tty_bold_p
|| face->tty_italic_p
|| face->tty_reverse_p
- || face->tty_underline_p)
+ || face->tty_underline_p
+ || face->tty_strike_through_p)
{
OUTPUT1_IF (tty, tty->TS_exit_attribute_mode);
if (strcmp (tty->TS_exit_attribute_mode, tty->TS_end_standout_mode)
== 0)
@@ -2006,11 +2010,12 @@ tty_capable_p (struct tty_display_info *tty, unsigned
int caps)
if ((caps & (cap)) && (!(TS) || !MAY_USE_WITH_COLORS_P(tty, NC_bit)))
\
return 0;
- TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode,
NC_REVERSE);
- TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode,
NC_UNDERLINE);
- TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode,
NC_BOLD);
- TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode,
NC_DIM);
- TTY_CAPABLE_P_TRY (tty, TTY_CAP_ITALIC, tty->TS_enter_italic_mode,
NC_ITALIC);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode,
NC_REVERSE);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode,
NC_UNDERLINE);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD,
tty->TS_enter_bold_mode, NC_BOLD);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode,
NC_DIM);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_ITALIC, tty->TS_enter_italic_mode,
NC_ITALIC);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_STRIKE_THROUGH,
tty->TS_enter_strike_through_mode, NC_STRIKE_THROUGH);
/* We can do it! */
return 1;
@@ -4124,6 +4129,7 @@ use the Bourne shell command 'TERM=...; export TERM'
(C-shell:\n\
tty->TS_enter_alt_charset_mode = tgetstr ("as", address);
tty->TS_exit_alt_charset_mode = tgetstr ("ae", address);
tty->TS_exit_attribute_mode = tgetstr ("me", address);
+ tty->TS_enter_strike_through_mode = tgetstr ("smxx", address);
MultiUp (tty) = tgetstr ("UP", address);
MultiDown (tty) = tgetstr ("DO", address);
diff --git a/src/termchar.h b/src/termchar.h
index c96b819..a8b3051 100644
--- a/src/termchar.h
+++ b/src/termchar.h
@@ -136,6 +136,7 @@ struct tty_display_info
const char *TS_enter_reverse_mode; /* "mr" -- enter reverse video mode. */
const char *TS_exit_underline_mode; /* "us" -- start underlining. */
const char *TS_enter_underline_mode; /* "ue" -- end underlining. */
+ const char *TS_enter_strike_through_mode; /* "smxx" -- turn on
strike-through mode. */
/* "as"/"ae" -- start/end alternate character set. Not really
supported, yet. */
diff --git a/src/xfaces.c b/src/xfaces.c
index 06d2f99..73a536b 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -5217,7 +5217,6 @@ tty_supports_face_attributes_p (struct frame *f,
|| !UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX])
|| !UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX])
|| !UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX])
- || !UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX])
|| !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX]))
return false;
@@ -5282,6 +5281,15 @@ tty_supports_face_attributes_p (struct frame *f,
test_caps |= TTY_CAP_INVERSE;
}
+ /* strike through */
+ val = attrs[LFACE_STRIKE_THROUGH_INDEX];
+ if (!UNSPECIFIEDP (val))
+ {
+ if (face_attr_equal_p (val, def_attrs[LFACE_STRIKE_THROUGH_INDEX]))
+ return false; /* same as default */
+ else
+ test_caps |= TTY_CAP_STRIKE_THROUGH;
+ }
/* Color testing. */
@@ -6244,6 +6252,8 @@ realize_tty_face (struct face_cache *cache,
face->tty_underline_p = true;
if (!NILP (attrs[LFACE_INVERSE_INDEX]))
face->tty_reverse_p = true;
+ if (!NILP (attrs[LFACE_STRIKE_THROUGH_INDEX]))
+ face->tty_strike_through_p = true;
/* Map color names to color indices. */
map_tty_color (f, face, LFACE_FOREGROUND_INDEX, &face_colors_defaulted);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master e0e147e 1/2: TTY Support for ECMA-48 strike-through graphic rendition,
Eli Zaretskii <=