Mercurial > emacs
diff src/xdisp.c @ 83236:6b379caca6fa
Merged in changes from CVS trunk.
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-720
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-721
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-722
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-723
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-724
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-725
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-276
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Fri, 10 Dec 2004 15:24:54 +0000 |
parents | 549734260e34 5a16d4350770 |
children | 4ee39d9428b0 |
line wrap: on
line diff
--- a/src/xdisp.c Thu Dec 09 00:43:19 2004 +0000 +++ b/src/xdisp.c Fri Dec 10 15:24:54 2004 +0000 @@ -342,6 +342,11 @@ Lisp_Object Qtrailing_whitespace; +/* Name and number of the face used to highlight escape glyphs. */ + +Lisp_Object Qescape_glyph; +int escape_glyph_face; + /* The symbol `image' which is the car of the lists used to represent images in Lisp. */ @@ -4921,6 +4926,21 @@ display. Then, set IT->dpvec to these glyphs. */ GLYPH g; int ctl_len; + int face_id = escape_glyph_face; + + /* Find the face id if `escape-glyph' unless we recently did. */ + if (face_id < 0) + { + Lisp_Object tem = Fget (Qescape_glyph, Qface); + if (INTEGERP (tem)) + face_id = XINT (tem); + else + face_id = 0; + /* If there's overflow, use 0 instead. */ + if (FAST_GLYPH_FACE (FAST_MAKE_GLYPH (0, face_id)) != face_id) + face_id = 0; + escape_glyph_face = face_id; + } if (it->c < 128 && it->ctl_arrow_p) { @@ -4930,10 +4950,10 @@ && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (it->dp)))) g = XINT (DISP_CTRL_GLYPH (it->dp)); else - g = FAST_MAKE_GLYPH ('^', 0); + g = FAST_MAKE_GLYPH ('^', face_id); XSETINT (it->ctl_chars[0], g); - g = FAST_MAKE_GLYPH (it->c ^ 0100, 0); + g = FAST_MAKE_GLYPH (it->c ^ 0100, face_id); XSETINT (it->ctl_chars[1], g); ctl_len = 2; } @@ -4950,7 +4970,7 @@ && GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp)))) escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp)); else - escape_glyph = FAST_MAKE_GLYPH ('\\', 0); + escape_glyph = FAST_MAKE_GLYPH ('\\', face_id); if (SINGLE_BYTE_CHAR_P (it->c)) str[0] = it->c, len = 1; @@ -4977,11 +4997,14 @@ XSETINT (it->ctl_chars[i * 4], escape_glyph); /* Insert three more glyphs into IT->ctl_chars for the octal display of the character. */ - g = FAST_MAKE_GLYPH (((str[i] >> 6) & 7) + '0', 0); + g = FAST_MAKE_GLYPH (((str[i] >> 6) & 7) + '0', + face_id); XSETINT (it->ctl_chars[i * 4 + 1], g); - g = FAST_MAKE_GLYPH (((str[i] >> 3) & 7) + '0', 0); + g = FAST_MAKE_GLYPH (((str[i] >> 3) & 7) + '0', + face_id); XSETINT (it->ctl_chars[i * 4 + 2], g); - g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0); + g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', + face_id); XSETINT (it->ctl_chars[i * 4 + 3], g); } ctl_len = len * 4; @@ -11579,6 +11602,9 @@ *w->desired_matrix->method = 0; #endif + /* Force this to be looked up again for each redisp of each window. */ + escape_glyph_face = -1; + specbind (Qinhibit_point_motion_hooks, Qt); reconsider_clip_changes (w, buffer); @@ -22150,6 +22176,8 @@ staticpro (&Qfontification_functions); Qtrailing_whitespace = intern ("trailing-whitespace"); staticpro (&Qtrailing_whitespace); + Qescape_glyph = intern ("escape-glyph"); + staticpro (&Qescape_glyph); Qimage = intern ("image"); staticpro (&Qimage); QCmap = intern (":map");