XFree86 3.1.2Db - xterm patch #11 - 1996/3/5 - T.Dickey (dickey@clark.net)
This patch corrects the behavior of the ANSI colors in xterm when reverse
video is used, as well as some other lesser sins:
button.c
(compiler warnings: shadowing of 'time', redundant cast)
charproc.c
renamed screen.colors[] array to screen.Acolors[] to more
easily distinguish the non-ANSI colors from the ANSI colors.
moved logic of SGR_Save() into VTInitialize, getting rid of
local private variables original_fg and original_bg.
moved some logic into getXtermForeground and getXtermBackground
from SGR_Foreground, SGR_Background, etc.
corrected misleading 'row' to 'col' in case for CUF, CUB
sequences.
ctlseqs.ms
xterm.man
(correct a misconception which I'd added that the color0
through color6 resource values apply to non-ANSI colors)
ptyx.h
added original_fg, original_bg to TScreen structure.
scrollbar.c
(compiler warnings: redundant cast)
util.c
new functions getXtermForeground and getXtermBackground replace
the macros GET_FG and GET_BG, with the added functionality of
checking for the reverse-video status of xterm.
in ReverseVideo, swap the SGR foreground and background colors
also.
--------------------------------------------------------------------------------
button.c | 20 !!!!!!!!!!!!
charproc.c | 93 +--------------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ctlseqs.ms | 14 !!!!!!!!!
ptyx.h | 6 !!!
scrollbar.c | 10 !!!!!!
util.c | 71 +++++++++++++++++++++-!!!!!!!!!!!!!!!!!!!!!!!!
xterm.h | 5 +--
xterm.man | 21 ------------!
8 files changed, 38 insertions, 45 deletions, 157 modifications
--------------------------------------------------------------------------------
Index: ctlseqs.ms
*** /build/x11r6/XFree86-3.1.2Db/xc/doc/specs/xterm/ctlseqs.ms Mon Feb 12 12:35:46 1996
--- /build/x11r6/XFree86-patched/xc/doc/specs/xterm/ctlseqs.ms Tue Mar 5 21:38:29 1996
***************
*** 452,465 ****
\*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
\*(Ps = \*1 \(-> Change Icon Name to \*(Pt
\*(Ps = \*2 \(-> Change Window Title to \*(Pt
! \*(Ps = \*1\*0 \(-> Change color names starting with color0 to \*(Pt (a
list of one or more color names, separated by semicolon, up to color6).
! \*(Ps = \*1\*1 \(-> Change color names starting with color1 to \*(Pt
! \*(Ps = \*1\*2 \(-> Change color names starting with color2 to \*(Pt
! \*(Ps = \*1\*3 \(-> Change color names starting with color3 to \*(Pt
! \*(Ps = \*1\*4 \(-> Change color names starting with color4 to \*(Pt
! \*(Ps = \*1\*5 \(-> Change color names starting with color5 to \*(Pt
! \*(Ps = \*1\*6 \(-> Change color names starting with color6 to \*(Pt
\*(Ps = \*4\*6 \(-> Change Log File to \*(Pt (normally disabled by a
compile-time option)
\*(Ps = \*5\*0 \(-> Set Font to \*(Pt
--- 452,465 ----
\*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
\*(Ps = \*1 \(-> Change Icon Name to \*(Pt
\*(Ps = \*2 \(-> Change Window Title to \*(Pt
! \*(Ps = \*1\*0 \(-> Change color names starting with text foreground to \*(Pt (a
list of one or more color names, separated by semicolon, up to color6).
! \*(Ps = \*1\*1 \(-> Change colors starting with text background to \*(Pt
! \*(Ps = \*1\*2 \(-> Change colors starting with text cursor to \*(Pt
! \*(Ps = \*1\*3 \(-> Change colors starting with mouse foreground to \*(Pt
! \*(Ps = \*1\*4 \(-> Change colors starting with mouse background to \*(Pt
! \*(Ps = \*1\*5 \(-> Change colors starting with Tek foreground to \*(Pt
! \*(Ps = \*1\*6 \(-> Change colors starting with Tek background to \*(Pt
\*(Ps = \*4\*6 \(-> Change Log File to \*(Pt (normally disabled by a
compile-time option)
\*(Ps = \*5\*0 \(-> Set Font to \*(Pt
Index: button.c
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/button.c Tue Jan 16 15:43:01 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/button.c Sun Mar 3 15:42:39 1996
***************
*** 125,131 ****
static void SetSelectUnit PROTO((Time buttonDownTime, SelectUnit defaultUnit));
static void StartSelect PROTO((int startrow, int startcol));
static void TrackDown PROTO((XButtonEvent *event));
! static void _GetSelection PROTO((Widget w, Time time, String *params, Cardinal num_params));
static void _OwnSelection PROTO((XtermWidget termw, String *selections, Cardinal count));
static void do_select_end PROTO((Widget w, XEvent *event, String *params, Cardinal *num_params, Bool use_cursor_loc));
static void do_select_start PROTO((Widget w, XEvent *event, int startrow, int startcol));
--- 125,131 ----
static void SetSelectUnit PROTO((Time buttonDownTime, SelectUnit defaultUnit));
static void StartSelect PROTO((int startrow, int startcol));
static void TrackDown PROTO((XButtonEvent *event));
! static void _GetSelection PROTO((Widget w, Time ev_time, String *params, Cardinal num_params));
static void _OwnSelection PROTO((XtermWidget termw, String *selections, Cardinal count));
static void do_select_end PROTO((Widget w, XEvent *event, String *params, Cardinal *num_params, Bool use_cursor_loc));
static void do_select_start PROTO((Widget w, XEvent *event, int startrow, int startcol));
***************
*** 317,325 ****
};
! static void _GetSelection(w, time, params, num_params)
Widget w;
! Time time;
String *params; /* selections in precedence order */
Cardinal num_params;
{
--- 317,325 ----
};
! static void _GetSelection(w, ev_time, params, num_params)
Widget w;
! Time ev_time;
String *params; /* selections in precedence order */
Cardinal num_params;
{
***************
*** 350,366 ****
SelectionReceived(w, NULL, &selection, &type, (XtPointer)line,
&nbytes, &fmt8);
else if (num_params > 1)
! _GetSelection(w, time, params+1, num_params-1);
} else {
struct _SelectionList* list;
if (--num_params) {
list = XtNew(struct _SelectionList);
list->params = params + 1;
list->count = num_params; /* decremented above */
! list->time = time;
} else list = NULL;
XtGetSelectionValue(w, selection, XA_STRING, SelectionReceived,
! (XtPointer)list, time);
}
}
--- 350,366 ----
SelectionReceived(w, NULL, &selection, &type, (XtPointer)line,
&nbytes, &fmt8);
else if (num_params > 1)
! _GetSelection(w, ev_time, params+1, num_params-1);
} else {
struct _SelectionList* list;
if (--num_params) {
list = XtNew(struct _SelectionList);
list->params = params + 1;
list->count = num_params; /* decremented above */
! list->time = ev_time;
} else list = NULL;
XtGetSelectionValue(w, selection, XA_STRING, SelectionReceived,
! (XtPointer)list, ev_time);
}
}
***************
*** 1503,1515 ****
String *params; /* [0] = volume */
Cardinal *param_count; /* 0 or 1 */
{
! Time time = CurrentTime;
if ((event->xany.type == KeyPress) ||
(event->xany.type == KeyRelease))
! time = event->xkey.time;
else if ((event->xany.type == ButtonPress) ||
(event->xany.type == ButtonRelease))
! time = event->xbutton.time;
! DoSecureKeyboard (time);
}
--- 1503,1515 ----
String *params; /* [0] = volume */
Cardinal *param_count; /* 0 or 1 */
{
! Time ev_time = CurrentTime;
if ((event->xany.type == KeyPress) ||
(event->xany.type == KeyRelease))
! ev_time = event->xkey.time;
else if ((event->xany.type == ButtonPress) ||
(event->xany.type == ButtonRelease))
! ev_time = event->xbutton.time;
! DoSecureKeyboard (ev_time);
}
Index: charproc.c
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/charproc.c Sat Feb 24 09:02:11 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/charproc.c Tue Mar 5 20:41:33 1996
***************
*** 123,129 ****
static int set_character_class PROTO((char *s));
static void DoSetSelectedFont PROTO_XT_SEL_CB_ARGS;
static void FromAlternate PROTO((TScreen *screen));
- static void SGR_Save PROTO((void));
static void SwitchBufs PROTO((TScreen *screen));
static void ToAlternate PROTO((TScreen *screen));
static void VTGraphicsOrNoExpose PROTO((XEvent *event));
--- 123,128 ----
***************
*** 580,637 ****
XtRImmediate, (XtPointer)TRUE},
#endif
{XtNcolor0, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_0]),
XtRString, "XtDefaultForeground"},
{XtNcolor1, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_1]),
XtRString, "XtDefaultForeground"},
{XtNcolor2, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_2]),
XtRString, "XtDefaultForeground"},
{XtNcolor3, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_3]),
XtRString, "XtDefaultForeground"},
{XtNcolor4, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_4]),
XtRString, "XtDefaultForeground"},
{XtNcolor5, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_5]),
XtRString, "XtDefaultForeground"},
{XtNcolor6, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_6]),
XtRString, "XtDefaultForeground"},
{XtNcolor7, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_7]),
XtRString, "XtDefaultForeground"},
{XtNcolor8, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_8]),
XtRString, "XtDefaultForeground"},
{XtNcolor9, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_9]),
XtRString, "XtDefaultForeground"},
{XtNcolor10, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_10]),
XtRString, "XtDefaultForeground"},
{XtNcolor11, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_11]),
XtRString, "XtDefaultForeground"},
{XtNcolor12, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_12]),
XtRString, "XtDefaultForeground"},
{XtNcolor13, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_13]),
XtRString, "XtDefaultForeground"},
{XtNcolor14, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_14]),
XtRString, "XtDefaultForeground"},
{XtNcolor15, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_15]),
XtRString, "XtDefaultForeground"},
{XtNcolorBD, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_BD]),
XtRString, "XtDefaultForeground"},
{XtNcolorUL, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.colors[COLOR_UL]),
XtRString, "XtDefaultForeground"},
{XtNcolorMode, XtCColorMode, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.colorMode),
--- 579,636 ----
XtRImmediate, (XtPointer)TRUE},
#endif
{XtNcolor0, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_0]),
XtRString, "XtDefaultForeground"},
{XtNcolor1, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_1]),
XtRString, "XtDefaultForeground"},
{XtNcolor2, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_2]),
XtRString, "XtDefaultForeground"},
{XtNcolor3, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_3]),
XtRString, "XtDefaultForeground"},
{XtNcolor4, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_4]),
XtRString, "XtDefaultForeground"},
{XtNcolor5, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_5]),
XtRString, "XtDefaultForeground"},
{XtNcolor6, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_6]),
XtRString, "XtDefaultForeground"},
{XtNcolor7, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_7]),
XtRString, "XtDefaultForeground"},
{XtNcolor8, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_8]),
XtRString, "XtDefaultForeground"},
{XtNcolor9, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_9]),
XtRString, "XtDefaultForeground"},
{XtNcolor10, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_10]),
XtRString, "XtDefaultForeground"},
{XtNcolor11, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_11]),
XtRString, "XtDefaultForeground"},
{XtNcolor12, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_12]),
XtRString, "XtDefaultForeground"},
{XtNcolor13, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_13]),
XtRString, "XtDefaultForeground"},
{XtNcolor14, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_14]),
XtRString, "XtDefaultForeground"},
{XtNcolor15, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_15]),
XtRString, "XtDefaultForeground"},
{XtNcolorBD, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_BD]),
XtRString, "XtDefaultForeground"},
{XtNcolorUL, XtCForeground, XtRPixel, sizeof(Pixel),
! XtOffsetOf(XtermWidgetRec, screen.Acolors[COLOR_UL]),
XtRString, "XtDefaultForeground"},
{XtNcolorMode, XtCColorMode, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.colorMode),
***************
*** 702,720 ****
WidgetClass xtermWidgetClass = (WidgetClass)&xtermClassRec;
- static Pixel original_fg;
- static Pixel original_bg;
-
- static void SGR_Save()
- {
- static int initialized;
- if (!initialized) {
- original_fg = term->screen.foreground;
- original_bg = term->core.background_pixel;
- initialized = TRUE;
- }
- }
-
/*
* The terminal's foreground and background colors are set via two mechanisms:
* text (cur_foreground, cur_background values that are passed down to
--- 701,706 ----
***************
*** 727,741 ****
register TScreen *screen = &term->screen;
Pixel fg;
- SGR_Save();
-
if (color >= 0) {
- fg = COLOR_VALUE(screen,color);
term->flags |= FG_COLOR;
} else {
- fg = original_fg;
term->flags &= ~FG_COLOR;
}
term->cur_foreground = color;
XSetForeground(screen->display, screen->normalGC, fg);
--- 713,724 ----
register TScreen *screen = &term->screen;
Pixel fg;
if (color >= 0) {
term->flags |= FG_COLOR;
} else {
term->flags &= ~FG_COLOR;
}
+ fg = getXtermForeground(term->flags, color);
term->cur_foreground = color;
XSetForeground(screen->display, screen->normalGC, fg);
***************
*** 750,764 ****
register TScreen *screen = &term->screen;
Pixel bg;
- SGR_Save();
-
if (color >= 0) {
- bg = COLOR_VALUE(screen,color);
term->flags |= BG_COLOR;
} else {
- bg = original_bg;
term->flags &= ~BG_COLOR;
}
term->cur_background = color;
XSetBackground(screen->display, screen->normalGC, bg);
--- 733,744 ----
register TScreen *screen = &term->screen;
Pixel bg;
if (color >= 0) {
term->flags |= BG_COLOR;
} else {
term->flags &= ~BG_COLOR;
}
+ bg = getXtermBackground(term->flags, color);
term->cur_background = color;
XSetBackground(screen->display, screen->normalGC, bg);
***************
*** 960,976 ****
case CASE_CUF:
/* CUF */
! if((row = param[0]) < 1)
! row = 1;
! CursorForward(screen, row);
parsestate = groundtable;
break;
case CASE_CUB:
/* CUB */
! if((row = param[0]) < 1)
! row = 1;
! CursorBack(screen, row);
parsestate = groundtable;
break;
--- 940,956 ----
case CASE_CUF:
/* CUF */
! if((col = param[0]) < 1)
! col = 1;
! CursorForward(screen, col);
parsestate = groundtable;
break;
case CASE_CUB:
/* CUB */
! if((col = param[0]) < 1)
! col = 1;
! CursorBack(screen, col);
parsestate = groundtable;
break;
***************
*** 2629,2635 ****
new->screen.colorBDMode = request->screen.colorBDMode;
new->screen.underline = request->screen.underline;
for (i = 0; i < MAXCOLORS; i++) {
! new->screen.colors[i] = request->screen.colors[i];
}
new->cur_foreground = 0;
--- 2609,2622 ----
new->screen.colorBDMode = request->screen.colorBDMode;
new->screen.underline = request->screen.underline;
for (i = 0; i < MAXCOLORS; i++) {
! new->screen.Acolors[i] = request->screen.Acolors[i];
! }
! if (request->misc.re_verse) {
! new->screen.original_bg = request->screen.foreground;
! new->screen.original_fg = request->core.background_pixel;
! } else {
! new->screen.original_fg = request->screen.foreground;
! new->screen.original_bg = request->core.background_pixel;
}
new->cur_foreground = 0;
***************
*** 3601,3608 ****
mask = (GCFont | GCForeground | GCBackground | GCGraphicsExposures |
GCFunction);
! new_normal = GET_FG(term->flags, term->cur_foreground);
! new_revers = GET_BG(term->flags, term->cur_background);
xgcv.font = nfs->fid;
xgcv.foreground = new_normal;
--- 3588,3595 ----
mask = (GCFont | GCForeground | GCBackground | GCGraphicsExposures |
GCFunction);
! new_normal = getXtermForeground(term->flags, term->cur_foreground);
! new_revers = getXtermBackground(term->flags, term->cur_background);
xgcv.font = nfs->fid;
xgcv.foreground = new_normal;
***************
*** 3735,3744 ****
TScreen *screen;
{
XGCValues xgcv;
! unsigned long mask;
! unsigned long cc = screen->cursorcolor;
! unsigned long fg = screen->foreground;
! unsigned long bg = term->core.background_pixel;
GC new_cursorGC = NULL, new_reversecursorGC = NULL;
GC new_cursoroutlineGC = NULL;
--- 3722,3731 ----
TScreen *screen;
{
XGCValues xgcv;
! XtGCMask mask;
! Pixel cc = screen->cursorcolor;
! Pixel fg = screen->foreground;
! Pixel bg = term->core.background_pixel;
GC new_cursorGC = NULL, new_reversecursorGC = NULL;
GC new_cursoroutlineGC = NULL;
Index: ptyx.h
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/ptyx.h Mon Feb 12 12:35:46 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/ptyx.h Tue Mar 5 20:09:06 1996
***************
*** 268,274 ****
((n)==TEXT_BG?TEK_FG:(n))))))))
typedef struct {
! unsigned which;
Pixel colors[NCOLORS];
char *names[NCOLORS];
} ScrnColors;
--- 268,274 ----
((n)==TEXT_BG?TEK_FG:(n))))))))
typedef struct {
! unsigned which; /* must have NCOLORS bits */
Pixel colors[NCOLORS];
char *names[NCOLORS];
} ScrnColors;
***************
*** 333,339 ****
Pixel cursorcolor; /* Cursor color */
Pixel mousecolor; /* Mouse color */
Pixel mousecolorback; /* Mouse color background */
! Pixel colors[MAXCOLORS]; /* ANSI color emulation */
Boolean colorMode; /* are we using color mode? */
Boolean colorULMode; /* use color for underline? */
Boolean colorBDMode; /* use color for bold? */
--- 333,341 ----
Pixel cursorcolor; /* Cursor color */
Pixel mousecolor; /* Mouse color */
Pixel mousecolorback; /* Mouse color background */
! Pixel Acolors[MAXCOLORS]; /* ANSI color emulation */
! Pixel original_fg; /* reference for SGR reset fg */
! Pixel original_bg; /* reference for SGR reset bg */
Boolean colorMode; /* are we using color mode? */
Boolean colorULMode; /* use color for underline? */
Boolean colorBDMode; /* use color for bold? */
Index: scrollbar.c
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/scrollbar.c Tue Jan 30 15:59:20 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/scrollbar.c Sun Mar 3 15:35:26 1996
***************
*** 51,57 ****
#include "xterm.h"
static Widget CreateScrollBar PROTO((XtermWidget xw, int x, int y, int height));
! static int params_to_pixels PROTO((TScreen *screen, String *params, int n));
static int specialcmplowerwiths PROTO((char *a, char *b));
static void RealizeScrollBar PROTO((Widget sbw, TScreen *screen));
static void ResizeScreen PROTO((XtermWidget xw, int min_width, int min_height));
--- 51,57 ----
#include "xterm.h"
static Widget CreateScrollBar PROTO((XtermWidget xw, int x, int y, int height));
! static int params_to_pixels PROTO((TScreen *screen, String *params, Cardinal n));
static int specialcmplowerwiths PROTO((char *a, char *b));
static void RealizeScrollBar PROTO((Widget sbw, TScreen *screen));
static void ResizeScreen PROTO((XtermWidget xw, int min_width, int min_height));
***************
*** 477,485 ****
static int params_to_pixels (screen, params, n)
TScreen *screen;
String *params;
! int n;
{
! register mult = 1;
register char *s;
switch (n > 2 ? 2 : n) {
--- 477,485 ----
static int params_to_pixels (screen, params, n)
TScreen *screen;
String *params;
! Cardinal n;
{
! register int mult = 1;
register char *s;
switch (n > 2 ? 2 : n) {
***************
*** 517,523 ****
register TScreen *screen = &w->screen;
ScrollTextUpDownBy (gw, (XtPointer) NULL,
! (XtPointer)params_to_pixels (screen, params, (int) *nparams));
return;
}
--- 517,523 ----
register TScreen *screen = &w->screen;
ScrollTextUpDownBy (gw, (XtPointer) NULL,
! (XtPointer)(params_to_pixels (screen, params, *nparams)));
return;
}
***************
*** 533,538 ****
register TScreen *screen = &w->screen;
ScrollTextUpDownBy (gw, (XtPointer) NULL,
! (XtPointer)-params_to_pixels (screen, params, (int) *nparams));
return;
}
--- 533,538 ----
register TScreen *screen = &w->screen;
ScrollTextUpDownBy (gw, (XtPointer) NULL,
! (XtPointer)(-params_to_pixels (screen, params, *nparams)));
return;
}
Index: util.c
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/util.c Sun Feb 18 12:46:26 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/util.c Tue Mar 5 20:43:59 1996
***************
*** 1051,1056 ****
--- 1051,1058 ----
/***====================================================================***/
+ #define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp;
+
void
ReverseVideo (termw)
XtermWidget termw;
***************
*** 1058,1064 ****
register TScreen *screen = &termw->screen;
GC tmpGC;
Window tek = TWindow(screen);
! unsigned long tmp;
tmp = termw->core.background_pixel;
if(screen->cursorcolor == screen->foreground)
--- 1060,1078 ----
register TScreen *screen = &termw->screen;
GC tmpGC;
Window tek = TWindow(screen);
! Pixel tmp;
!
! /*
! * Swap SGR foreground and background colors. By convention, these are
! * the colors assigned to "black" (SGR #0) and "white" (SGR #7). Also,
! * SGR #8 and SGR #15 are the bold (or bright) versions of SGR #0 and
! * #7, respectively.
! *
! * We don't swap colors that happen to match the screen's foreground
! * and background because that tends to produce bizarre effects.
! */
! EXCHANGE( screen->Acolors[0], screen->Acolors[7], tmp )
! EXCHANGE( screen->Acolors[8], screen->Acolors[15], tmp )
tmp = termw->core.background_pixel;
if(screen->cursorcolor == screen->foreground)
***************
*** 1066,1082 ****
termw->core.background_pixel = screen->foreground;
screen->foreground = tmp;
! tmp = screen->mousecolorback;
! screen->mousecolorback = screen->mousecolor;
! screen->mousecolor = tmp;
!
! tmpGC = screen->normalGC;
! screen->normalGC = screen->reverseGC;
! screen->reverseGC = tmpGC;
!
! tmpGC = screen->normalboldGC;
! screen->normalboldGC = screen->reverseboldGC;
! screen->reverseboldGC = tmpGC;
recolor_cursor (screen->pointer_cursor,
screen->mousecolor, screen->mousecolorback);
--- 1080,1088 ----
termw->core.background_pixel = screen->foreground;
screen->foreground = tmp;
! EXCHANGE( screen->mousecolor, screen->mousecolorback, tmp )
! EXCHANGE( screen->normalGC, screen->reverseGC, tmpGC )
! EXCHANGE( screen->normalboldGC, screen->reverseboldGC, tmpGC )
recolor_cursor (screen->pointer_cursor,
screen->mousecolor, screen->mousecolorback);
***************
*** 1089,1095 ****
if(tek)
XDefineCursor(screen->display, tek, screen->arrow);
-
if(screen->scrollWidget)
ScrollBarReverseVideo(screen->scrollWidget);
--- 1095,1100 ----
***************
*** 1138,1145 ****
int bg;
Bool hilite;
{
! Pixel fg_pix = GET_FG(flags,fg);
! Pixel bg_pix = GET_BG(flags,bg);
GC gc;
if ( (!hilite && (flags & INVERSE) != 0)
--- 1143,1150 ----
int bg;
Bool hilite;
{
! Pixel fg_pix = getXtermForeground(flags,fg);
! Pixel bg_pix = getXtermBackground(flags,bg);
GC gc;
if ( (!hilite && (flags & INVERSE) != 0)
***************
*** 1175,1182 ****
int flags;
Bool hilite;
{
! Pixel fg_pix = GET_FG(flags,term->cur_foreground);
! Pixel bg_pix = GET_BG(flags,term->cur_background);
GC gc;
if ( (!hilite && (flags & INVERSE) != 0)
--- 1180,1187 ----
int flags;
Bool hilite;
{
! Pixel fg_pix = getXtermForeground(flags,term->cur_foreground);
! Pixel bg_pix = getXtermBackground(flags,term->cur_background);
GC gc;
if ( (!hilite && (flags & INVERSE) != 0)
***************
*** 1198,1201 ****
--- 1203,1238 ----
XSetForeground(screen->display, gc, fg_pix);
XSetBackground(screen->display, gc, bg_pix);
}
+ }
+
+ /* GET_FG */
+ Pixel
+ getXtermForeground(flags, color)
+ int flags;
+ int color;
+ {
+ Pixel fg = (flags & FG_COLOR)
+ ? term->screen.Acolors[color]
+ : term->screen.foreground;
+
+ if (term->misc.re_verse && (fg == term->screen.original_fg))
+ fg = term->screen.original_bg;
+
+ return fg;
+ }
+
+ /* GET_BG */
+ Pixel
+ getXtermBackground(flags, color)
+ int flags;
+ int color;
+ {
+ Pixel bg = (flags & BG_COLOR)
+ ? term->screen.Acolors[color]
+ : term->core.background_pixel;
+
+ if (term->misc.re_verse && (bg == term->screen.original_bg))
+ bg = term->screen.original_fg;
+
+ return bg;
}
Index: xterm.h
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/xterm.h Sun Feb 18 12:46:26 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/xterm.h Tue Mar 5 20:40:45 1996
***************
*** 7,15 ****
#include "proto.h"
- #define GET_FG(flags,color) ((flags&FG_COLOR) ? screen->colors[color] : screen->foreground)
- #define GET_BG(flags,color) ((flags&BG_COLOR) ? screen->colors[color] : term->core.background_pixel)
-
/* Tekproc.c */
extern int TekInit PROTO((void));
extern void ChangeTekColors PROTO((TScreen *screen, ScrnColors *pNew));
--- 7,12 ----
***************
*** 170,175 ****
--- 167,174 ----
/* util.c */
extern GC updatedXtermGC PROTO((TScreen *screen, int flags, int fg, int bg, Bool hilite));
+ extern Pixel getXtermBackground PROTO((int flags, int color));
+ extern Pixel getXtermForeground PROTO((int flags, int color));
extern int AddToRefresh PROTO((TScreen *screen));
extern int HandleExposure PROTO((TScreen *screen, XEvent *event));
extern void ChangeColors PROTO((XtermWidget tw, ScrnColors *pNew));
Index: xterm.man
*** /build/x11r6/XFree86-3.1.2Db/xc/programs/xterm/xterm.man Mon Feb 12 12:35:46 1996
--- /build/x11r6/XFree86-patched/xc/programs/xterm/xterm.man Tue Mar 5 21:51:53 1996
***************
*** 666,690 ****
.B "color7 (\fPclass\fB Foreground)"
These specify the colors for the ISO 6429 extension. The defaults are,
respectively, black, red, green, yellow, blue, magenta, cyan, and white.
- If \fIcolorMode\fP is not active,
- the resources \fIcolor0\fP through \fIcolor6\fP
- are interpreted differently:
- .RS
- .TP 8
- .B "color0\fP text foreground"
- .TP 8
- .B "color1\fP text background"
- .TP 8
- .B "color2\fP text cursor"
- .TP 8
- .B "color3\fP mouse foreground"
- .TP 8
- .B "color4\fP mouse background"
- .TP 8
- .B "color5\fP Tektronix foreground"
- .TP 8
- .B "color6\fP Tektronix background"
- .RE
.TP 8
.B "color8 (\fPclass\fB Foreground)"
.TP 8
--- 666,671 ----
***************
*** 1038,1044 ****
.B "hardreset (\fPclass\fB SmeBSB)"
This entry invokes the \fBhard-reset()\fP action.
.TP 8
! .B "clearsavedlines" (\fPclass\fB SmeBSB)"
This entry invokes the \fBclear-saved-lines()\fP action.
.TP 8
.B "line2 (\fPclass\fB SmeLine)"
--- 1019,1025 ----
.B "hardreset (\fPclass\fB SmeBSB)"
This entry invokes the \fBhard-reset()\fP action.
.TP 8
! .B "clearsavedlines (\fPclass\fB SmeBSB)"
This entry invokes the \fBclear-saved-lines()\fP action.
.TP 8
.B "line2 (\fPclass\fB SmeLine)"