From 86a7d192df32a6a1ce9bbcc883a65a8aad24fa90 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Wed, 25 Apr 2001 18:31:33 +0000 Subject: [PATCH] (toggle_highlight): New function. (turn_on_face): Change handling of reverse video. --- src/term.c | 67 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/src/term.c b/src/term.c index 185b706a17b..a3a3ce9f93a 100644 --- a/src/term.c +++ b/src/term.c @@ -621,6 +621,15 @@ turn_on_highlight () } } +static void +toggle_highlight () +{ + if (standout_mode) + turn_off_highlight (); + else + turn_on_highlight (); +} + /* Make cursor invisible. */ @@ -2009,8 +2018,44 @@ turn_on_face (f, face_id) int face_id; { struct face *face = FACE_FROM_ID (f, face_id); + long fg = face->foreground; + long bg = face->background; - xassert (face != NULL); + /* Do this first because TS_end_standout_mode may be the same + as TS_exit_attribute_mode, which turns all appearances off. */ + if (MAY_USE_WITH_COLORS_P (NC_REVERSE)) + { + if (TN_max_colors > 0) + { + if (fg >= 0 && bg >= 0) + { + /* If the terminal supports colors, we can set them + below without using reverse video. The face's fg + and bg colors are set as they should appear on + the screen, i.e. they take the inverse-video'ness + of the face already into account. */ + } + else if (inverse_video) + { + if (fg == FACE_TTY_DEFAULT_FG_COLOR + || bg == FACE_TTY_DEFAULT_BG_COLOR) + toggle_highlight (); + } + else + { + if (fg == FACE_TTY_DEFAULT_BG_COLOR + || bg == FACE_TTY_DEFAULT_FG_COLOR) + toggle_highlight (); + } + } + else + { + /* If we can't display colors, use reverse video + if the face specifies that. */ + if (face->tty_reverse_p) + toggle_highlight (); + } + } if (face->tty_bold_p) { @@ -2036,32 +2081,20 @@ turn_on_face (f, face_id) && MAY_USE_WITH_COLORS_P (NC_UNDERLINE)) OUTPUT1_IF (TS_enter_underline_mode); - if (MAY_USE_WITH_COLORS_P (NC_REVERSE)) - if (face->tty_reverse_p - || face->foreground == FACE_TTY_DEFAULT_BG_COLOR - || face->background == FACE_TTY_DEFAULT_FG_COLOR) - OUTPUT1_IF (TS_enter_reverse_mode); - if (TN_max_colors > 0) { char *p; - if (face->foreground != FACE_TTY_DEFAULT_COLOR - && face->foreground != FACE_TTY_DEFAULT_FG_COLOR - && face->foreground != FACE_TTY_DEFAULT_BG_COLOR - && TS_set_foreground) + if (fg >= 0 && TS_set_foreground) { - p = tparam (TS_set_foreground, NULL, 0, (int) face->foreground); + p = tparam (TS_set_foreground, NULL, 0, (int) fg); OUTPUT (p); xfree (p); } - if (face->background != FACE_TTY_DEFAULT_COLOR - && face->background != FACE_TTY_DEFAULT_BG_COLOR - && face->background != FACE_TTY_DEFAULT_FG_COLOR - && TS_set_background) + if (bg >= 0 && TS_set_background) { - p = tparam (TS_set_background, NULL, 0, (int) face->background); + p = tparam (TS_set_background, NULL, 0, (int) bg); OUTPUT (p); xfree (p); } -- 2.39.2