XFree86 3.1.2F - xterm patch #28 - T.Dickey
This patch corrects the following reported by Roland Rosenfeld
<roland@spinnaker.rhein.de>:
+ handle SGR 22, 24 and 25 in combination with colorUL and colorBD
resources. Also noted & fixed reset of colored underline/bold
with SGR 0.
+ a typo in the termcap (missing '['), from 3.1.2Dj (my error)
Roland also complained that he couldn't use box characters with
-adobe-courier-bold-r-normal--12-120-75-75-m-70-iso8859-1
but that's a known xterm limitation (the box characters must be part of the
font, in the first 32 locations).
--------------------------------------------------------------------------------
charproc.c | 103 +++++++++++++++++++++++++++++++++++++++++------------------
termcap | 2 -
2 files changed, 74 insertions, 31 deletions
--------------------------------------------------------------------------------
Index: charproc.c
--- xterm-27+/charproc.c Fri Aug 23 12:47:18 1996
+++ xterm-28/charproc.c Sat Aug 31 14:14:17 1996
@@ -151,6 +151,13 @@
#define StopBlinking(screen) /* nothing */
#endif
+#if OPT_ISO_COLORS
+static void clrColorBD PROTO((void));
+static void clrColorUL PROTO((void));
+static void setColorBD PROTO((void));
+static void setColorUL PROTO((void));
+#endif
+
#define DEFAULT -1
#define TEXT_BUF_SIZE 256
#define TRACKTIMESEC 4L
@@ -777,6 +784,55 @@
XSetBackground(screen->display, screen->normalboldGC, bg);
XSetForeground(screen->display, screen->reverseboldGC, bg);
}
+
+static void
+setColorBD()
+{
+ if (term->screen.colorBDMode) {
+ if (!(term->flags & FG_COLOR)
+ || (term->cur_foreground == COLOR_UL)) {
+ SGR_Foreground(COLOR_BD);
+ } else if (term->cur_foreground < 8) { /* Set highlight bit */
+ SGR_Foreground(term->cur_foreground | 8);
+ }
+ }
+}
+
+static void
+clrColorBD()
+{
+ if (term->screen.colorBDMode
+ && term->flags & BOLD
+ && !(term->flags & FG_COLOR)) {
+ if (term->cur_foreground == COLOR_BD)
+ SGR_Foreground(-1);
+ else if ((term->cur_foreground >= 8)
+ && (term->cur_foreground <= 15))
+ SGR_Foreground(term->cur_foreground & 7);
+ }
+}
+
+static void
+setColorUL()
+{
+ if (term->screen.colorULMode
+ && !(term->flags & FG_COLOR))
+ SGR_Foreground(COLOR_UL);
+}
+
+static void
+clrColorUL()
+{
+ if (term->screen.colorULMode
+ && term->cur_foreground == COLOR_UL) {
+ if (term->screen.colorBDMode
+ && (term->flags & BOLD))
+ SGR_Foreground(COLOR_BD);
+ else
+ SGR_Foreground(-1);
+ }
+}
+
#endif /* OPT_ISO_COLORS */
static void VTparse()
@@ -1186,39 +1242,26 @@
switch (param[row]) {
case DEFAULT:
case 0:
- if_OPT_ISO_COLORS(screen,{
- if (term->flags & FG_COLOR)
- SGR_Foreground(-1);
- if (term->flags & BG_COLOR)
- SGR_Background(-1);
- })
term->flags &=
~(INVERSE|BOLD|UNDERLINE|INVISIBLE);
+ if_OPT_ISO_COLORS(screen,{
+ clrColorBD(); /* first */
+ clrColorUL(); /* second */
+ if (term->flags & FG_COLOR)
+ SGR_Foreground(-1);
+ if (term->flags & BG_COLOR)
+ SGR_Background(-1);
+ })
break;
- case 1:
+ case 1: /* Bold */
+ /* FALLTHRU */
case 5: /* Blink, really. */
term->flags |= BOLD;
- if_OPT_ISO_COLORS(screen,{
- if (screen->colorBDMode) {
- if (!(term->flags & FG_COLOR) ||
- (term->cur_foreground==COLOR_UL)){
- SGR_Foreground(COLOR_BD);
- }
- else /* Set highlight bit */
- if (term->cur_foreground < 8)
- term->cur_foreground |= 8;
- }
- })
+ if_OPT_ISO_COLORS(screen,{setColorBD();})
break;
case 4: /* Underscore */
term->flags |= UNDERLINE;
- if_OPT_ISO_COLORS(screen,{
- if (screen->colorULMode) {
- if (!(term->flags & FG_COLOR)) {
- SGR_Foreground(COLOR_UL);
- }
- }
- })
+ if_OPT_ISO_COLORS(screen,{setColorUL();})
break;
case 7:
term->flags |= INVERSE;
@@ -1226,14 +1269,14 @@
case 8:
term->flags |= INVISIBLE;
break;
- case 22:
- term->flags &= ~BOLD;
- break;
case 24:
+ if_OPT_ISO_COLORS(screen,{clrColorUL();})
term->flags &= ~UNDERLINE;
break;
- case 25:
- /* Blink, really */
+ case 22: /* reset 'bold' */
+ /* FALLTHRU */
+ case 25: /* reset 'blink' */
+ if_OPT_ISO_COLORS(screen,{clrColorBD();})
term->flags &= ~BOLD;
break;
case 27:
Index: termcap
--- xterm-27+/termcap Sat Aug 10 14:59:48 1996
+++ xterm-28/termcap Sat Aug 31 08:00:51 1996
@@ -38,7 +38,7 @@
:ti=\E7\E[?47h:te=\E[2J\E[?47l\E8:\
:vi=\E[?25l:ve=\E[?25h:\
:up=\E[A:us=\E[4m:ue=\E[24m:xn:\
- :ut:Co#8:op=\E100m:AB=\E[4%dm:AF=\E[3%dm:
+ :ut:Co#8:op=\E[100m:AB=\E[4%dm:AF=\E[3%dm:
v2|xterm-65|xterm with tall window 65x80 (X Window System):\
:li#65:tc=xterm:
vb|xterm-bold|xterm with bold instead of underline (X Window System):\