summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Rumney <jasonr@gnu.org>2007-11-30 17:15:46 +0000
committerJason Rumney <jasonr@gnu.org>2007-11-30 17:15:46 +0000
commitf442d348835c40828744930d3b2517d6c0246ddd (patch)
treea7c97e0752e92704c8b3cbc8bcdd04fc197e5fff /src
parent182aef95b45ea2188cc5c913bb1728db1b361ab2 (diff)
downloademacs-f442d348835c40828744930d3b2517d6c0246ddd.tar.gz
(w32_face_attributes): Don't use color indexes that are out of range.
Only reverse the default colors.
Diffstat (limited to 'src')
-rw-r--r--src/w32console.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/w32console.c b/src/w32console.c
index ad0b33e0703..2774a7c842a 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -506,22 +506,24 @@ w32_face_attributes (f, face_id)
char_attr = char_attr_normal;
- if (face->foreground != FACE_TTY_DEFAULT_FG_COLOR
- && face->foreground != FACE_TTY_DEFAULT_COLOR)
- char_attr = (char_attr & 0xfff0) + (face->foreground % 16);
-
- if (face->background != FACE_TTY_DEFAULT_BG_COLOR
- && face->background != FACE_TTY_DEFAULT_COLOR)
- char_attr = (char_attr & 0xff0f) + ((face->background % 16) << 4);
+ /* Reverse the default color if requested. If background and
+ foreground are specified, then they have been reversed already. */
+ if (face->tty_reverse_p)
+ char_attr = (char_attr & 0xff00) + ((char_attr & 0x000f) << 4)
+ + ((char_attr & 0x00f0) >> 4);
/* Before the terminal is properly initialized, all colors map to 0.
- If we get a face like this, use the normal terminal attributes. */
+ Don't try to resolve them. */
if (NILP (Vtty_defined_color_alist))
- char_attr = char_attr_normal;
+ return char_attr;
- if (face->tty_reverse_p)
- char_attr = (char_attr & 0xff00) + ((char_attr & 0x000f) << 4)
- + ((char_attr & 0x00f0) >> 4);
+ if (face->foreground >= 0
+ && face->foreground < 16)
+ char_attr = (char_attr & 0xfff0) + face->foreground;
+
+ if (face->background >= 0
+ && face->background < 16)
+ char_attr = (char_attr & 0xff0f) + (face->background << 4);
return char_attr;
}