X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/60ec7b7ed9b42fac4b58bdfc8fce6100b66668cb..9b08f2c11b41c6af501dbce3a0b50bf5921da362:/src/term.c diff --git a/src/term.c b/src/term.c index 1e1a8674b0..452427f6dd 100644 --- a/src/term.c +++ b/src/term.c @@ -1857,6 +1857,7 @@ produce_special_glyphs (it, what) enum display_element_type what; { struct it temp_it; + GLYPH glyph; temp_it = *it; temp_it.dp = NULL; @@ -1872,15 +1873,11 @@ produce_special_glyphs (it, what) && INTEGERP (DISP_CONTINUE_GLYPH (it->dp)) && GLYPH_CHAR_VALID_P (XINT (DISP_CONTINUE_GLYPH (it->dp)))) { - temp_it.c = FAST_GLYPH_CHAR (XINT (DISP_CONTINUE_GLYPH (it->dp))); - temp_it.len = CHAR_BYTES (temp_it.c); + glyph = XINT (DISP_CONTINUE_GLYPH (it->dp)); + glyph = spec_glyph_lookup_face (XWINDOW (it->window), glyph); } else - temp_it.c = '\\'; - - produce_glyphs (&temp_it); - it->pixel_width = temp_it.pixel_width; - it->nglyphs = temp_it.pixel_width; + glyph = '\\'; } else if (what == IT_TRUNCATION) { @@ -1889,18 +1886,22 @@ produce_special_glyphs (it, what) && INTEGERP (DISP_TRUNC_GLYPH (it->dp)) && GLYPH_CHAR_VALID_P (XINT (DISP_TRUNC_GLYPH (it->dp)))) { - temp_it.c = FAST_GLYPH_CHAR (XINT (DISP_TRUNC_GLYPH (it->dp))); - temp_it.len = CHAR_BYTES (temp_it.c); + glyph = XINT (DISP_TRUNC_GLYPH (it->dp)); + glyph = spec_glyph_lookup_face (XWINDOW (it->window), glyph); } else - temp_it.c = '$'; - - produce_glyphs (&temp_it); - it->pixel_width = temp_it.pixel_width; - it->nglyphs = temp_it.pixel_width; + glyph = '$'; } else abort (); + + temp_it.c = FAST_GLYPH_CHAR (glyph); + temp_it.face_id = FAST_GLYPH_FACE (glyph); + temp_it.len = CHAR_BYTES (temp_it.c); + + produce_glyphs (&temp_it); + it->pixel_width = temp_it.pixel_width; + it->nglyphs = temp_it.pixel_width; } @@ -1919,7 +1920,8 @@ produce_special_glyphs (it, what) ? (TN_no_color_video & (ATTR)) == 0 \ : 1) -/* Turn appearances of face FACE_ID on tty frame F on. */ +/* Turn appearances of face FACE_ID on tty frame F on. + FACE_ID is a realized face ID number, in the face cache. */ static void turn_on_face (f, face_id) @@ -2003,14 +2005,20 @@ turn_on_face (f, face_id) if (fg >= 0 && TS_set_foreground) { - p = tparam (TS_set_foreground, NULL, 0, (int) fg); + if (standout_mode) + p = tparam (TS_set_background, NULL, 0, (int) fg); + else + p = tparam (TS_set_foreground, NULL, 0, (int) fg); OUTPUT (p); xfree (p); } if (bg >= 0 && TS_set_background) { - p = tparam (TS_set_background, NULL, 0, (int) bg); + if (standout_mode) + p = tparam (TS_set_foreground, NULL, 0, (int) bg); + else + p = tparam (TS_set_background, NULL, 0, (int) bg); OUTPUT (p); xfree (p); } @@ -2685,6 +2693,16 @@ fatal (str, arg1, arg2) exit (1); } +DEFUN ("tty-no-underline", Ftty_no_underline, Stty_no_underline, 0, 0, 0, + doc: /* Declare that this terminal does not handle underlining. +This is used to override the terminfo data, for certain terminals that +do not really do underlining, but say that they do. */) + () +{ + TS_enter_underline_mode = 0; + return Qnil; +} + void syms_of_term () { @@ -2704,6 +2722,7 @@ The function should accept no arguments. */); defsubr (&Stty_display_color_p); defsubr (&Stty_display_color_cells); + defsubr (&Stty_no_underline); } /* arch-tag: 498e7449-6f2e-45e2-91dd-b7d4ca488193