# ------------------------------------------------------------------------------
# Makefile.in | 22 ++-
# Tekproc.c | 2
# XTerm.ad | 1
# button.c | 6
# charproc.c | 31 ++++-
# ctlseqs.ms | 105 ++++++++++++-----
# input.c | 104 ++++++++++++----
# main.c | 28 ++--
# menu.c | 51 ++++++--
# menu.h | 23 +++
# misc.c | 252 ++++++++++++++++++++++++++---------------
# ptyx.h | 4
# resize.c | 6
# screen.c | 9 +
# scrollbar.c | 2
# termcap | 2
# terminfo | 34 +++--
# version.h | 2
# xterm-94/vttests/16colors.sh | 63 ++++++++++
# xterm-94/vttests/8colors.sh | 51 ++++++++
# xterm-94/vttests/dynamic.sh | 28 ++++
# xterm-94/vttests/resize.sh | 51 ++++++++
# xterm-94/vttests/title.sh | 22 +++
# xterm.h | 16 --
# xterm.log.html | 87 ++++++++++++++
# xterm.man | 47 ++++++-
# 26 files changed, 820 insertions, 229 deletions
# ------------------------------------------------------------------------------
Index: Makefile.in
--- xterm-93+/Makefile.in Sun Mar 14 14:59:36 1999
+++ xterm-94/Makefile.in Mon Mar 22 21:19:37 1999
@@ -32,6 +32,8 @@
libdir = $(exec_prefix)/lib
mandir = $(prefix)/man/man$(manext)
+appsdir = $(libdir)/X11/app-defaults
+
#### End of system configuration section. ####
SHELL = /bin/sh
@@ -39,7 +41,7 @@
LDFLAGS =
-INSTALL_DIRS = $(bindir) $(libdir) $(mandir)
+INSTALL_DIRS = $(bindir) $(appsdir) $(mandir)
EXTRAHDR = @EXTRAHDRS@
EXTRASRC = @EXTRASRCS@
@@ -85,11 +87,13 @@
resize : $(OBJS2)
@ECHO_LD@$(LINK) $(LDFLAGS) -o $@ $(OBJS2) $(X_LIBS) $(X_EXTRA_LIBS) $(LIBS)
-install: $(INSTALL_DIRS) xterm resize
+install : $(INSTALL_DIRS) xterm resize
$(INSTALL_PROGRAM) -s -m @XTERM_MODE@ xterm $(bindir)/xterm
$(INSTALL_PROGRAM) -s -m 755 resize $(bindir)/resize
- $(INSTALL_DATA) xterm.man $(mandir)/xterm.$(manext)
- $(INSTALL_DATA) resize.man $(mandir)/resize.$(manext)
+ $(INSTALL_DATA) xterm.man $(mandir)/xterm.$(manext)
+ $(INSTALL_DATA) resize.man $(mandir)/resize.$(manext)
+ $(INSTALL_DATA) XTerm.ad $(appsdir)/XTerm
+ $(INSTALL_DATA) XTerm-col.ad $(appsdir)/XTerm-color
@echo 'Completed installation of executables and documentation.'
@echo 'Use "make install-ti" to install terminfo description.'
@@ -99,10 +103,12 @@
installdirs: $(INSTALL_DIRS)
uninstall:
- -$(RM) $(bindir)/xterm \
- $(bindir)/resize \
- $(mandir)/xterm.$(manext) \
- $(mandir)/resize.$(manext)
+ -$(RM) $(bindir)/xterm
+ -$(RM) $(bindir)/resize
+ -$(RM) $(mandir)/xterm.$(manext)
+ -$(RM) $(mandir)/resize.$(manext)
+ -$(RM) $(appsdir)/XTerm
+ -$(RM) $(appsdir)/XTerm-color
mostlyclean:
-$(RM) *.[ois] XtermLog.* .pure core *~ *.BAK *.out
Index: Tekproc.c
--- xterm-93+/Tekproc.c Sun Oct 25 13:31:39 1998
+++ xterm-94/Tekproc.c Sat Mar 27 17:14:57 1999
@@ -657,7 +657,7 @@
buf2[len++] = c2;
}
if (c2 == BEL)
- do_osc(buf2, len);
+ do_osc(buf2, len, BEL);
}
Tparsestate = curstate;
break;
Index: XTerm.ad
--- xterm-93+/XTerm.ad Sun Dec 20 22:50:38 1998
+++ xterm-94/XTerm.ad Fri Mar 26 18:41:35 1999
@@ -23,6 +23,7 @@
*mainMenu*redraw*Label: Redraw Window
*mainMenu*8-bit control*Label: 8-Bit Controls
*mainMenu*backarrow key*Label: Backarrow Key
+*mainMenu*num-lock*Label: Alt/NumLock Modifiers
*mainMenu*sun function-keys*Label: Sun Function-Keys
*mainMenu*sun keyboard*Label: Sun/PC Keyboard
*mainMenu*hp function-keys*Label: HP Function-Keys
Index: button.c
--- xterm-93+/button.c Sun Feb 7 12:54:50 1999
+++ xterm-94/button.c Sun Mar 21 13:38:47 1999
@@ -21,7 +21,7 @@
* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*/
-/* $XFree86: xc/programs/xterm/button.c,v 3.29 1999/02/07 06:18:53 dawes Exp $ */
+/* $XFree86: xc/programs/xterm/button.c,v 3.30 1999/03/21 07:35:40 dawes Exp $ */
/*
button.c Handles button events in the terminal emulator.
@@ -1273,7 +1273,7 @@
Atom* std_targets;
unsigned long std_length;
XmuConvertStandardSelection(w, screen->selection_time, selection,
- target, type, (XMU_POINTER *)&std_targets,
+ target, type, (XPointer *)&std_targets,
&std_length, format);
*length = std_length + 5;
targetP = (Atom*)XtMalloc(sizeof(Atom)*(*length));
@@ -1338,7 +1338,7 @@
return True;
}
if (XmuConvertStandardSelection(w, screen->selection_time, selection,
- target, type, (XMU_POINTER *)value,
+ target, type, (XPointer *)value,
length, format))
return True;
Index: charproc.c
--- xterm-93+/charproc.c Sun Mar 14 14:59:36 1999
+++ xterm-94/charproc.c Sat Mar 27 17:25:54 1999
@@ -499,6 +499,9 @@
{ "maximize", HandleMaximize },
{ "restore", HandleRestoreSize },
#endif
+#if OPT_NUM_LOCK
+ { "set-num-lock", HandleNumLock },
+#endif
#if OPT_SHIFT_KEYS
{ "larger-vt-font", HandleLargerFont },
{ "smaller-vt-font", HandleSmallerFont },
@@ -1195,7 +1198,7 @@
if (string_mode == OSC) {
if (string_used)
string_area[--string_used] = '\0';
- do_osc(string_area, string_used);
+ do_osc(string_area, string_used, c);
parsestate = groundtable;
} else {
/* bell */
@@ -1973,7 +1976,7 @@
do_dcs(string_area, string_used);
break;
case OSC:
- do_osc(string_area, string_used);
+ do_osc(string_area, string_used, c);
break;
case PM:
/* ignored */
@@ -2855,7 +2858,7 @@
ToggleScrollBar(termw);
break;
#if OPT_SHIFT_KEYS
- case 35:
+ case 35: /* rxvt */
term->misc.shift_keys = (func == bitset) ? ON : OFF;
break;
#endif
@@ -2936,7 +2939,8 @@
}
break;
case 66: /* DECNKM */
- /* FIXME: VT300 numeric keypad */
+ (*func)(&termw->keyboard.flags, MODE_DECKPAM);
+ update_appkeypad();
break;
case 67: /* DECBKM */
/* back-arrow mapped to backspace or delete(D)*/
@@ -2971,6 +2975,11 @@
screen->scrollkey = (func == bitset) ? ON : OFF;
update_scrollkey();
break;
+#if OPT_NUM_LOCK
+ case 1035:
+ term->misc.real_NumLock = (func == bitset) ? ON : OFF;
+ break;
+#endif
case 1048:
if (!termw->misc.titeInhibit) {
if(func == bitset)
@@ -3356,8 +3365,8 @@
reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 9;
- reply.a_param[1] = root_height;
- reply.a_param[2] = root_width;
+ reply.a_param[1] = root_height / FontHeight(screen);
+ reply.a_param[2] = root_width / FontWidth(screen);
reply.a_inters = 0;
reply.a_final = 't';
unparseseq(&reply, screen->respond);
@@ -3484,6 +3493,13 @@
}
void
+unparseputs(Char *s, int fd)
+{
+ while (*s)
+ unparseputc(*s++, fd);
+}
+
+void
ToggleAlternate(register TScreen *screen)
{
if (screen->alternate)
@@ -3872,6 +3888,9 @@
wnew->screen.ansi_level = (wnew->screen.terminal_id / 100);
wnew->screen.visualbell = request->screen.visualbell;
+#if OPT_NUM_LOCK
+ wnew->misc.real_NumLock = request->misc.real_NumLock;
+#endif
#if OPT_SHIFT_KEYS
wnew->misc.shift_keys = request->misc.shift_keys;
#endif
Index: ctlseqs.ms
--- xterm-93+/ctlseqs.ms Sun Mar 14 14:59:36 1999
+++ xterm-94/ctlseqs.ms Sat Mar 27 16:50:45 1999
@@ -826,7 +826,8 @@
(normally disabled by a compile-time option)
\*(Ps = \*4\*7 \(-> Use Alternate Screen Buffer (unless
disabled by the \fBtiteInhibit\fP resource)
- \*(Ps = \*6\*7 \(-> Backarrow key (DECBKM)
+ \*(Ps = \*6\*6 \(-> Application keypad (DECNKM)
+ \*(Ps = \*6\*7 \(-> Backarrow key sends delete (DECBKM)
\*(Ps = \*1\*0\*0\*0 \(-> Send Mouse X & Y on button press and release.
See the section \fBMouse Tracking\fP.
\*(Ps = \*1\*0\*0\*1 \(-> Use Hilite Mouse Tracking.
@@ -834,6 +835,7 @@
\*(Ps = \*1\*0\*0\*3 \(-> Use All Motion Mouse Tracking.
\*(Ps = \*1\*0\*1\*0 \(-> Scroll to bottom on tty output (rxvt).
\*(Ps = \*1\*0\*1\*1 \(-> Scroll to bottom on key press (rxvt).
+ \*(Ps = \*1\*0\*3\*5 \(-> Enable special modifiers for Alt and NumLock keys.
\*(Ps = \*1\*0\*4\*7 \(-> Use Alternate Screen Buffer (unless
disabled by the \fBtiteInhibit\fP resource)
\*(Ps = \*1\*0\*4\*8 \(-> Save cursor as in DECSC (unless
@@ -869,7 +871,8 @@
\*(Ps = \*4\*6 \(-> Stop Logging
(normally disabled by a compile-time option)
\*(Ps = \*4\*7 \(-> Use Normal Screen Buffer
- \*(Ps = \*6\*7 \(-> Backarrow key (DECBKM)
+ \*(Ps = \*6\*6 \(-> Numeric keypad (DECNKM)
+ \*(Ps = \*6\*7 \(-> Backarrow key sends backspace (DECBKM)
\*(Ps = \*1\*0\*0\*0 \(-> Don't Send Mouse X & Y on button press and
release.
See the section \fBMouse Tracking\fP.
@@ -878,6 +881,7 @@
\*(Ps = \*1\*0\*0\*3 \(-> Don't Use All Motion Mouse Tracking
\*(Ps = \*1\*0\*1\*0 \(-> Don't scroll to bottom on tty output (rxvt).
\*(Ps = \*1\*0\*1\*1 \(-> Don't scroll to bottom on key press (rxvt).
+ \*(Ps = \*1\*0\*3\*5 \(-> Disable special modifiers for Alt and NumLock keys.
\*(Ps = \*1\*0\*4\*7 \(-> Use Normal Screen Buffer, clearing screen
first if in the Alternate Screen (unless
disabled by the \fBtiteInhibit\fP resource)
@@ -900,12 +904,18 @@
.sp
.IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(ST
.IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(Be
-Set Text Parameters
+Set Text Parameters.
+For colors and font,
+if \*(Pt is a "?", the control sequence elicits a response which consists
+of the control sequence which would set the corresponding value.
+The \fIdtterm\fP control sequences allow you to determine the icon name
+and window title.
\*(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 seven).
+ \*(Ps = \*1\*0 \(-> Change color names starting with text foreground to \*(Pt
+(a list of one or more color names or RGB specifications, separated by
+semicolon, up to eight, as per \fIXParseColor\fP).
\*(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
@@ -916,6 +926,10 @@
\*(Ps = \*4\*6 \(-> Change Log File to \*(Pt (normally disabled by a
compile-time option)
\*(Ps = \*5\*0 \(-> Set Font to \*(Pt
+If \*(Pt begins with a "#", index in the font menu, relative (if the
+next character is a plus or minus sign) or absolute. A number is
+expected but not required after the sign (the default is the current
+entry for relative, zero for absolute indexing).
.
.sp
.IP \\*(PM\\*(Pt\\*s\\*(ST
@@ -935,6 +949,12 @@
Both have cursor and scrolling operations printed on the keypad,
which duplicate the smaller cursor and scrolling keypads.
.LP
+X does not predefine NumLock (used for VT220 keyboards) or Alt (used as
+an extension for the Sun/PC keyboards) as modifiers.
+These keys are recognized as modifiers when enabled
+by the \fBnumLock\fP resource,
+or by the DECSET \*1\*0\*3\*5 control sequence.
+.LP
The cursor keys transmit the following escape sequences depending on the
mode specified via the \fBDECCKM\fP escape sequence.
.TS
@@ -957,34 +977,34 @@
the program.
.TS
center;
-cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Numeric Application
+cf3 cf3 cf3 cf3 cf3
+lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) .
+Key Numeric Application Terminfo Termcap
_
-Space \*(Sp \*(S3\*(Sp
-Tab \*(Ta \*(S3\*I
-Enter \*(Cr \*(S3\*M
-PF1 \*(S3\*P \*(S3\*P
-PF2 \*(S3\*Q \*(S3\*Q
-PF3 \*(S3\*R \*(S3\*R
-PF4 \*(S3\*S \*(S3\*S
-* \f1(multiply)\fP * \*(S3\*j
-+ \f1(add)\fP + \*(S3\*k
-, \f1(comma)\fP , \*(S3\*l
-- \f1(minus)\fP - \*(S3\*m
-\. \f1(Delete)\fP \. \*(S3\*3\*(c~
-/ \f1(divide)\fP / \*(S3\*o
-0 \f1(Insert)\fP 0 \*(Cs\*2\*(c~
-1 \f1(End)\fP 1 \*(Cs\*4\*(c~
-2 \f1(DownArrow)\fP 2 \*(Cs\*(cB
-3 \f1(PageDown)\fP 3 \*(Cs\*5\*(c~
-4 \f1(LeftArrow)\fP 4 \*(Cs\*D
-5 \f1(Begin)\fP 5 \*(Cs\*E
-6 \f1(RightArrow)\fP 6 \*(Cs\*C
-7 \f1(Home)\fP 7 \*(Cs\*1\*(c~
-8 \f1(UpArrow)\fP 8 \*(Cs\*A
-9 \f1(PageUp)\fP 9 \*(Cs\*5\*(c~
-= (equal) \&= \*(S3\*(XX
+Space \*(Sp \*(S3\*(Sp - -
+Tab \*(Ta \*(S3\*I - -
+Enter \*(Cr \*(S3\*M kent @8
+PF1 \*(S3\*P \*(S3\*P kf1 k1
+PF2 \*(S3\*Q \*(S3\*Q kf2 k2
+PF3 \*(S3\*R \*(S3\*R kf3 k3
+PF4 \*(S3\*S \*(S3\*S kf4 k4
+* \f1(multiply)\fP * \*(S3\*j - -
++ \f1(add)\fP + \*(S3\*k - -
+, \f1(comma)\fP , \*(S3\*l - -
+- \f1(minus)\fP - \*(S3\*m - -
+\. \f1(Delete)\fP \. \*(S3\*3\*(c~ - -
+/ \f1(divide)\fP / \*(S3\*o - -
+0 \f1(Insert)\fP 0 \*(Cs\*2\*(c~ - -
+1 \f1(End)\fP 1 \*(Cs\*4\*(c~ kc1 K4
+2 \f1(DownArrow)\fP 2 \*(Cs\*(cB - -
+3 \f1(PageDown)\fP 3 \*(Cs\*5\*(c~ kc3 K5
+4 \f1(LeftArrow)\fP 4 \*(Cs\*D - -
+5 \f1(Begin)\fP 5 \*(Cs\*E kb2 K2
+6 \f1(RightArrow)\fP 6 \*(Cs\*C - -
+7 \f1(Home)\fP 7 \*(Cs\*1\*(c~ ka1 K1
+8 \f1(UpArrow)\fP 8 \*(Cs\*A - -
+9 \f1(PageUp)\fP 9 \*(Cs\*5\*(c~ ka3 K3
+= (equal) \&= \*(S3\*(XX - -
.TE
They also provide 12 function keys, as well as a few other special-purpose keys.
.TS
@@ -1022,10 +1042,33 @@
F3 \*(Cs\*1\*3\*(c~
F4 \*(Cs\*1\*4\*(c~
.TE
+In normal mode, i.e., a Sun/PC keyboard
+when the \fBsunKeyboard\fP resource is false,
+\fIxterm\fP recognizes function key modifiers
+which are parameters appended before the final character
+of the control sequence.
+.TS
+center;
+cf3 lf3
+cf3w(2c) lf3w(2c) .
+Code Modifiers
+_
+2 Shift
+3 Alt
+4 Shift + Alt
+5 Control
+6 Shift + Control
+7 Alt + Control
+8 Shift + Alt + Control
+.TE
+For example, shift-F5 would be sent as
+\*(Cs\*1\*5\*;\*2\*(c~
.SH
VT220-Style Function Keys
.LP
However, \fIxterm\fP is most useful as a DEC VT102 or VT220 emulator.
+Set the \fBsunKeyboard\fP resource to true to force a Sun/PC keyboard
+to act like a VT220 keyboard.
.LP
The VT102/VT220 application keypad transmits unique escape sequences in
application mode, which are distinct from the cursor and scrolling keypad:
Index: input.c
--- xterm-93+/input.c Sun Mar 14 14:59:36 1999
+++ xterm-94/input.c Sat Mar 27 18:15:56 1999
@@ -170,6 +170,7 @@
{ XK_Home, XK_Find },
{ XK_End, XK_Select },
#ifdef XK_KP_Home
+ { XK_Delete, XK_KP_Decimal },
{ XK_KP_Delete, XK_KP_Decimal },
{ XK_KP_Insert, XK_KP_0 },
{ XK_KP_End, XK_KP_1 },
@@ -195,6 +196,7 @@
return keysym;
}
#endif
+
/*
* Modifiers other than shift, control and numlock should be reserved for the
* user. We use the first two explicitly to support VT220 keyboard, and the
@@ -215,6 +217,12 @@
reply.a_type = ESC; \
})
+#define MODIFIER_PARM \
+ if (modify_parm > 1) { \
+ reply.a_param[(int) reply.a_nparam] = modify_parm; \
+ reply.a_nparam += 1; \
+ }
+
void
Input (
register TKeyboard *keyboard,
@@ -233,6 +241,8 @@
KeySym keysym = 0;
ANSI reply;
int dec_code;
+ short modify_parm = 0;
+ int keypad_mode = ((keyboard->flags & MODE_DECKPAM) != 0);
/* Ignore characters typed at the keyboard */
if (keyboard->flags & MODE_KAM)
@@ -279,29 +289,69 @@
* - it's a pain for users to work around.
*/
if (!sunFunctionKeys
+ && (event->state & ShiftMask) == 0
&& sunKeyboard
- && keysym == XK_KP_Add)
+ && keysym == XK_KP_Add) {
keysym = XK_KP_Separator;
+ TRACE(("...Input keypad(+), change keysym to %#04lx\n", keysym))
+ }
#endif
/*
* The keyboard tables may give us different keypad codes according to
* whether NumLock is pressed. Use this check to simplify the process
* of determining whether we generate an escape sequence for a keypad
- * key, or use the string returned by the keyboard tables. There is no
- * fixed modifier for this feature, so we assume that it is the one
- * assigned to the NumLock key.
+ * key, or force it to the value kypd_num[]. There is no fixed
+ * modifier for this feature, so we assume that it is the one assigned
+ * to the NumLock key.
+ *
+ * This check used to try to return the contents of strbuf, but that
+ * does not work properly when a control modifier is given (trash is
+ * returned in the buffer in some cases -- perhaps an X bug).
*/
#if OPT_NUM_LOCK
if (nbytes == 1
&& IsKeypadKey(keysym)
&& term->misc.real_NumLock
&& (term->misc.num_lock & event->state) != 0) {
- keysym = *string;
- TRACE(("...Input num_lock, change keysym to %#04lx\n", keysym))
+ keypad_mode = 0;
+ TRACE(("...Input num_lock, force keypad_mode off\n"))
}
#endif
+ /*
+ * If we are in the normal (possibly Sun/PC) keyboard state, allow
+ * modifiers to add a parameter to the function-key control sequences.
+ */
+ if (event->state != 0
+ && !(IsKeypadKey(keysym) && keypad_mode)
+#if OPT_SUNPC_KBD
+ && !sunKeyboard
+#endif
+#if OPT_VT52_MODE
+ && screen->ansi_level != 0
+#endif
+ ) {
+#define ModifierParm(ctl,normal) \
+ modify_parm = (event->state & ControlMask) ? ctl : normal
+#if OPT_NUM_LOCK
+ if (term->misc.real_NumLock
+ && (event->state & term->misc.alt_left
+ || event->state & term->misc.alt_right)) {
+ if (event->state & ShiftMask) {
+ ModifierParm(8, 4);
+ } else {
+ ModifierParm(7, 3);
+ }
+ } else
+#endif
+ if (event->state & ShiftMask) {
+ ModifierParm(6, 2);
+ } else {
+ ModifierParm(5, 1);
+ }
+ }
+
#if OPT_SHIFT_KEYS
if (term->misc.shift_keys
&& (event->state & ShiftMask) != 0) {
@@ -328,20 +378,6 @@
}
}
- /*
- * VT220 & up: users expect that the Delete key on the editing keypad
- * should be mapped to \E[3~. However, we won't get there unless it is
- * treated as a keypad key, which XK_Delete is not. This presumes that
- * we have a backarrow key to supply a DEL character, which is still
- * needed in a number of applications.
- */
-#ifdef XK_KP_Delete
- if (keysym == XK_Delete) {
- keysym = XK_KP_Delete;
- TRACE(("...Input delete changed to %#04lx\n", keysym))
- }
-#endif
-
/* VT300 & up: backarrow toggle */
if ((nbytes == 1)
&& (((term->keyboard.flags & MODE_DECBKM) == 0)
@@ -370,6 +406,7 @@
if (hpFunctionKeys
&& (reply.a_final = hpfuncvalue (keysym)) != 0) {
reply.a_type = ESC;
+ MODIFIER_PARM
unparseseq(&reply, pty);
} else
#endif
@@ -377,6 +414,7 @@
reply.a_type = SS3;
reply.a_final = keysym-XK_KP_F1+'P';
VT52_CURSOR_KEYS
+ MODIFIER_PARM
unparseseq(&reply, pty);
key = TRUE;
#if 0 /* OPT_SUNPC_KBD should suppress - but only for vt220 compatibility */
@@ -392,11 +430,13 @@
reply.a_type = SS3;
reply.a_final = curfinal[keysym-XK_Home];
VT52_CURSOR_KEYS
+ MODIFIER_PARM
unparseseq(&reply, pty);
} else {
reply.a_type = CSI;
if_OPT_VT52_MODE(screen,{ reply.a_type = ESC; })
reply.a_final = curfinal[keysym-XK_Home];
+ MODIFIER_PARM
unparseseq(&reply, pty);
}
key = TRUE;
@@ -404,10 +444,11 @@
|| IsMiscFunctionKey(keysym)
|| IsEditFunctionKey(keysym)) {
#if OPT_SUNPC_KBD
- if ((event->state & ControlMask)
- && sunKeyboard
- && (keysym >= XK_F1 && keysym <= XK_F12))
- keysym += 12;
+ if (sunKeyboard) {
+ if ((event->state & ControlMask)
+ && (keysym >= XK_F1 && keysym <= XK_F12))
+ keysym += 12;
+ }
#endif
dec_code = decfuncvalue(keysym);
@@ -427,6 +468,7 @@
reply.a_type = SS3;
VT52_CURSOR_KEYS
reply.a_final = dec_code - 11 + 'P';
+ MODIFIER_PARM
unparseseq(&reply, pty);
}
#endif
@@ -440,15 +482,17 @@
reply.a_param[0] = dec_code;
reply.a_final = '~';
}
+ MODIFIER_PARM
if (reply.a_param[0] > 0)
unparseseq(&reply, pty);
}
key = TRUE;
} else if (IsKeypadKey(keysym)) {
- if ((keyboard->flags & MODE_DECKPAM) != 0) {
+ if (keypad_mode) {
reply.a_type = SS3;
reply.a_final = kypd_apl[keysym-XK_KP_Space];
VT52_KEYPAD
+ MODIFIER_PARM
unparseseq(&reply, pty);
} else {
unparseputc(kypd_num[keysym-XK_KP_Space], pty);
@@ -665,6 +709,16 @@
TRACE(("numlock mask %#lx is%s modifier\n",
term->misc.num_lock,
ModifierName(term->misc.num_lock)))
+ } else if (keysym == XK_Alt_L) {
+ term->misc.alt_left = (1<<i);
+ TRACE(("alt_left mask %#lx is%s modifier\n",
+ term->misc.alt_left,
+ ModifierName(term->misc.alt_left)))
+ } else if (keysym == XK_Alt_R) {
+ term->misc.alt_right = (1<<i);
+ TRACE(("alt_right mask %#lx is%s modifier\n",
+ term->misc.alt_right,
+ ModifierName(term->misc.alt_right)))
}
}
k++;
Index: main.c
--- xterm-93+/main.c Sun Mar 14 14:59:36 1999
+++ xterm-94/main.c Wed Mar 24 17:50:15 1999
@@ -148,7 +148,7 @@
static Bool IsPts = False;
#endif
-#if defined(ATT) && !defined(__sgi)
+#if (defined(ATT) && !defined(__sgi)) || (defined(SYSV) && defined(i386)) || (defined (__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))
#define USE_USG_PTYS
#else
#define USE_HANDSHAKE
@@ -563,10 +563,10 @@
#ifdef TIOCLSET
static unsigned int d_lmode;
#endif /* TIOCLSET */
-#else /* not USE_SYSV_TERMIO */
-#ifdef USE_POSIX_TERMIOS
+
+#elif defined(USE_POSIX_TERMIOS)
static struct termios d_tio;
-#else /* not USE_POSIX_TERMIOS */
+#else /* !USE_SYSV_TERMIO && !USE_POSIX_TERMIOS */
static struct sgttyb d_sg = {
0, 0, 0177, CKILL, EVENP|ODDP|ECHO|XTABS|CRMOD
};
@@ -586,7 +586,6 @@
'J', 'B'
};
#endif /* sony */
-#endif /* USE_POSIX_TERMIOS */
#endif /* USE_SYSV_TERMIO */
/* allow use of system default characters if defined and reasonable */
@@ -602,6 +601,9 @@
#ifndef CEOL
#define CEOL 0
#endif
+#ifndef CNUL
+#define CNUL 0
+#endif
#ifndef CSWTCH
#define CSWTCH 0
#endif
@@ -673,6 +675,8 @@
{ NULL, 0, 0, '\0' }, /* end of data */
};
+#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value
+
static int parse_tty_modes (char *s, struct _xttymodes *modelist);
#ifdef USE_SYSV_UTMP
@@ -1463,7 +1467,7 @@
d_lmode = 0;
#endif /* } TIOCLSET */
#endif /* } macII, ATT, CRAY */
-#endif /* MINIX, etc */
+#endif /* } MINIX, etc */
#endif /* AMOEBA */
/* Init the Toolkit. */
@@ -1885,7 +1889,7 @@
*/
if (pty_search(pty) == 0)
return 0;
-#elif defined(ATT) && !defined(__sgi)
+#elif defined(USE_USG_PTYS)
if ((*pty = open ("/dev/ptmx", O_RDWR)) < 0) {
return 1;
}
@@ -2286,7 +2290,7 @@
no_dev_tty = FALSE;
if (tty < 0) {
if (tty_got_hung || errno == ENXIO || errno == EIO ||
- errno == EINVAL || errno == ENOTTY) {
+ errno == EINVAL || errno == ENOTTY || errno == EACCES) {
no_dev_tty = TRUE;
#ifdef HAS_LTCHARS
ltc = d_ltc;
@@ -2514,6 +2518,7 @@
if ((ptyfd = open (ptsname(screen->respond), O_RDWR)) < 0) {
SysError (1);
}
+#ifdef I_PUSH
if (ioctl (ptyfd, I_PUSH, "ptem") < 0) {
SysError (2);
}
@@ -2530,6 +2535,7 @@
SysError (5);
}
#endif /* SVR4 */
+#endif
tty = ptyfd;
close (screen->respond);
#ifdef TIOCSWINSZ
@@ -2795,7 +2801,6 @@
#ifdef VDSUSP
tio.c_cc[VDSUSP] = CDSUSP;
#endif
-#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value;
if (override_tty_modes) {
/* sysv-specific */
TMODE (XTTYMODE_intr, tio.c_cc[VINTR]);
@@ -2850,7 +2855,6 @@
TMODE (XTTYMODE_lnext, ltc.t_lnextc);
#endif
}
-#undef TMODE
#ifdef HAS_LTCHARS
#ifdef __hpux
@@ -2891,7 +2895,8 @@
jmode &= ~KM_KANJI;
#endif /* sony */
-#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value;
+ ltc = d_ltc;
+
if (override_tty_modes) {
TMODE (XTTYMODE_intr, tc.t_intrc);
TMODE (XTTYMODE_quit, tc.t_quitc);
@@ -2909,7 +2914,6 @@
TMODE (XTTYMODE_weras, ltc.t_werasc);
TMODE (XTTYMODE_lnext, ltc.t_lnextc);
}
-#undef TMODE
if (ioctl (tty, TIOCSETP, (char *)&sg) == -1)
HsSysError (cp_pipe[1], ERROR_TIOCSETP);
Index: menu.c
--- xterm-93+/menu.c Sun Feb 7 12:54:50 1999
+++ xterm-94/menu.c Fri Mar 26 18:36:19 1999
@@ -101,6 +101,10 @@
static void do_hp_fkeys PROTO_XT_CALLBACK_ARGS;
#endif
+#if OPT_NUM_LOCK
+static void do_num_lock PROTO_XT_CALLBACK_ARGS;
+#endif
+
#if OPT_SUNPC_KBD
static void do_sun_kbd PROTO_XT_CALLBACK_ARGS;
#endif
@@ -139,6 +143,9 @@
{ "line1", NULL, NULL },
{ "8-bit control", do_8bit_control, NULL },
{ "backarrow key", do_backarrow, NULL },
+#if OPT_NUM_LOCK
+ { "num-lock", do_num_lock, NULL },
+#endif
{ "sun function-keys",do_sun_fkeys, NULL },
#if OPT_SUNPC_KBD
{ "sun keyboard", do_sun_kbd, NULL },
@@ -196,6 +203,7 @@
{ "font4", do_vtfont, NULL },
{ "font5", do_vtfont, NULL },
{ "font6", do_vtfont, NULL },
+ /* this is after the last builtin font; the other entries are special */
{ "fontescape", do_vtfont, NULL },
{ "fontsel", do_vtfont, NULL },
/* down to here should match NMENUFONTS in ptyx.h */
@@ -235,15 +243,6 @@
static void handle_send_signal (Widget gw, int sig);
-static void handle_toggle (
- void (*proc)PROTO_XT_CALLBACK_ARGS,
- int var,
- String *params,
- Cardinal nparams,
- Widget w,
- XtPointer closure,
- XtPointer data);
-
extern Widget toplevel;
@@ -284,11 +283,10 @@
XtNumber(mainMenuEntries));
update_securekbd();
update_allowsends();
-#ifdef ALLOWLOGGING
update_logging();
-#endif
update_8bit_control();
update_decbkm();
+ update_num_lock();
update_sun_kbd();
if (screen->terminal_id < 200) {
set_sensitivity (screen->mainMenu,
@@ -587,6 +585,18 @@
update_sun_fkeys();
}
+#if OPT_NUM_LOCK
+static void do_num_lock (
+ Widget gw GCC_UNUSED,
+ XtPointer closure GCC_UNUSED,
+ XtPointer data GCC_UNUSED)
+{
+ term->misc.real_NumLock = ! term->misc.real_NumLock;
+ update_num_lock();
+}
+#endif
+
+
#if OPT_SUNPC_KBD
static void do_sun_kbd (
Widget gw GCC_UNUSED,
@@ -723,7 +733,10 @@
{
term->flags ^= REVERSE_VIDEO;
ReverseVideo (term);
- /* update_reversevideo done in ReverseVideo */
+
+ /* cancel out the internal state changes, so menus are decoupled */
+ term->flags ^= REVERSE_VIDEO;
+ term->misc.re_verse = !term->misc.re_verse;
}
@@ -1309,6 +1322,18 @@
params, *param_count, w, (XtPointer)0, (XtPointer)0);
}
+#if OPT_NUM_LOCK
+void HandleNumLock(
+ Widget w,
+ XEvent *event GCC_UNUSED,
+ String *params,
+ Cardinal *param_count)
+{
+ handle_toggle (do_num_lock, (int) term->misc.real_NumLock,
+ params, *param_count, w, (XtPointer)0, (XtPointer)0);
+}
+#endif
+
#if OPT_SUNPC_KBD
void HandleSunKeyboard(
Widget w,
@@ -1359,7 +1384,7 @@
String *params,
Cardinal *param_count)
{
- handle_toggle (do_reversevideo, (int) (term->flags & REVERSE_VIDEO),
+ handle_toggle (do_reversevideo, (int) (term->misc.re_verse0),
params, *param_count, w, (XtPointer)0, (XtPointer)0);
}
Index: menu.h
--- xterm-93+/menu.h Sun Feb 7 12:54:50 1999
+++ xterm-94/menu.h Fri Mar 26 18:33:32 1999
@@ -70,6 +70,7 @@
extern void HandleHpFunctionKeys PROTO_XT_ACTIONS_ARGS;
extern void HandleJumpscroll PROTO_XT_ACTIONS_ARGS;
extern void HandleLogging PROTO_XT_ACTIONS_ARGS;
+extern void HandleNumLock PROTO_XT_ACTIONS_ARGS;
extern void HandleMarginBell PROTO_XT_ACTIONS_ARGS;
extern void HandlePopupMenu PROTO_XT_ACTIONS_ARGS;
extern void HandlePrint PROTO_XT_ACTIONS_ARGS;
@@ -114,6 +115,9 @@
mainMenu_line1,
mainMenu_8bit_ctrl,
mainMenu_backarrow,
+#if OPT_NUM_LOCK
+ mainMenu_num_lock,
+#endif
mainMenu_sun_fkeys,
#if OPT_SUNPC_KBD
mainMenu_sun_kbd,
@@ -161,9 +165,11 @@
vtMenu_hardreset,
vtMenu_clearsavedlines,
vtMenu_line2,
+#if OPT_TEK4014
vtMenu_tekshow,
vtMenu_tekmode,
vtMenu_vthide,
+#endif
vtMenu_altscreen,
vtMenu_LAST
} vtMenuIndices;
@@ -185,9 +191,13 @@
/* number of non-line items down to here should match NMENUFONTS in ptyx.h */
#if OPT_DEC_CHRSET
fontMenu_line1,
+#if OPT_DEC_CHRSET
fontMenu_font_doublesize,
+#endif
+#if OPT_DEC_SOFTFONT
fontMenu_font_loadable,
#endif
+#endif
fontMenu_LAST
} fontMenuIndices;
@@ -195,6 +205,7 @@
/*
* items in tek4014 mode menu
*/
+#if OPT_TEK4014
typedef enum {
tekMenu_tektextlarge,
tekMenu_tektext2,
@@ -210,6 +221,7 @@
tekMenu_tekhide,
tekMenu_LAST
} tekMenuIndices;
+#endif
/*
@@ -243,6 +255,8 @@
update_menu_item (term->screen.mainMenu, \
mainMenuEntries[mainMenu_logging].widget, \
term->screen.logging)
+#else
+#define update_logging() /*nothing*/
#endif
#define update_8bit_control() \
@@ -254,6 +268,15 @@
update_menu_item (term->screen.mainMenu, \
mainMenuEntries[mainMenu_backarrow].widget, \
term->keyboard.flags & MODE_DECBKM)
+
+#if OPT_NUM_LOCK
+#define update_num_lock() \
+ update_menu_item (term->screen.mainMenu, \
+ mainMenuEntries[mainMenu_num_lock].widget, \
+ term->misc.real_NumLock)
+#else
+#define update_num_lock() /*nothing*/
+#endif
#define update_sun_fkeys() \
update_menu_item (term->screen.mainMenu, \
Index: misc.c
--- xterm-93+/misc.c Sun Mar 14 14:59:36 1999
+++ xterm-94/misc.c Sat Mar 27 17:28:14 1999
@@ -113,7 +113,7 @@
(event.xcrossing.window == XtWindow(XtParent(term))))
#endif
-static Boolean ChangeColorsRequest (XtermWidget pTerm, int start, char *names);
+static Boolean ChangeColorsRequest (XtermWidget pTerm, int start, char *names, int final);
static void DoSpecialEnterNotify (XEnterWindowEvent *ev);
static void DoSpecialLeaveNotify (XEnterWindowEvent *ev);
static void selectwindow (TScreen *screen, int flag);
@@ -945,15 +945,20 @@
#endif /* ALLOWLOGGING */
void
-do_osc(Char *oscbuf, int len GCC_UNUSED)
+do_osc(Char *oscbuf, int len GCC_UNUSED, int final)
{
+ register TScreen *screen = &(term->screen);
register int mode;
register Char *cp;
int state = 0;
char *buf = 0;
/*
- * lines should be of the form <OSC> number ; string <ST>
+ * Lines should be of the form <OSC> number ; string <ST>, however
+ * older xterms can accept <BEL> as a final character. We will respond
+ * with the same final character as the application sends to make this
+ * work better with shell scripts, which may have trouble reading an
+ * <ESC><backslash>, which is the 7-bit equivalent to <ST>.
*/
mode = 0;
for (cp = oscbuf; *cp != '\0'; cp++) {
@@ -993,14 +998,12 @@
Changetitle(buf);
break;
- case 10: case 11: case 12:
- case 13: case 14: case 15:
- case 16:
- {
- if (term->misc.dynamicColors)
- ChangeColorsRequest(term,mode-10,buf);
- }
- break;
+ case 10: case 11: case 12:
+ case 13: case 14: case 15:
+ case 16: case 17:
+ if (term->misc.dynamicColors)
+ ChangeColorsRequest(term, mode-10, buf, final);
+ break;
#ifdef ALLOWLOGGING
case 46: /* new log file */
@@ -1009,21 +1012,74 @@
* Warning, enabling this feature allows people to overwrite
* arbitrary files accessible to the person running xterm.
*/
- if((cp = malloc((unsigned)strlen(buf) + 1)) == NULL)
+ if (buf != 0
+ && strcmp(buf, "?")
+ && ((cp = malloc((unsigned)strlen(buf) + 1)) != NULL) {
+ strcpy(cp, buf);
+ if(screen->logfile)
+ free(screen->logfile);
+ screen->logfile = cp;
break;
- strcpy(cp, buf);
- if(term->screen.logfile)
- free(term->screen.logfile);
- term->screen.logfile = cp;
-#else
+ }
+#endif
Bell(XkbBI_Info,0);
Bell(XkbBI_Info,0);
-#endif
break;
#endif /* ALLOWLOGGING */
case 50:
- SetVTFont (fontMenu_fontescape, True, buf, NULL);
+ if (buf != 0 && !strcmp(buf, "?")) {
+ int num = screen->menu_font_number;
+
+ unparseputc1(OSC, screen->respond);
+ unparseputs("50", screen->respond);
+
+ if ((buf = screen->menu_font_names[num]) != 0) {
+ unparseputc(';', screen->respond);
+ unparseputs(buf, screen->respond);
+ }
+ unparseputc1(final, screen->respond);
+ } else {
+ /*
+ * If the font specification is a "#", followed by an
+ * optional sign and optional number, lookup the
+ * corresponding menu font entry.
+ */
+ if (buf != 0 && *buf == '#') {
+ int num = screen->menu_font_number;
+ int rel = 0;
+
+ if (*++buf == '+') {
+ rel = 1;
+ buf++;
+ } else if (*buf == '-') {
+ rel = -1;
+ buf++;
+ }
+
+ if (isdigit(*buf)) {
+ int val = atoi(buf);
+ if (rel > 0)
+ num += val;
+ else if (rel < 1)
+ num -= val;
+ else
+ num = val;
+ } else if (rel) {
+ num += rel;
+ } else {
+ num = 0;
+ }
+
+ if (num < 0
+ || num > fontMenu_lastBuiltin
+ || (buf = screen->menu_font_names[num]) == 0) {
+ Bell(XkbBI_MinorError,0);
+ break;
+ }
+ }
+ SetVTFont (fontMenu_fontescape, True, buf, NULL);
+ }
break;
/*
@@ -1121,8 +1177,7 @@
unparseputc('r', screen->respond);
if (okay)
cp = reply;
- while (*cp != '\0')
- unparseputc(*cp++, screen->respond);
+ unparseputs(cp, screen->respond);
unparseputc1(ST, screen->respond);
} else {
unparseputc(CAN, screen->respond);
@@ -1227,6 +1282,8 @@
void
Changename(register char *name)
{
+ if (name == 0)
+ name = "";
#if OPT_ZICONBEEP /* If warning should be given then give it */
if ( zIconBeep && zIconBeep_flagged ) {
char *newname = (char *)malloc(strlen(name)+ 4 + 1);
@@ -1257,22 +1314,41 @@
GetOldColors(XtermWidget pTerm)
{
int i;
- if (pOldColors==NULL) {
- pOldColors= (ScrnColors *)XtMalloc(sizeof(ScrnColors));
- if (pOldColors==NULL) {
+ if (pOldColors == NULL) {
+ pOldColors = (ScrnColors *)XtMalloc(sizeof(ScrnColors));
+ if (pOldColors == NULL) {
fprintf(stderr,"allocation failure in GetOldColors\n");
return(FALSE);
}
- pOldColors->which= 0;
- for (i=0;i<NCOLORS;i++) {
- pOldColors->colors[i]= 0;
- pOldColors->names[i]= NULL;
+ pOldColors->which = 0;
+ for (i = 0; i < NCOLORS; i++) {
+ pOldColors->colors[i] = 0;
+ pOldColors->names[i] = NULL;
}
GetColors(pTerm,pOldColors);
}
return(TRUE);
}
+static void ReportColorRequest(XtermWidget pTerm, int ndx, int final)
+{
+ XColor color;
+ Colormap cmap = pTerm->core.colormap;
+ char buffer[80];
+
+ GetOldColors(pTerm);
+ color.pixel = pOldColors->colors[ndx];
+ TRACE(("ReportColors %d: %#lx\n", ndx, pOldColors->colors[ndx]))
+ XQueryColor(term->screen.display, cmap, &color);
+ sprintf(buffer, "%d;rgb:%04x/%04x/%04x", ndx + 10,
+ color.red,
+ color.green,
+ color.blue);
+ unparseputc1(OSC, pTerm->screen.respond);
+ unparseputs(buffer, pTerm->screen.respond);
+ unparseputc1(final, pTerm->screen.respond);
+}
+
static Boolean
UpdateOldColors(
XtermWidget pTerm GCC_UNUSED,
@@ -1287,16 +1363,16 @@
* (clearly) fails is if someone is trying a boatload of colors, in
* which case they can restart xterm
*/
- for (i=0;i<NCOLORS;i++) {
- if (COLOR_DEFINED(pNew,i)) {
- if (pOldColors->names[i]!=NULL) {
+ for (i = 0; i < NCOLORS; i++) {
+ if (COLOR_DEFINED(pNew, i)) {
+ if (pOldColors->names[i] != NULL) {
XtFree(pOldColors->names[i]);
- pOldColors->names[i]= NULL;
+ pOldColors->names[i] = NULL;
}
if (pNew->names[i]) {
- pOldColors->names[i]= pNew->names[i];
+ pOldColors->names[i] = pNew->names[i];
}
- pOldColors->colors[i]= pNew->colors[i];
+ pOldColors->colors[i] = pNew->colors[i];
}
}
return(TRUE);
@@ -1311,14 +1387,14 @@
if (pOld) {
/* change text cursor, if necesary */
- if (pOld->colors[TEXT_CURSOR]==pOld->colors[TEXT_FG]) {
- pOld->colors[TEXT_CURSOR]= pOld->colors[TEXT_BG];
+ if (pOld->colors[TEXT_CURSOR] == pOld->colors[TEXT_FG]) {
+ pOld->colors[TEXT_CURSOR] = pOld->colors[TEXT_BG];
if (pOld->names[TEXT_CURSOR]) {
XtFree(pOldColors->names[TEXT_CURSOR]);
- pOld->names[TEXT_CURSOR]= NULL;
+ pOld->names[TEXT_CURSOR] = NULL;
}
if (pOld->names[TEXT_BG]) {
- tmpName= XtMalloc(strlen(pOld->names[TEXT_BG])+1);
+ tmpName = XtMalloc(strlen(pOld->names[TEXT_BG])+1);
if (tmpName) {
strcpy(tmpName,pOld->names[TEXT_BG]);
pOld->names[TEXT_CURSOR]= tmpName;
@@ -1326,29 +1402,14 @@
}
}
- /* swap text FG and BG */
- tmpPix= pOld->colors[TEXT_FG];
- tmpName= pOld->names[TEXT_FG];
- pOld->colors[TEXT_FG]= pOld->colors[TEXT_BG];
- pOld->names[TEXT_FG]= pOld->names[TEXT_BG];
- pOld->colors[TEXT_BG]= tmpPix;
- pOld->names[TEXT_BG]= tmpName;
-
- /* swap mouse FG and BG */
- tmpPix= pOld->colors[MOUSE_FG];
- tmpName= pOld->names[MOUSE_FG];
- pOld->colors[MOUSE_FG]= pOld->colors[MOUSE_BG];
- pOld->names[MOUSE_FG]= pOld->names[MOUSE_BG];
- pOld->colors[MOUSE_BG]= tmpPix;
- pOld->names[MOUSE_BG]= tmpName;
-
- /* swap Tek FG and BG */
- tmpPix= pOld->colors[TEK_FG];
- tmpName= pOld->names[TEK_FG];
- pOld->colors[TEK_FG]= pOld->colors[TEK_BG];
- pOld->names[TEK_FG]= pOld->names[TEK_BG];
- pOld->colors[TEK_BG]= tmpPix;
- pOld->names[TEK_BG]= tmpName;
+ EXCHANGE(pOld->colors[TEXT_FG], pOld->colors[TEXT_BG], tmpPix);
+ EXCHANGE(pOld->names[TEXT_FG], pOld->names[TEXT_BG], tmpName);
+
+ EXCHANGE(pOld->colors[MOUSE_FG],pOld->colors[MOUSE_BG], tmpPix);
+ EXCHANGE(pOld->names[MOUSE_FG], pOld->names[MOUSE_BG], tmpName);
+
+ EXCHANGE(pOld->colors[TEK_FG], pOld->colors[TEK_BG], tmpPix);
+ EXCHANGE(pOld->names[TEK_FG], pOld->names[TEK_BG], tmpName);
}
return;
}
@@ -1361,20 +1422,20 @@
char *name)
{
XColor def;
-register TScreen *screen= &pTerm->screen;
-Colormap cmap= pTerm->core.colormap;
+register TScreen *screen = &pTerm->screen;
+Colormap cmap = pTerm->core.colormap;
char *newName;
- if ((XParseColor(screen->display,cmap,name,&def))&&
- (XAllocColor(screen->display,cmap,&def))) {
- SET_COLOR_VALUE(pNew,ndx,def.pixel);
- newName= XtMalloc(strlen(name)+1);
- if (newName) {
- strcpy(newName,name);
- SET_COLOR_NAME(pNew,ndx,newName);
- }
+ if (XParseColor(screen->display, cmap, name, &def)
+ && XAllocColor(screen->display, cmap, &def)
+ && (newName = XtMalloc(strlen(name)+1)) != 0) {
+ SET_COLOR_VALUE(pNew, ndx, def.pixel);
+ strcpy(newName, name);
+ SET_COLOR_NAME(pNew, ndx, newName);
+ TRACE(("AllocateColor #%d: %s (pixel %#lx)\n", ndx, newName, def.pixel))
return(TRUE);
}
+ TRACE(("AllocateColor #%d: %s (failed)\n", ndx, name))
return(FALSE);
}
@@ -1382,46 +1443,53 @@
ChangeColorsRequest(
XtermWidget pTerm,
int start,
- register char *names)
+ register char *names,
+ int final)
{
char *thisName;
ScrnColors newColors;
-int i,ndx;
+int i, ndx;
+
+ TRACE(("ChangeColorsRequest start=%d, names='%s'\n", start, names))
- if ((pOldColors==NULL)&&(!GetOldColors(pTerm))) {
+ if ((pOldColors == NULL)
+ && (!GetOldColors(pTerm))) {
return(FALSE);
}
- newColors.which= 0;
- for (i=0;i<NCOLORS;i++) {
- newColors.names[i]= NULL;
- }
- for (i=start;i<NCOLORS;i++) {
- if (term->misc.re_verse) ndx= OPPOSITE_COLOR(i);
- else ndx= i;
- if ((names==NULL)||(names[0]=='\0')) {
- newColors.names[ndx]= NULL;
+ newColors.which = 0;
+ for (i = 0; i < NCOLORS; i++) {
+ newColors.names[i] = NULL;
+ }
+ for (i = start; i < NCOLORS; i++) {
+ if (term->misc.re_verse) ndx = OPPOSITE_COLOR(i);
+ else ndx = i;
+ if ((names == NULL) || (names[0] == '\0')) {
+ newColors.names[ndx] = NULL;
}
else {
- if (names[0]==';')
+ if (names[0] == ';')
thisName= NULL;
else thisName= names;
- names = strchr(names,';');
- if (names!=NULL) {
+ names = strchr(names, ';');
+ if (names != NULL) {
*names= '\0';
names++;
}
- if ((!pOldColors->names[ndx])||
- (thisName&&(strcmp(thisName,pOldColors->names[ndx])))) {
- AllocateColor(pTerm,&newColors,ndx,thisName);
+ if (thisName != 0 && !strcmp(thisName, "?"))
+ ReportColorRequest(pTerm, ndx, final);
+ else if (!pOldColors->names[ndx]
+ || (thisName
+ && strcmp(thisName, pOldColors->names[ndx]))) {
+ AllocateColor(pTerm, &newColors, ndx, thisName);
}
}
}
- if (newColors.which==0)
+ if (newColors.which == 0)
return(TRUE);
- ChangeColors(pTerm,&newColors);
- UpdateOldColors(pTerm,&newColors);
+ ChangeColors(pTerm, &newColors);
+ UpdateOldColors(pTerm, &newColors);
return(TRUE);
}
Index: ptyx.h
--- xterm-93+/ptyx.h Sun Mar 14 14:59:36 1999
+++ xterm-94/ptyx.h Wed Mar 24 05:39:09 1999
@@ -967,7 +967,9 @@
#endif
#if OPT_NUM_LOCK
Boolean real_NumLock; /* true if we treat NumLock key specially */
- unsigned long num_lock;
+ unsigned long num_lock; /* modifier for Num_Lock */
+ unsigned long alt_left; /* modifier for Alt_L */
+ unsigned long alt_right; /* modifier for Alt_R */
#endif
} Misc;
Index: resize.c
--- xterm-93+/resize.c Sun Mar 14 14:59:36 1999
+++ xterm-94/resize.c Mon Mar 22 19:50:45 1999
@@ -37,7 +37,7 @@
#include <stdio.h>
#include <ctype.h>
-#if defined(att) || (defined(SYSV) && defined(i386))
+#if defined(att)
#define ATT
#endif
@@ -52,7 +52,7 @@
#define ATT
#endif
-#ifdef ATT
+#if (defined(ATT) && !defined(__sgi)) || (defined(SYSV) && defined(i386)) || (defined (__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))
#define USE_USG_PTYS
#endif
@@ -122,10 +122,12 @@
# endif /* USE_TERMIOS */
#endif /* USE_SYSV_TERMIO */
+#ifdef SYSV
#ifdef USE_USG_PTYS
#include <sys/stream.h>
#ifndef SVR4
#include <sys/ptem.h>
+#endif
#endif
#endif
Index: screen.c
--- xterm-93+/screen.c Sun Mar 14 14:59:36 1999
+++ xterm-94/screen.c Mon Mar 22 19:56:46 1999
@@ -36,7 +36,12 @@
#include <signal.h>
+#ifdef att
+#define ATT
+#endif
+
#ifdef SVR4
+#undef SYSV
#define SYSV
#include <termios.h>
#else
@@ -52,6 +57,10 @@
#ifdef __hpux
#include <sys/termio.h>
+#endif
+
+#if (defined(ATT) && !defined(__sgi)) || (defined(SYSV) && defined(i386)) || (defined (__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))
+#define USE_USG_PTYS
#endif
#ifdef SYSV
Index: scrollbar.c
--- xterm-93+/scrollbar.c Sun Mar 14 14:59:36 1999
+++ xterm-94/scrollbar.c Sun Mar 21 19:19:08 1999
@@ -218,7 +218,7 @@
args[1].value = (XtArgVal) bg;
nargs--; /* don't set border_pixmap */
if (bdpix == XtUnspecifiedPixmap) { /* if not pixmap then pixel */
- args[2].value = (XtArgVal) bdr; /* keep old border color */
+ args[2].value = args[1].value; /* keep border visible */
} else { /* ignore since pixmap */
nargs--; /* don't set border pixel */
}
Index: termcap
--- xterm-93+/termcap Sun Mar 14 14:59:36 1999
+++ xterm-94/termcap Sun Mar 21 15:50:23 1999
@@ -127,6 +127,6 @@
# This is the only entry which you should have to customize, since "xterm"
# is widely used for a variety of incompatible terminal emulations including
# color_xterm and rxvt.
-v0|xterm|X Windows terminal emulator:\
+v0|xterm|X11 terminal emulator:\
:tc=xterm-xfree86:
# :tc=xterm-r6:
Index: terminfo
--- xterm-93+/terminfo Sun Mar 14 14:59:36 1999
+++ xterm-94/terminfo Sun Mar 21 15:51:43 1999
@@ -133,18 +133,18 @@
ind=^J,
invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>,
- ka1=\EOw,
- ka3=\EOu,
- kb2=\EOy,
+ ka1=\EOH,
+ ka3=\E[5~,
+ kb2=\EOE,
kbeg=\EOE,
kbs=^H,
- kc1=\EOq,
- kc3=\EOs,
+ kc1=\EOF,
+ kc3=\E[6~,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
- kdch1=\E[3~,
+ kdch1=\177,
kend=\EOF,
kent=\EOM,
kf1=\EOP,
@@ -221,11 +221,17 @@
# + uses DEC-style control sequences for the application keypad.
#
xterm-vt220|XFree86 xterm emulating vt220,
+ ka1=\EOw,
+ ka3=\EOy,
+ kb2=\EOu,
+ kbeg=\EOu,
+ kc1=\EOq,
+ kc3=\EOs,
kdch1=\E[3~,
kend=\E[4~,
khome=\E[1~,
use=xterm-xfree86,
-
+#
xterm-vt52|XFree86 xterm emulating dec vt52,
cols#80,
it#8,
@@ -253,7 +259,7 @@
ri=\EI,
rmacs=\EG,
smacs=\EF,
-
+#
# kf30-kf45 are keysyms XK_R1 through XK_R15 on the Sun keyboard.
xterm-sun|XFree86 xterm with sun function keys,
kb2=\E[218z,
@@ -293,7 +299,7 @@
kich1=\E[2z,
kpp=\E[216z,
use=xterm,
-
+#
xterm-hp|XFree86 xterm with hpterm function keys,
kclr=\EJ,
kcub1=\ED,
@@ -315,7 +321,7 @@
knp=\ES,
kpp=\ET,
use=xterm,
-
+#
# Other variants:
xterm-24|xterms|vs100|xterm terminal emulator (X Window System),
lines#24,
@@ -394,7 +400,7 @@
# Originally I suppressed setaf/setab, since ANSI specifies only 8 colors, but
# Stephen Marley persuaded me to allow the "ANSI" color controls to extend to
# 16 colors. (Note that ncurses 4.2 uses setf/setb from this description;
-# however 4.3 will select either according to their availability). - T.Dickey
+# however 5.0 selects either according to their availability). - T.Dickey
#
# SVr4 curses does not use more than 8 colors anyway, so using 16 colors is
# either for terminfo-level applications or via ncurses.
@@ -407,8 +413,10 @@
setb=%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
setf=%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
use=xterm-xfree86,
+#
# This is an 8-bit version of xterm, which emulates DEC vt220 with ANSI color.
-# To use it, your decTerminalID resource must be set to 200 or above.
+# To use it, your decTerminalID resource must be set to 200 or above, and the
+# sunKeyboard resource set to true.
#
# HTS \E H \210
# RI \E M \215
@@ -742,6 +750,6 @@
# This is the only entry which you should have to customize, since "xterm"
# is widely used for a variety of incompatible terminal emulations including
# color_xterm and rxvt.
-xterm|X Windows terminal emulator,
+xterm|X11 terminal emulator,
use=xterm-xfree86,
# use=xterm-r6,
Index: version.h
--- xterm-93+/version.h Sun Mar 14 14:59:36 1999
+++ xterm-94/version.h Sat Mar 27 16:51:32 1999
@@ -6,4 +6,4 @@
* version of xterm has been built. The number in parentheses is my patch
* number (T.Dickey).
*/
-#define XTERM_VERSION "XFree86 3.9Pd(93)"
+#define XTERM_VERSION "XFree86 3.9Pf(94)"
Index: vttests/16colors.sh
--- /dev/null Sun Jul 17 19:46:18 1994
+++ xterm-94/vttests/16colors.sh Sat Mar 27 12:15:14 1999
@@ -0,0 +1,63 @@
+#!/bin/sh
+# $XFree86$
+#
+# -- Thomas Dickey (1999/3/27)
+# Show a simple 16-color test pattern. It is a little more confusing than
+# 8colors.sh, since everything is abbreviated to fit on an 80-column line.
+# The high (8-15) combinations for foreground or background are marked with
+# a '+' sign.
+
+trap 'echo -n "^[[0m"; exit' 0 1 2 5 15
+echo "^[[0m"
+while true
+do
+ for AT in 0 1 4 7
+ do
+ case $AT in
+ 0) attr=" ";;
+ 1) attr="BO ";;
+ 4) attr="UN ";;
+ 7) attr="RV ";;
+ esac
+ for FG in 0 1 2 3 4 5 6 7
+ do
+ case $FG in
+ 0) fcolor="BLK ";;
+ 1) fcolor="RED ";;
+ 2) fcolor="GRN ";;
+ 3) fcolor="YEL ";;
+ 4) fcolor="BLU ";;
+ 5) fcolor="MAG ";;
+ 6) fcolor="CYN ";;
+ 7) fcolor="WHT ";;
+ esac
+ for HI in 3 9
+ do
+ if test $HI = 3 ; then
+ color=" $fcolor"
+ else
+ color="+$fcolor"
+ fi
+ echo -n "^[[0;${AT}m$attr"
+ echo -n "^[[${HI}${FG}m$color"
+ for BG in 1 2 3 4 5 6 7
+ do
+ case $BG in
+ 0) bcolor="BLK ";;
+ 1) bcolor="RED ";;
+ 2) bcolor="GRN ";;
+ 3) bcolor="YEL ";;
+ 4) bcolor="BLU ";;
+ 5) bcolor="MAG ";;
+ 6) bcolor="CYN ";;
+ 7) bcolor="WHT ";;
+ esac
+ echo -n "^[[4${BG}m$bcolor"
+ echo -n "^[[10${BG}m+$bcolor"
+ done
+ echo "^[[0m"
+ done
+ done
+ sleep 1
+ done
+done
Index: vttests/8colors.sh
--- /dev/null Sun Jul 17 19:46:18 1994
+++ xterm-94/vttests/8colors.sh Sat Mar 27 12:15:19 1999
@@ -0,0 +1,51 @@
+#!/bin/sh
+# $XFree86$
+#
+# -- Thomas Dickey (1999/3/27)
+# Show a simple 8-color test pattern
+
+trap 'echo -n "^[[0m"; exit' 0 1 2 5 15
+echo "^[[0m"
+while true
+do
+ for AT in 0 1 4 7
+ do
+ case $AT in
+ 0) attr="normal ";;
+ 1) attr="bold ";;
+ 4) attr="under ";;
+ 7) attr="reverse ";;
+ esac
+ for FG in 0 1 2 3 4 5 6 7
+ do
+ case $FG in
+ 0) fcolor="black ";;
+ 1) fcolor="red ";;
+ 2) fcolor="green ";;
+ 3) fcolor="yellow ";;
+ 4) fcolor="blue ";;
+ 5) fcolor="magenta ";;
+ 6) fcolor="cyan ";;
+ 7) fcolor="white ";;
+ esac
+ echo -n "^[[0;${AT}m$attr"
+ echo -n "^[[3${FG}m$fcolor"
+ for BG in 1 2 3 4 5 6 7
+ do
+ case $BG in
+ 0) bcolor="black ";;
+ 1) bcolor="red ";;
+ 2) bcolor="green ";;
+ 3) bcolor="yellow ";;
+ 4) bcolor="blue ";;
+ 5) bcolor="magenta ";;
+ 6) bcolor="cyan ";;
+ 7) bcolor="white ";;
+ esac
+ echo -n "^[[4${BG}m$bcolor"
+ done
+ echo "^[[0m"
+ done
+ sleep 1
+ done
+done
Index: vttests/dynamic.sh
--- /dev/null Sun Jul 17 19:46:18 1994
+++ xterm-94/vttests/dynamic.sh Sat Mar 27 17:19:38 1999
@@ -0,0 +1,28 @@
+#!/bin/sh
+# $XFree86$
+#
+# -- Thomas Dickey (1999/3/27)
+# Demonstrate the use of dynamic colors by setting the background successively
+# to different values.
+
+LIST="00 30 d0 ff"
+
+exec </dev/tty
+old=`stty -g`
+stty raw -echo min 0 time 0
+echo -n '^[]11;?^G' > /dev/tty
+read original
+stty $old
+
+trap 'echo -n "$original"; exit' 0 1 2 5 15
+for R in $LIST
+do
+ for G in $LIST
+ do
+ for B in $LIST
+ do
+ echo -n "^[]11;rgb:$R/$G/$B^G"
+ sleep 1
+ done
+ done
+done
Index: vttests/resize.sh
--- /dev/null Sun Jul 17 19:46:18 1994
+++ xterm-94/vttests/resize.sh Sat Mar 27 12:16:44 1999
@@ -0,0 +1,51 @@
+#!/bin/sh
+# $XFree86$
+#
+# -- Thomas Dickey (1999/3/27)
+# Obtain the current screen size, then resize the terminal to the nominal
+# screen width/height, and restore the size.
+
+exec </dev/tty
+old=`stty -g`
+stty raw -echo min 0 time 0
+
+echo -n "^[[18t" > /dev/tty
+IFS=';' read junk height width
+
+echo -n "^[[19t" > /dev/tty
+IFS=';' read junk maxheight maxwidth
+
+stty $old
+
+width=`echo $width|sed -e 's/t.*//'`
+maxwidth=`echo $maxwidth|sed -e 's/t.*//'`
+
+trap 'echo -n "^[[8;${height};${width}t"; exit' 0 1 2 5 15
+w=$width
+h=$height
+a=1
+while true
+do
+# sleep 1
+ echo resizing to $h by $w
+ echo -n "^[[8;${h};${w}t"
+ if test $a = 1 ; then
+ if test $w = $maxwidth ; then
+ h=`expr $h + $a`
+ if test $h = $maxheight ; then
+ a=-1
+ fi
+ else
+ w=`expr $w + $a`
+ fi
+ else
+ if test $w = $width ; then
+ h=`expr $h + $a`
+ if test $h = $height ; then
+ a=1
+ fi
+ else
+ w=`expr $w + $a`
+ fi
+ fi
+done
Index: vttests/title.sh
--- /dev/null Sun Jul 17 19:46:18 1994
+++ xterm-94/vttests/title.sh Sat Mar 27 12:16:30 1999
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $XFree86$
+#
+# -- Thomas Dickey (1999/3/27)
+# Obtain the current title of the window, set up a simple clock which runs
+# until this script is interrupted, then restore the title.
+
+exec </dev/tty
+old=`stty -g`
+stty raw -echo min 0 time 0
+echo -n "^[[21t" > /dev/tty
+read title
+stty $old
+
+title=`echo "$title" |sed -e 's/^...//' -e 's/.$//'`
+
+trap 'echo -n "^[]2;$title^G"; exit' 0 1 2 5 15
+while true
+do
+ sleep 1
+ echo -n "^[]2;`date`^G"
+done
Index: xterm.h
--- xterm-93+/xterm.h Sun Mar 14 14:59:36 1999
+++ xterm-94/xterm.h Sat Mar 27 17:18:16 1999
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/xterm/xterm.h,v 3.35 1999/03/14 03:22:45 dawes Exp $ */
+/* $XFree86: xc/programs/xterm/xterm.h,v 3.36 1999/03/21 07:35:40 dawes Exp $ */
/************************************************************
@@ -84,8 +84,6 @@
#define HAVE_TCGETATTR 1
#endif
-#define XMU_POINTER XtPointer
-
#endif /* HAVE_CONFIG_H */
/***====================================================================***/
@@ -122,13 +120,6 @@
#undef HAVE_WAITPID
#endif
-/*
- * FIXME: Xmu interface in XFree86 3.9N* introduces an incompatibility.
- */
-#ifndef XMU_POINTER
-#define XMU_POINTER XPointer
-#endif
-
/***====================================================================***/
#include <proto.h>
@@ -189,6 +180,7 @@
extern void set_cursor_gcs (TScreen *screen);
extern void unparseputc (int c, int fd);
extern void unparseputc1 (int c, int fd);
+extern void unparseputs (Char *s, int fd);
extern void unparseseq (ANSI *ap, int fd);
#if OPT_ISO_COLORS
@@ -225,7 +217,9 @@
/* input.c */
extern void Input (TKeyboard *keyboard, TScreen *screen, XKeyEvent *event, Bool eightbit);
extern void StringInput (TScreen *screen, char *string, size_t nbytes);
+#if OPT_NUM_LOCK
extern void VTInitModifiers(void);
+#endif
/* main.c */
#ifndef __EMX__
@@ -276,7 +270,7 @@
extern void VisualBell (void);
extern void creat_as (int uid, int gid, char *pathname, int mode);
extern void do_dcs (Char *buf, size_t len);
-extern void do_osc (Char *buf, int len);
+extern void do_osc (Char *buf, int len, int final);
extern void do_xevents (void);
extern void end_tek_mode (void);
extern void end_vt_mode (void);
Index: xterm.log.html
--- xterm-93+/xterm.log.html Sun Mar 14 14:59:36 1999
+++ xterm-94/xterm.log.html Sat Mar 27 17:25:29 1999
@@ -41,6 +41,7 @@
xc/programs/Xserver/hw/xfree86).
<UL>
+<LI><A HREF="#xterm_94">Patch #94 - 1999/3/27 - XFree86 3.9Pf</A>
<LI><A HREF="#xterm_93">Patch #93 - 1999/3/14 - XFree86 3.9Pd</A>
<LI><A HREF="#xterm_92">Patch #92 - 1999/2/5 - XFree86 3.9Nz</A>
<LI><A HREF="#xterm_91">Patch #91 - 1999/1/21 - XFree86 3.9Nw</A>
@@ -136,6 +137,92 @@
<LI><A HREF="#xterm_02">Patch #2 - 1996/1/7</A>
<LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
</UL>
+
+<H1><A NAME="xterm_94">Patch #94 - 1999/3/27 - XFree86 3.9Pf</A></H1>
+<ul>
+ <li>further fixes for terminfo: ka1, ka3, etc., differ between the
+ default xterm-xfree86 and xterm-vt220 entries.
+
+ <li>change default (with sunKeyboard resource false) behavior of
+ the editing keypad "Delete" to send a 127, like xterm-r6.
+ The VT220-style <code><esc>[3~</code> is sent when
+ sunKeyboard is true (reported by Tomas Vanhala).
+
+ <li>add parameters to function keys to indicate if shift, control
+ or alt are set. The codes are based on a description of
+ a DEC VT510 with a PC keyboard, from Jeffrey Altman
+ <jaltman@watsun.cc.columbia.edu>.
+
+ <li>add control sequence 1035, set-num-lock action and num-lock
+ menu entry to control the use of the NumLock and Alt keys for
+ the Sun/PC and VT220 keyboard extensions.
+
+ <li>implement DECSET/DECRST numeric keypad (DECNKM) mode.
+
+ <li>modify terminfo and termcap to use recommended "X Window" or "X11"
+ names rather than "X Windows" (reported by Tomas Vanhala).
+
+ <li>suppress translation of shifted keypad "+" when sunKeyboard
+ is true.
+
+ <li>workaround unexpected behavior (perhaps bug) in XmbLookupString,
+ which returns trash in the string buffer for numlock and control-key
+ combined with keypad-keys.
+
+ <li>modify ScrollBarReverseVideo() to keep scrollbar border visible
+ when reverse video is toggled.
+
+ <li>correct missing case for parameter 17 (set highlight color) in
+ dynamic colors control sequences.
+
+ <li>extend dynamic colors control sequences to allow users to
+ determine the colors and font which are currently active.
+
+ <li>minor tweak to OSC responses, to use BEL if the application used
+ that to end the request, rather than ST. This works better with
+ shell scripts, which may not handle an
+ <code><esc>backslash</code> very well.
+
+ <li>separate menu settings for reverse video from that done under
+ program control.
+
+ <li>corrected ifdef's for menus, which did not allow tek4014 to
+ be suppressed properly (reported by Clark Morgan).
+
+ <li>integrated patch from Pavel Roskin
+ <pavel_roskin@geocities.com>
+ for Linux-2.2.x with GLibc-2.1 and
+ /dev/ptmx support:
+ <ul>
+ <li>main.c and resize.c were using different rules to determine
+ whether ATT should be defined (actually USE_USG_PTYS is more
+ apt).
+
+ <li>copy definitions from main.c to resize.c to prevent
+ sys/stream.h and sys/ptem.h from inclusion when SYSV is not
+ defined
+
+ <li>define CNUL if not already defined like other variables.
+
+ <li>/dev/tty does exist in Linux, but it doesn't mean, it
+ should be used. Therefore EACCES is now an acceptable
+ result.
+
+ <li>ifdef'd several calls such as <code>ioctl (ptyfd, I_PUSH,
+ "ptem")</code> to build on Linux (I_PUSH is not defined when
+ sys/stropts.h is not included).
+ </ul>
+
+ <li>initialize second "ltc" variable in main.c (reported by David
+ Dawes).
+
+ <li>provide definition for USE_USG_PTYS in screen.c
+
+ <li>add resource-files to install rule in standalone Makefile.in
+
+ <li>add sample scripts to illustrate titlebar controls, resizing
+ and colors.
+</ul>
<H1><A NAME="xterm_93">Patch #93 - 1999/3/14 - XFree86 3.9Pd</A></H1>
Here are several fixes and minor enhancements. The chief ones
Index: xterm.man
--- xterm-93+/xterm.man Sun Mar 14 14:59:36 1999
+++ xterm-94/xterm.man Fri Mar 26 19:03:04 1999
@@ -687,7 +687,8 @@
and
CTRL-F1 to F13, CTRL-F2 to F14, etc.,
so \fIxterm\fP emulates a DEC VT220 more accurately.
-Otherwise (the default), \fIxterm\fP uses PC-style bindings for the function keys and keypad.
+Otherwise (the default, with \fBsunKeyboard\fP set to ``false''),
+\fIxterm\fP uses PC-style bindings for the function keys and keypad.
.TP 8
.B "termName (\fPclass\fB TermName)"
Specifies the terminal type name to be set in the TERM environment variable.
@@ -698,14 +699,35 @@
.TP 8
.B "ttyModes (\fPclass\fB TtyModes)"
Specifies a string containing terminal setting keywords and the characters
-to which they may be bound. Allowable keywords include: intr, quit,
-erase, kill, eof, eol, swtch, start, stop, brk, susp, dsusp, rprnt, flush,
-weras, and lnext. Control characters may be specified as ^char (e.g. ^c or ^u)
-and ^? may be used to indicate Delete.
-Use ^- to denote undef.
+to which they may be bound. Allowable keywords include:
+intr,
+quit,
+erase,
+kill,
+eof,
+eol,
+swtch,
+start,
+stop,
+brk,
+susp,
+dsusp,
+rprnt,
+flush,
+weras,
+lnext and
+status.
+Control characters may be specified as ^char (e.g., ^c or ^u)
+and \fB^?\fP may be used to indicate Delete.
+Use \fB^-\fP to denote undef.
+Use \fB\\034\fP to represent \fB^\\\fP, since a literal backslash in
+an X resource escapes the next character.
+.sp
This is very useful for overriding
the default terminal settings without having to do an \fIstty\fP every time
an \fIxterm\fP is started.
+Note, however, that the stty program on a given host may use different
+keywords; xterm's table is builtin.
.TP 8
.B "useInsertMode (\fPclass\fB UseInsertMode)
Force use of insert mode by adding appropriate entries to the TERMCAP
@@ -1048,8 +1070,11 @@
.TP 8
.B "numLock (\fPclass\fB NumLock)"
If true, xterm checks if NumLock is used as a modifier (see \fIxmodmap\fP(1)).
-If so, this modifier is used to simplify the logic when implementing NumLock
-mode for the \fBsunKeyboard\fP resource.
+If so, this modifier is used to simplify the logic when implementing special
+NumLock for the \fBsunKeyboard\fP resource.
+Also (when \fBsunKeyboard\fP is false), similar logic is used to find the
+modifier associated with the left and right Alt keys.
+The default is ``true.''
.TP 8
.B "oldXtermFKeys (\fPclass\fB OldXtermFKeys)"
If true, xterm will use old-style control sequences for function keys F1 to F4,
@@ -1270,6 +1295,9 @@
.B "backarrow key (\fPclass\fB SmeBSB)"
This entry invokes the \fBset-backarrow(toggle)\fP action.
.TP 8
+.B "num-lock (\fPclass\fB SmeBSB)"
+This entry invokes the \fBset-num-lock(toggle)\fP action.
+.TP 8
.B "sun\ function-keys (\fPclass\fB SmeBSB)"
This entry invokes the \fBsun\ function-keys(toggle)\fP action.
.TP 8
@@ -1954,6 +1982,9 @@
.B "set-marginbell(\fIon/off/toggle\fP)"
This action toggles the \fBmarginBell\fP resource and is also invoked from
the \fBmarginbell\fP entry in \fIvtMenu\fP.
+.TP 8
+.B "set-num-lock()"
+This action toggles the state of the \fBnumLock\fP resource.
.TP 8
.B "set-reverse-video(\fIon/off/toggle\fP)"
This action toggles the \fIreverseVideo\fP resource and is also invoked by