Hi,
The patch below updates xterm to version 378. As always testing
(especially for specific use cases) is welcome.
Apply in /usr/xenocara/app/xterm and rebuild xterm
doas make obj
doas make build
Patch #378 - 2023/01/09
* improve descriptions of XTQMODKEYS and XTQALLOWED features in
ctlseqs.ms (reports by Bram Moolenaar, Thomas Wolff).
* add bracketed+paste and report+version building blocks to terminfo,
from ncurses 6.4
* improve check for unsupported formatting characters, e.g.,
zero-width space, to properly ignore them (report by Thomas Wolff).
* improve/document error-checking for some of the controls which
return responses: DECRQSS, XTGETXRES, XTSETTCAP, XTGETTCAP
(prompted by discussion with David Leadbeater).
* improve limit-checks for fallback font cache (report by Dimitrije
Erdeljan).
* improve check for too-wide glyph in fallback font by allowing
xterm to continue searching for a suitable font rather than just
failing on the first. Also add limitFontWidth to allow changing
the amount by which a glyph must extend outside the font's bounding
box to disallow it.
Patch #377 - 2022/11/25
* add control sequences for reporting the current state of the
modified keys options (XTQMODKEYS) and allowed/disallowed
operations (XTQALLOWED), (prompted by discussion with Bram Moolenaar).
* amend modifyOtherKeys case 2 to distinguish the escape character
with modifiers, e.g., shift-escape, from a plain escape character
(suggested by Bram Moolenaar).
* improve parsing and error-recovery in the case where a list of X11
bitmap fonts is given in the -fn and related options.
* change default for xftTrackMemUsage to false, because libXft does
not handle certain fonts.
Patch #376 - 2022/11/16
* modify configure script to always check for gcc attributes,
* update install-sh.
* fix parsing of result -u in vttests/halves.pl.
* add a note in ctlseqs.ms about compatibility of TBC.
* fix a copy/paste error in manual (patch by Grady Martin).
* add null-pointer checks in x_strcasecmp and x_strncasecmp, to help
with error-recovery for a missing font (Debian #1022942).
Index: COPYING
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/COPYING,v
retrieving revision 1.4
diff -u -p -u -r1.4 COPYING
--- COPYING 25 Apr 2022 19:20:37 -0000 1.4
+++ COPYING 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
---- $XTermId: COPYING,v 1.5 2022/01/30 19:30:32 tom Exp $
+--- $XTermId: COPYING,v 1.6 2023/01/02 15:46:55 tom Exp $
-------------------------------------------------------------------------------
-Copyright 1996-2021,2022 by Thomas E. Dickey
+Copyright 1996-2022,2023 by Thomas E. Dickey
All Rights Reserved
Index: MANIFEST
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/MANIFEST,v
retrieving revision 1.52
diff -u -p -u -r1.52 MANIFEST
--- MANIFEST 9 Nov 2022 21:55:14 -0000 1.52
+++ MANIFEST 28 Jan 2023 17:16:53 -0000
@@ -1,4 +1,4 @@
-MANIFEST for xterm, version xterm-375
+MANIFEST for xterm, version xterm-378
--------------------------------------------------------------------------------
MANIFEST this file
256colres.h resource-definitions for 256-color mode
Index: NEWS
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/NEWS,v
retrieving revision 1.12
diff -u -p -u -r1.12 NEWS
--- NEWS 9 Nov 2022 21:55:15 -0000 1.12
+++ NEWS 28 Jan 2023 17:16:53 -0000
@@ -1,13 +1,22 @@
The NEWS file was generated from xterm.log.html, which serves as the changelog
for xterm.
--------------------------------------------------------------------------------
- Patch #375 - 2022/10/23
+ Patch #378 - 2023/01/09
- * improve error-recovery when setting a bitmap font for the VT100
- window, e.g., in case OSC 50 failed, restoring the most recent
- valid font so that a subsequent OSC 50 reports this correctly
- (report by David Leadbeater).
- * exclude MC_XDG_OPEN from environment variables trimmed on startup
- (report by Gabor Hauzer).
- * check for null pointer in isSelect() (report by Column Paget).
+ * improve descriptions of XTQMODKEYS and XTQALLOWED features in
+ ctlseqs.ms (reports by Bram Moolenaar, Thomas Wolff).
+ * add bracketed+paste and report+version building blocks to terminfo,
+ from ncurses 6.4
+ * improve check for unsupported formatting characters, e.g.,
+ zero-width space, to properly ignore them (report by Thomas Wolff).
+ * improve/document error-checking for some of the controls which
+ return responses: DECRQSS, XTGETXRES, XTSETTCAP, XTGETTCAP
+ (prompted by discussion with David Leadbeater).
+ * improve limit-checks for fallback font cache (report by Dimitrije
+ Erdeljan).
+ * improve check for too-wide glyph in fallback font by allowing xterm
+ to continue searching for a suitable font rather than just failing
+ on the first. Also add limitFontWidth to allow changing the amount
+ by which a glyph must extend outside the font's bounding box to
+ disallow it.
Index: THANKS
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/THANKS,v
retrieving revision 1.19
diff -u -p -u -r1.19 THANKS
--- THANKS 7 Nov 2022 11:15:27 -0000 1.19
+++ THANKS 28 Jan 2023 17:16:53 -0000
@@ -1,4 +1,4 @@
--- $XTermId: THANKS,v 1.35 2022/09/12 21:10:13 tom Exp $
+-- $XTermId: THANKS,v 1.36 2022/11/17 00:49:53 tom Exp $
-- vile:txtmode fk=utf-8
There's no AUTHORS file in this distribution; it would be redundant since
I (Thomas E. Dickey) have done more than 80% of the work on xterm since 1996.
@@ -95,6 +95,7 @@ George Kouryachy
George Nachman
George Peter Staplin
Gertjan Halkes
+Grady Martin
Greg Badros
Greg Klanderman
Greg Smith
Index: VTPrsTbl.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/VTPrsTbl.c,v
retrieving revision 1.18
diff -u -p -u -r1.18 VTPrsTbl.c
--- VTPrsTbl.c 25 Apr 2022 19:20:37 -0000 1.18
+++ VTPrsTbl.c 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: VTPrsTbl.c,v 1.104 2021/12/26 17:50:25 tom Exp $ */
+/* $XTermId: VTPrsTbl.c,v 1.106 2022/11/25 01:19:18 tom Exp $ */
/*
- * Copyright 1999-2020,2021 by Thomas E. Dickey
+ * Copyright 1999-2021,2022 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -3478,7 +3478,7 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* l m n o */
CASE_DECRST,
-CASE_GROUND_STATE,
+CASE_XTERM_REPORT_MOD_FKEYS,
CASE_DSR,
CASE_GROUND_STATE,
/* p q r s */
@@ -3638,7 +3638,7 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* igrave iacute icircumflex idiaeresis */
CASE_DECRST,
-CASE_GROUND_STATE,
+CASE_XTERM_REPORT_MOD_FKEYS,
CASE_DSR,
CASE_GROUND_STATE,
/* eth ntilde ograve oacute */
Index: VTparse.def
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/VTparse.def,v
retrieving revision 1.14
diff -u -p -u -r1.14 VTparse.def
--- VTparse.def 25 Apr 2022 19:20:37 -0000 1.14
+++ VTparse.def 28 Jan 2023 17:16:53 -0000
@@ -1,10 +1,10 @@
-# $XTermId: VTparse.def,v 1.65 2021/12/26 17:49:45 tom Exp $
+# $XTermId: VTparse.def,v 1.66 2022/11/24 13:58:46 tom Exp $
#
# vile:confmode rs=lf
# -----------------------------------------------------------------------------
# this file is part of xterm
#
-# Copyright 1996-2020,2021 by Thomas E. Dickey
+# Copyright 1996-2021,2022 by Thomas E. Dickey
#
# All Rights Reserved
#
@@ -220,3 +220,4 @@ CASE_XTERM_POP_COLORS # XTPOPCOLORS
CASE_XTERM_SHIFT_ESCAPE # XTSHIFTESCAPE
CASE_DECSSDT
CASE_DECSASD
+CASE_XTERM_REPORT_MOD_FKEYS # XTQMODKEYS
Index: button.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/button.c,v
retrieving revision 1.46
diff -u -p -u -r1.46 button.c
--- button.c 9 Nov 2022 21:55:15 -0000 1.46
+++ button.c 28 Jan 2023 17:16:53 -0000
@@ -1,4 +1,4 @@
-/* $XTermId: button.c,v 1.645 2022/10/23 22:59:52 tom Exp $ */
+/* $XTermId: button.c,v 1.646 2022/11/25 00:26:32 tom Exp $ */
/*
* Copyright 1999-2021,2022 by Thomas E. Dickey
@@ -2555,7 +2555,7 @@ removeControls(XtermWidget xw, char *val
int ch = CharOf(value[src++]);
#define ReplacePaste(n) \
- if (screen->disallow_paste_controls[n]) \
+ if (screen->disallow_paste_ops[n]) \
value[dst] = ' '
if (ch < 32) {
Index: charclass.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/charclass.c,v
retrieving revision 1.9
diff -u -p -u -r1.9 charclass.c
--- charclass.c 7 Nov 2022 11:15:27 -0000 1.9
+++ charclass.c 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: charclass.c,v 1.45 2022/09/23 23:28:44 tom Exp $ */
+/* $XTermId: charclass.c,v 1.46 2023/01/04 09:26:46 tom Exp $ */
/*
- * Copyright 2002-2021,2022 by Thomas E. Dickey
+ * Copyright 2002-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -77,20 +77,6 @@ static struct classentry {
int first;
int last;
} *classtab;
-
-typedef enum {
- IDENT = -1,
- OTHER = 0,
- CNTRL = 1,
- ALNUM = 48,
- BLANK = 32,
- U_CJK = 0x4e00,
- U_SUP = 0x2070,
- U_SUB = 0x2080,
- U_HIR = 0x3040,
- U_KAT = 0x30a0,
- U_HAN = 0xac00
-} Classes;
#ifdef TEST_DRIVER
static int opt_all;
Index: charclass.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/charclass.h,v
retrieving revision 1.3
diff -u -p -u -r1.3 charclass.h
--- charclass.h 10 Jan 2021 09:23:57 -0000 1.3
+++ charclass.h 28 Jan 2023 17:16:53 -0000
@@ -1,9 +1,53 @@
-/* $XTermId: charclass.h,v 1.8 2020/01/18 18:29:41 tom Exp $ */
+/* $XTermId: charclass.h,v 1.9 2023/01/04 09:28:05 tom Exp $ */
/* $XFree86: xc/programs/xterm/charclass.h,v 1.3 2006/02/13 01:14:58 dickey
Exp $ */
+/*
+ * Copyright 2006-2020,2023 by Thomas E. Dickey
+ *
+ * All Rights Reserved
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name(s) of the above copyright
+ * holders shall not be used in advertising or otherwise to promote the
+ * sale, use or other dealings in this Software without prior written
+ * authorization.
+ */
+
#ifndef CHARCLASS_H
#define CHARCLASS_H
+
+typedef enum {
+ IDENT = -1,
+ OTHER = 0,
+ CNTRL = 1,
+ ALNUM = 48,
+ BLANK = 32,
+ U_CJK = 0x4e00,
+ U_SUP = 0x2070,
+ U_SUB = 0x2080,
+ U_HIR = 0x3040,
+ U_KAT = 0x30a0,
+ U_HAN = 0xac00
+} Classes;
extern void init_classtab(void);
/* initialise the table. needs calling before either of the
Index: charproc.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/charproc.c,v
retrieving revision 1.55
diff -u -p -u -r1.55 charproc.c
--- charproc.c 10 Nov 2022 18:19:23 -0000 1.55
+++ charproc.c 28 Jan 2023 17:17:24 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: charproc.c,v 1.1908 2022/10/23 20:34:18 tom Exp $ */
+/* $XTermId: charproc.c,v 1.1924 2023/01/09 00:26:45 tom Exp $ */
/*
- * Copyright 1999-2021,2022 by Thomas E. Dickey
+ * Copyright 1999-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -538,7 +538,7 @@ static XtResource xterm_resources[] =
Sres(XtNdisallowedMouseOps, XtCDisallowedMouseOps,
screen.disallowedMouseOps, DEF_DISALLOWED_MOUSE),
Sres(XtNdisallowedPasteControls, XtCDisallowedPasteControls,
- screen.disallowedPasteControls, DEF_DISALLOWED_PASTE_CONTROLS),
+ screen.disallowedPasteOps, DEF_DISALLOWED_PASTE_CONTROLS),
Sres(XtNdisallowedTcapOps, XtCDisallowedTcapOps,
screen.disallowedTcapOps, DEF_DISALLOWED_TCAP),
Sres(XtNdisallowedWindowOps, XtCDisallowedWindowOps,
@@ -838,6 +838,7 @@ static XtResource xterm_resources[] =
Sres(XtNfaceName, XtCFaceName, misc.default_xft.f_n, DEFFACENAME),
Sres(XtNrenderFont, XtCRenderFont, misc.render_font_s, "default"),
Ires(XtNlimitFontsets, XtCLimitFontsets, misc.limit_fontsets,
DEF_XFT_CACHE),
+ Ires(XtNlimitFontWidth, XtCLimitFontWidth, misc.limit_fontwidth, 10),
#if OPT_RENDERWIDE
Sres(XtNfaceNameDoublesize, XtCFaceNameDoublesize, misc.default_xft.f_w,
DEFFACENAME),
#endif
@@ -1381,40 +1382,6 @@ set_max_row(TScreen *screen, int rows)
screen->max_row = rows;
}
-#if OPT_MOD_FKEYS
-static void
-set_mod_fkeys(XtermWidget xw, int which, int what, Bool enabled)
-{
-#define SET_MOD_FKEYS(field) \
- xw->keyboard.modify_now.field = ((what == DEFAULT) && enabled) \
- ? xw->keyboard.modify_1st.field \
- : what; \
- TRACE(("set modify_now.%s to %d\n", #field, \
- xw->keyboard.modify_now.field));
-
- switch (which) {
- case 0:
- SET_MOD_FKEYS(allow_keys);
- break;
- case 1:
- SET_MOD_FKEYS(cursor_keys);
- break;
- case 2:
- SET_MOD_FKEYS(function_keys);
- break;
- case 3:
- SET_MOD_FKEYS(keypad_keys);
- break;
- case 4:
- SET_MOD_FKEYS(other_keys);
- break;
- case 5:
- SET_MOD_FKEYS(string_keys);
- break;
- }
-}
-#endif /* OPT_MOD_FKEYS */
-
#if OPT_TRACE
#define DATA(name) { name, #name }
static const struct {
@@ -2276,6 +2243,75 @@ deferparsing(unsigned c, struct ParseSta
sp->defer_area[(sp->defer_used)++] = CharOf(c);
}
+#if OPT_MOD_FKEYS
+static void
+set_mod_fkeys(XtermWidget xw, int which, int what, Bool enabled)
+{
+#define SET_MOD_FKEYS(field) \
+ xw->keyboard.modify_now.field = ((what == DEFAULT) && enabled) \
+ ? xw->keyboard.modify_1st.field \
+ : what; \
+ TRACE(("set modify_now.%s to %d\n", #field, \
+ xw->keyboard.modify_now.field));
+
+ switch (which) {
+ case 0:
+ SET_MOD_FKEYS(allow_keys);
+ break;
+ case 1:
+ SET_MOD_FKEYS(cursor_keys);
+ break;
+ case 2:
+ SET_MOD_FKEYS(function_keys);
+ break;
+ case 3:
+ SET_MOD_FKEYS(keypad_keys);
+ break;
+ case 4:
+ SET_MOD_FKEYS(other_keys);
+ break;
+ case 5:
+ SET_MOD_FKEYS(string_keys);
+ break;
+ }
+}
+
+static void
+report_mod_fkeys(XtermWidget xw, int which) /* XTQMODKEYS */
+{
+#define GET_MOD_FKEYS(field) \
+ reply.a_param[1] = (ParmType) xw->keyboard.modify_now.field
+
+ init_reply(ANSI_CSI);
+ reply.a_pintro = '>'; /* replies look like a set-mode */
+ reply.a_nparam = 2;
+ reply.a_final = 'm';
+
+ reply.a_param[1] = DEFAULT;
+ switch (reply.a_param[0] = (ParmType) which) {
+ case 0:
+ GET_MOD_FKEYS(allow_keys);
+ break;
+ case 1:
+ GET_MOD_FKEYS(cursor_keys);
+ break;
+ case 2:
+ GET_MOD_FKEYS(function_keys);
+ break;
+ case 3:
+ GET_MOD_FKEYS(keypad_keys);
+ break;
+ case 4:
+ GET_MOD_FKEYS(other_keys);
+ break;
+ case 5:
+ GET_MOD_FKEYS(string_keys);
+ break;
+ }
+ unparseseq(xw, &reply);
+}
+#endif /* OPT_MOD_FKEYS */
+
#if OPT_STATUS_LINE
typedef enum {
SLnone = 0, /* no status-line timer needed */
@@ -2792,6 +2828,7 @@ doparsing(XtermWidget xw, unsigned c, st
do {
#if OPT_WIDE_CHARS
int this_is_wide = 0;
+ int is_formatter = 0;
/*
* Handle zero-width combining characters. Make it faster by noting
@@ -2802,7 +2839,7 @@ doparsing(XtermWidget xw, unsigned c, st
if (c >= 0x300
&& screen->wide_chars
&& CharWidth(screen, c) == 0
- && !isWideControl(c)) {
+ && !(is_formatter = (CharacterClass((int) c) == CNTRL))) {
int prev, test;
Boolean used = True;
int use_row;
@@ -2907,7 +2944,7 @@ doparsing(XtermWidget xw, unsigned c, st
* printing characters.
*/
if (sp->parsestate == sp->groundtable) {
- sp->nextstate = CASE_PRINT;
+ sp->nextstate = is_formatter ? CASE_IGNORE : CASE_PRINT;
} else if (sp->parsestate == sos_table) {
c &= WIDEST_ICHAR;
if (c > 255) {
@@ -3637,7 +3674,6 @@ doparsing(XtermWidget xw, unsigned c, st
#endif
}
reply.a_nparam = (ParmType) count;
- reply.a_inters = 0;
reply.a_final = 'c';
unparseseq(xw, &reply);
}
@@ -3695,7 +3731,6 @@ doparsing(XtermWidget xw, unsigned c, st
reply.a_param[count++] = XTERM_PATCH; /* Version */
reply.a_param[count++] = 0; /* options (none) */
reply.a_nparam = (ParmType) count;
- reply.a_inters = 0;
reply.a_final = 'c';
unparseseq(xw, &reply);
}
@@ -4029,7 +4064,6 @@ doparsing(XtermWidget xw, unsigned c, st
count = 0;
init_reply(ANSI_CSI);
reply.a_pintro = CharOf(sp->private_function ? '?' : 0);
- reply.a_inters = 0;
reply.a_final = 'n';
switch (GetParam(0)) {
@@ -4224,7 +4258,6 @@ doparsing(XtermWidget xw, unsigned c, st
value = zero_if_default(0);
if (value == 0 || value == 1) {
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 7;
reply.a_param[0] = (ParmType) (value + 2);
reply.a_param[1] = 1; /* no parity */
@@ -4233,7 +4266,6 @@ doparsing(XtermWidget xw, unsigned c, st
reply.a_param[4] = 128; /* receive 38.4k baud */
reply.a_param[5] = 1; /* clock multiplier ? */
reply.a_param[6] = 0; /* STP flags ? */
- reply.a_inters = 0;
reply.a_final = 'x';
unparseseq(xw, &reply);
}
@@ -4702,7 +4734,6 @@ doparsing(XtermWidget xw, unsigned c, st
reply.a_param[count++] = (ParmType) result2;
}
reply.a_nparam = (ParmType) count;
- reply.a_inters = 0;
reply.a_final = 'S';
unparseseq(xw, &reply);
}
@@ -5577,6 +5608,14 @@ doparsing(XtermWidget xw, unsigned c, st
}
ResetState(sp);
break;
+
+ case CASE_XTERM_REPORT_MOD_FKEYS:
+ TRACE(("CASE_XTERM_REPORT_MOD_FKEYS\n"));
+ for (value = 0; value < nparam; ++value) {
+ report_mod_fkeys(xw, GetParam(value));
+ }
+ ResetState(sp);
+ break;
#endif
case CASE_HIDE_POINTER:
TRACE(("CASE_HIDE_POINTER\n"));
@@ -8156,10 +8195,8 @@ window_ops(XtermWidget xw)
if (AllowWindowOps(xw, ewGetWinState)) {
TRACE(("...get window attributes\n"));
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 1;
reply.a_param[0] = (ParmType) (xtermIsIconified(xw) ? 2 : 1);
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -8173,7 +8210,6 @@ window_ops(XtermWidget xw)
TRACE(("...get window position\n"));
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 3;
switch (zero_if_default(1)) {
@@ -8215,7 +8251,6 @@ window_ops(XtermWidget xw)
}
reply.a_param[1] = (ParmType) result_x;
reply.a_param[2] = (ParmType) result_y;
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -8228,7 +8263,6 @@ window_ops(XtermWidget xw)
TRACE(("...get window size in pixels\n"));
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 4;
switch (zero_if_default(1)) {
@@ -8244,7 +8278,6 @@ window_ops(XtermWidget xw)
reply.a_param[2] = wide;
break;
}
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -8256,12 +8289,10 @@ window_ops(XtermWidget xw)
TRACE(("...get screen size in pixels\n"));
(void) QueryMaximize(xw, &root_width, &root_height);
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 5;
reply.a_param[1] = (ParmType) root_height;
reply.a_param[2] = (ParmType) root_width;
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -8273,12 +8304,10 @@ window_ops(XtermWidget xw)
FontHeight(screen),
FontWidth(screen)));
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 6;
reply.a_param[1] = (ParmType) FontHeight(screen);
reply.a_param[2] = (ParmType) FontWidth(screen);
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -8289,12 +8318,10 @@ window_ops(XtermWidget xw)
if (AllowWindowOps(xw, ewGetWinSizeChars)) {
TRACE(("...get window size in characters\n"));
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 8;
reply.a_param[1] = (ParmType) MaxRows(screen);
reply.a_param[2] = (ParmType) MaxCols(screen);
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -8309,14 +8336,12 @@ window_ops(XtermWidget xw)
FontWidth(screen)));
(void) QueryMaximize(xw, &root_width, &root_height);
init_reply(ANSI_CSI);
- reply.a_pintro = 0;
reply.a_nparam = 3;
reply.a_param[0] = 9;
reply.a_param[1] = (ParmType) (root_height
/ (unsigned) FontHeight(screen));
reply.a_param[2] = (ParmType) (root_width
/ (unsigned) FontWidth(screen));
- reply.a_inters = 0;
reply.a_final = 't';
unparseseq(xw, &reply);
}
@@ -9555,160 +9580,211 @@ limitedTerminalID(int terminal_id)
return terminal_id;
}
-/* ARGSUSED */
-static void
-VTInitialize(Widget wrequest,
- Widget new_arg,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
-#define Kolor(name) TScreenOf(wnew)->name.resource
-#define TxtFg(name) !x_strcasecmp(Kolor(Tcolors[TEXT_FG]), Kolor(name))
-#define TxtBg(name) !x_strcasecmp(Kolor(Tcolors[TEXT_BG]), Kolor(name))
-#define DftFg(name) isDefaultForeground(Kolor(name))
-#define DftBg(name) isDefaultBackground(Kolor(name))
-
#define DATA_END { NULL, -1 }
-#if OPT_BLINK_CURS
-#define DATA(name) { #name, cb##name }
- static const FlagList tblBlinkOps[] =
- {
- DATA(Always)
- ,DATA(Never)
- ,DATA_END
- };
-#undef DATA
-#endif
-
#define DATA(name) { #name, ec##name }
- static const FlagList tblColorOps[] =
- {
- DATA(SetColor)
- ,DATA(GetColor)
- ,DATA(GetAnsiColor)
- ,DATA_END
- };
+static const FlagList tblColorOps[] =
+{
+ DATA(SetColor)
+ ,DATA(GetColor)
+ ,DATA(GetAnsiColor)
+ ,DATA_END
+};
#undef DATA
#define DATA(name) { #name, ef##name }
- static const FlagList tblFontOps[] =
- {
- DATA(SetFont)
- ,DATA(GetFont)
- ,DATA_END
- };
+static const FlagList tblFontOps[] =
+{
+ DATA(SetFont)
+ ,DATA(GetFont)
+ ,DATA_END
+};
#undef DATA
#define DATA(name) { #name, em##name }
- static const FlagList tblMouseOps[] =
- {
- DATA(X10)
- ,DATA(Locator)
- ,DATA(VT200Click)
- ,DATA(VT200Hilite)
- ,DATA(AnyButton)
- ,DATA(AnyEvent)
- ,DATA(FocusEvent)
- ,DATA(Extended)
- ,DATA(SGR)
- ,DATA(URXVT)
- ,DATA(AlternateScroll)
- ,DATA_END
- };
+static const FlagList tblMouseOps[] =
+{
+ DATA(X10)
+ ,DATA(Locator)
+ ,DATA(VT200Click)
+ ,DATA(VT200Hilite)
+ ,DATA(AnyButton)
+ ,DATA(AnyEvent)
+ ,DATA(FocusEvent)
+ ,DATA(Extended)
+ ,DATA(SGR)
+ ,DATA(URXVT)
+ ,DATA(AlternateScroll)
+ ,DATA_END
+};
#undef DATA
#define DATA(name) { #name, ep##name }
#define DATA2(alias,name) { #alias, ep##name }
- static const FlagList tblPasteControls[] =
- {
- DATA(NUL)
- ,DATA(SOH)
- ,DATA(STX)
- ,DATA(ETX)
- ,DATA(EOT)
- ,DATA(ENQ)
- ,DATA(ACK)
- ,DATA(BEL)
- ,DATA(BS)
- ,DATA(HT)
- ,DATA(LF)
- ,DATA(VT)
- ,DATA(FF)
- ,DATA(CR)
- ,DATA(SO)
- ,DATA(SI)
- ,DATA(DLE)
- ,DATA(DC1)
- ,DATA(DC2)
- ,DATA(DC3)
- ,DATA(DC4)
- ,DATA(NAK)
- ,DATA(SYN)
- ,DATA(ETB)
- ,DATA(CAN)
- ,DATA(EM)
- ,DATA(SUB)
- ,DATA(ESC)
- ,DATA(FS)
- ,DATA(GS)
- ,DATA(RS)
- ,DATA(US)
- /* aliases */
- ,DATA2(NL, LF)
- ,DATA(C0)
- ,DATA(DEL)
- ,DATA_END
- };
+static const FlagList tblPasteOps[] =
+{
+ DATA(NUL)
+ ,DATA(SOH)
+ ,DATA(STX)
+ ,DATA(ETX)
+ ,DATA(EOT)
+ ,DATA(ENQ)
+ ,DATA(ACK)
+ ,DATA(BEL)
+ ,DATA(BS)
+ ,DATA(HT)
+ ,DATA(LF)
+ ,DATA(VT)
+ ,DATA(FF)
+ ,DATA(CR)
+ ,DATA(SO)
+ ,DATA(SI)
+ ,DATA(DLE)
+ ,DATA(DC1)
+ ,DATA(DC2)
+ ,DATA(DC3)
+ ,DATA(DC4)
+ ,DATA(NAK)
+ ,DATA(SYN)
+ ,DATA(ETB)
+ ,DATA(CAN)
+ ,DATA(EM)
+ ,DATA(SUB)
+ ,DATA(ESC)
+ ,DATA(FS)
+ ,DATA(GS)
+ ,DATA(RS)
+ ,DATA(US)
+/* aliases */
+ ,DATA2(NL, LF)
+ ,DATA(C0)
+ ,DATA(DEL)
+ ,DATA_END
+};
#undef DATA
#undef DATA2
#define DATA(name) { #name, et##name }
- static const FlagList tblTcapOps[] =
- {
- DATA(SetTcap)
- ,DATA(GetTcap)
- ,DATA_END
- };
+static const FlagList tblTcapOps[] =
+{
+ DATA(SetTcap)
+ ,DATA(GetTcap)
+ ,DATA_END
+};
#undef DATA
#define DATA(name) { #name, ew##name }
- static const FlagList tblWindowOps[] =
- {
- DATA(RestoreWin)
- ,DATA(MinimizeWin)
- ,DATA(SetWinPosition)
- ,DATA(SetWinSizePixels)
- ,DATA(RaiseWin)
- ,DATA(LowerWin)
- ,DATA(RefreshWin)
- ,DATA(SetWinSizeChars)
+static const FlagList tblWindowOps[] =
+{
+ DATA(RestoreWin)
+ ,DATA(MinimizeWin)
+ ,DATA(SetWinPosition)
+ ,DATA(SetWinSizePixels)
+ ,DATA(RaiseWin)
+ ,DATA(LowerWin)
+ ,DATA(RefreshWin)
+ ,DATA(SetWinSizeChars)
#if OPT_MAXIMIZE
- ,DATA(MaximizeWin)
- ,DATA(FullscreenWin)
+ ,DATA(MaximizeWin)
+ ,DATA(FullscreenWin)
#endif
- ,DATA(GetWinState)
- ,DATA(GetWinPosition)
- ,DATA(GetWinSizePixels)
- ,DATA(GetWinSizeChars)
+ ,DATA(GetWinState)
+ ,DATA(GetWinPosition)
+ ,DATA(GetWinSizePixels)
+ ,DATA(GetWinSizeChars)
#if OPT_MAXIMIZE
- ,DATA(GetScreenSizeChars)
+ ,DATA(GetScreenSizeChars)
#endif
- ,DATA(GetIconTitle)
- ,DATA(GetWinTitle)
- ,DATA(PushTitle)
- ,DATA(PopTitle)
- /* this item uses all remaining numbers in the sequence */
- ,DATA(SetWinLines)
- /* starting at this point, numbers do not apply */
- ,DATA(SetXprop)
- ,DATA(GetSelection)
- ,DATA(SetSelection)
- ,DATA(GetChecksum)
- ,DATA(SetChecksum)
+ ,DATA(GetIconTitle)
+ ,DATA(GetWinTitle)
+ ,DATA(PushTitle)
+ ,DATA(PopTitle)
+/* this item uses all remaining numbers in the sequence */
+ ,DATA(SetWinLines)
+/* starting at this point, numbers do not apply */
+ ,DATA(SetXprop)
+ ,DATA(GetSelection)
+ ,DATA(SetSelection)
+ ,DATA(GetChecksum)
+ ,DATA(SetChecksum)
+ ,DATA_END
+};
+#undef DATA
+
+void
+unparse_disallowed_ops(XtermWidget xw, char *value)
+{
+ TScreen *screen = TScreenOf(xw);
+#define DATA(mixed, plain, flags) { #mixed, offsetof(TScreen, plain),
sizeof(screen->plain), flags }
+ /* *INDENT-OFF* */
+ static const struct {
+ const char * name;
+ size_t offset;
+ size_t length;
+ const FlagList *codes;
+ } table[] = {
+ DATA(allowColorOps, disallow_color_ops, tblColorOps),
+ DATA(allowFontOps, disallow_font_ops, tblFontOps),
+ DATA(allowMouseOps, disallow_mouse_ops, tblMouseOps),
+ DATA(allowPasteControls, disallow_paste_ops, tblPasteOps),
+ DATA(allowTcapOps, disallow_tcap_ops, tblTcapOps),
+ DATA(allowWinOps, disallow_win_ops, tblWindowOps),
+ };
+ /* *INDENT-ON* */
+#undef DATA
+ Cardinal j, k, jk;
+ char delim = ';';
+
+ for (j = 0; j < XtNumber(table); ++j) {
+ if (!x_strcasecmp(value, table[j].name)) {
+ const char *flags = (char *) screen + table[j].offset;
+
+ for (k = 0; k < table[j].length; ++k) {
+ if (flags[k]) {
+ const FlagList *codes = table[j].codes;
+ Boolean found = False;
+
+ unparseputc(xw, delim);
+ for (jk = 0; codes[jk].name; ++jk) {
+ if (codes[jk].code == (int) k) {
+ unparseputs(xw, codes[jk].name);
+ found = True;
+ break;
+ }
+ }
+ if (!found)
+ unparseputn(xw, k);
+ delim = ',';
+ }
+ }
+ break;
+ }
+ }
+}
+
+/* ARGSUSED */
+static void
+VTInitialize(Widget wrequest,
+ Widget new_arg,
+ ArgList args GCC_UNUSED,
+ Cardinal *num_args GCC_UNUSED)
+{
+#define Kolor(name) TScreenOf(wnew)->name.resource
+#define TxtFg(name) !x_strcasecmp(Kolor(Tcolors[TEXT_FG]), Kolor(name))
+#define TxtBg(name) !x_strcasecmp(Kolor(Tcolors[TEXT_BG]), Kolor(name))
+#define DftFg(name) isDefaultForeground(Kolor(name))
+#define DftBg(name) isDefaultBackground(Kolor(name))
+
+#if OPT_BLINK_CURS
+#define DATA(name) { #name, cb##name }
+ static const FlagList tblBlinkOps[] =
+ {
+ DATA(Always)
+ ,DATA(Never)
,DATA_END
};
#undef DATA
+#endif
#if OPT_RENDERFONT
#define DATA(name) { #name, er##name }
@@ -10123,11 +10199,11 @@ VTInitialize(Widget wrequest,
screen->disallowedMouseOps,
tblMouseOps);
- init_Sres(screen.disallowedPasteControls);
+ init_Sres(screen.disallowedPasteOps);
- set_flags_from_list(screen->disallow_paste_controls,
- screen->disallowedPasteControls,
- tblPasteControls);
+ set_flags_from_list(screen->disallow_paste_ops,
+ screen->disallowedPasteOps,
+ tblPasteOps);
init_Sres(screen.disallowedTcapOps);
@@ -10480,6 +10556,12 @@ VTInitialize(Widget wrequest,
#if OPT_RENDERFONT
init_Ires(misc.limit_fontsets);
+ init_Ires(misc.limit_fontwidth);
+ if (wnew->misc.limit_fontwidth > 50) {
+ xtermWarning("limiting extra fontwidth percent to 50 (was %u)\n",
+ wnew->misc.limit_fontwidth);
+ wnew->misc.limit_fontwidth = 50;
+ }
wnew->work.max_fontsets = (unsigned) wnew->misc.limit_fontsets;
if (wnew->work.max_fontsets > 255) {
xtermWarning("limiting number of fontsets to 255 (was %u)\n",
@@ -11148,7 +11230,7 @@ VTDestroy(Widget w GCC_UNUSED)
TRACE_FREE_LEAK(screen->disallowedColorOps);
TRACE_FREE_LEAK(screen->disallowedFontOps);
TRACE_FREE_LEAK(screen->disallowedMouseOps);
- TRACE_FREE_LEAK(screen->disallowedPasteControls);
+ TRACE_FREE_LEAK(screen->disallowedPasteOps);
TRACE_FREE_LEAK(screen->disallowedTcapOps);
TRACE_FREE_LEAK(screen->disallowedWinOps);
TRACE_FREE_LEAK(screen->default_string);
@@ -12318,8 +12400,8 @@ VTSetValues(Widget cur,
T_COLOR(TScreenOf(newvt), TEXT_FG)) ||
(TScreenOf(curvt)->MenuFontName(TScreenOf(curvt)->menu_font_number) !=
TScreenOf(newvt)->MenuFontName(TScreenOf(newvt)->menu_font_number)) ||
- strcmp(DefaultFontN(curvt), DefaultFontN(newvt))) {
- if (strcmp(DefaultFontN(curvt), DefaultFontN(newvt))) {
+ strcmp(NonNull(DefaultFontN(curvt)), NonNull(DefaultFontN(newvt)))) {
+ if (strcmp(NonNull(DefaultFontN(curvt)), NonNull(DefaultFontN(newvt))))
{
TScreenOf(newvt)->MenuFontName(fontMenu_default) =
DefaultFontN(newvt);
}
if (xtermLoadFont(newvt,
@@ -12328,7 +12410,7 @@ VTSetValues(Widget cur,
/* resizing does the redisplay, so don't ask for it here */
refresh_needed = True;
fonts_redone = True;
- } else if (strcmp(DefaultFontN(curvt), DefaultFontN(newvt))) {
+ } else if (strcmp(NonNull(DefaultFontN(curvt)),
NonNull(DefaultFontN(newvt)))) {
TScreenOf(newvt)->MenuFontName(fontMenu_default) =
DefaultFontN(curvt);
}
}
Index: configure.in
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/configure.in,v
retrieving revision 1.37
diff -u -p -u -r1.37 configure.in
--- configure.in 7 Nov 2022 11:15:27 -0000 1.37
+++ configure.in 28 Jan 2023 17:16:53 -0000
@@ -1,9 +1,9 @@
-dnl $XTermId: configure.in,v 1.390 2022/10/10 16:33:01 tom Exp $
+dnl $XTermId: configure.in,v 1.392 2023/01/08 11:41:52 tom Exp $
dnl
dnl
-----------------------------------------------------------------------------
dnl this file is part of xterm
dnl
-dnl Copyright 1997-2021,2022 by Thomas E. Dickey
+dnl Copyright 1997-2022,2023 by Thomas E. Dickey
dnl
dnl All Rights Reserved
dnl
@@ -65,14 +65,14 @@ CF_XOPEN_SOURCE(700)
CF_SIGWINCH
### checks for header files
+AC_CHECK_DECL(exit)
AC_CHECK_HEADERS( \
ncurses/curses.h \
ncurses/term.h \
-stdlib.h \
-sys/ptem.h sys/ttydefaults.h \
+sys/ptem.h \
+sys/ttydefaults.h \
term.h \
termios.h \
-unistd.h \
wchar.h \
)
AC_HEADER_TIME
@@ -1152,7 +1152,7 @@ if test -n "$cf_cv_lib_part_tgetent"; th
AC_CHECK_FUNCS(use_extended_names)
fi
-CF_ENABLE_WARNINGS(Wdeclaration-after-statement Wextra Wno-unknown-pragmas
Wswitch-enum Wno-cast-qual)
+CF_ENABLE_WARNINGS(Wdeclaration-after-statement Wextra Wno-unknown-pragmas
Wswitch-enum Wno-cast-qual,yes)
AC_SUBST(EXTRA_CFLAGS)
AC_SUBST(CHARPROC_DEPS)
Index: ctlseqs.ms
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/ctlseqs.ms,v
retrieving revision 1.35
diff -u -p -u -r1.35 ctlseqs.ms
--- ctlseqs.ms 7 Nov 2022 11:15:27 -0000 1.35
+++ ctlseqs.ms 28 Jan 2023 17:16:53 -0000
@@ -1,9 +1,9 @@
.\"#! troff -ms $1 -*- Nroff -*-
-.\" "Xterm Control Sequences" document
-.\" $XTermId: ctlseqs.ms,v 1.641 2022/10/10 14:18:26 tom Exp $
+.\" "XTerm Control Sequences" document
+.\" $XTermId: ctlseqs.ms,v 1.666 2023/01/07 01:30:20 tom Exp $
.\"
.\"
-.\" Copyright 1996-2021,2022 by Thomas E. Dickey
+.\" Copyright 1996-2022,2023 by Thomas E. Dickey
.\"
.\" All Rights Reserved
.\"
@@ -69,8 +69,8 @@
.\"
.ds XT XTerm
.ds xt xterm
-.ds LF Patch #374
-.ds RF 2022/10/10
+.ds LF Patch #378
+.ds RF 2023/01/06
.\"
.if n .pl 9999v \" no page breaks in nroff
.ND
@@ -346,7 +346,7 @@ X Consortium (1994)
Thomas Dickey
.AI
XFree86 Project (1996-2006)
-invisible-island.net (2006-2022)
+invisible-island.net (2006-2023)
updated for \*(XT \*(LF (\*(RF)
.AU
.
@@ -886,7 +886,7 @@ The string following the \*(``q\*('' is
for valid requests, replacing the \*(Pt with the corresponding \*(Cs
string,
or
-\*(Dc\*0\*$\*r\*(Pt\*s\*(ST
+\*(Dc\*0\*$\*r\*s\*(ST
for invalid requests.
.iP
.IP \\*(Dc\\*(Ps\\*s\\*$\\*t\\*(Pt\\*s\\*(ST
@@ -903,27 +903,43 @@ The string following the \*(``Q\*('' is
encoded in hexadecimal (2 digits per character)
separated by \*;
which correspond to \fI\*(xt\fP resource names.
-Only boolean, numeric and string resources are supported by this query.
.sP
\fI\*(xt\fP responds with
.br
\*(Dc\*1\*+\*R\*(Pt\*s\*(ST
for valid requests, adding to \*(Pt an \*=,
-and the value of the corresponding resource that \fI\*(xt\fP is using,
+and the value of the corresponding \fI\*(xt\fP resource,
or
.br
\*(Dc\*0\*+\*R\*(Pt\*s\*(ST
for invalid requests.
.br
The strings are encoded in hexadecimal (2 digits per character).
+.sP
+Only boolean, numeric and string resources for the VT100 widget
+are supported by this query.
+\fI\*(XT\fP evaluates resources at startup time.
+Several of \fI\*(xt\fP's state variables
+use resources to determine their initial value.
+Because the resource variable may not reflect the current state,
+\fI\*(xt\fP provides control sequences for querying the state directly:
+.RS
+.iP
+.bP
+XTQALLOWED
+.bP
+XTQMODKEYS
+.RE
.Ed
.
.iP
.IP \\*(Dc\\*+\\*p\\*(Pt\\*s\\*(ST
Set Termcap/Terminfo Data (XTSETTCAP), \fI\*(xt\fP.
-The string following the \*(``p\*('' is a name to use for retrieving data from
-the terminal database.
-The data will be used for the \*(``tcap\*('' keyboard
+The string following the \*(``p\*('' is encoded in hexadecimal.
+After decoding it, \fI\*(xt\fP will use the name to
+retrieve data from the terminal database.
+If successful, that overrides the \fBtermName\fP resource when
+handling the \*(``tcap\*('' keyboard
configuration's function- and special-keys, as well as by the
Request Termcap/Terminfo String control.
.
@@ -956,10 +972,14 @@ for valid requests, adding to \*(Pt an \
and the value of the corresponding string that \fI\*(xt\fP would send,
or
.br
-\*(Dc\*0\*+\*r\*(Pt\*s\*(ST
+\*(Dc\*0\*+\*r\*(ST
for invalid requests.
.br
The strings are encoded in hexadecimal (2 digits per character).
+If more than one name is given, \fI\*(xt\fP replies with each
+name/value pair in the same response.
+An invalid name (one not found in \fI\*(xt\fP's tables)
+ends processing of the list of names.
.Ed
.\"
.Ss Functions using \*(Cs, ordered by the final character(s)
@@ -1287,6 +1307,10 @@ Horizontal and Vertical Position [row;co
.iP
.IP \\*(Cs\\*(Ps\\*s\\*g
Tab Clear (TBC).
+ECMA-48 defines additional codes,
+but the VT100 user manual notes that it
+ignores other codes.
+DEC's later terminals (and \fI\*(xt\fP) do the same, for compatibility.
\*(Ps = \*0 \(-> Clear Current Column (default).
\*(Ps = \*3 \(-> Clear All.
.
@@ -1341,7 +1365,7 @@ This may be disabled by the \fBtiteInhib
\*(Ps = \*6\*7 \(-> Backarrow key sends backspace (DECBKM), VT340, VT420.
This sets the \fBbackarrowKey\fP resource to \*(``true\*(''.
\*(Ps = \*6\*9 \(-> Enable left and right margin mode (DECLRMM), VT420 and
up.
- \*(Ps = \*8\*0 \(-> Enable \fISixel Display Mode\fP (DECSDM), VT330, VT340,
VT382.
+ \*(Ps = \*8\*0 \(-> Enable \fISixel Display Mode\fP (DECSDM), VT330, VT340,
VT382.
\*(Ps = \*9\*5 \(-> Do not clear screen when DECCOLM is set/reset
(DECNCSM), VT510 and up.
\*(Ps = \*1\*0\*0\*0 \(-> Send Mouse X & Y on button press and release.
@@ -1477,7 +1501,7 @@ This sets the \fBbackarrowKey\fP resourc
\*(Ps = \*6\*9 \(-> Disable left and right margin mode (DECLRMM),
VT420 and up.
\*(Ps = \*8\*0 \(-> Disable \fISixel Display Mode\fP (DECSDM), VT330, VT340,
VT382.
-Turns on ``Sixel Scrolling''.
+Turns on \*(``Sixel Scrolling\*(''.
See the section \fBSixel Graphics\fP and mode \*8\*4\*5\*2.
\*(Ps = \*9\*5 \(-> Clear screen when DECCOLM is set/reset (DECNCSM),
VT510 and up.
@@ -1731,6 +1755,31 @@ Values \*3 and \*5 are reserved for keyp
If no parameters are given, all resources are reset to their initial values.
.
.iP
+.IP \\*(Cs\\*?\\*(Pp\\*s\\*m
+Query key modifier options (XTQMODKEYS), \fI\*(xt\fP.
+.iP
+.IP
+The parameter \*(Pp identifies the resource to query.
+.iP
+ \*(Pp = \*0 \(-> \fBmodifyKeyboard\fP.
+ \*(Pp = \*1 \(-> \fBmodifyCursorKeys\fP.
+ \*(Pp = \*2 \(-> \fBmodifyFunctionKeys\fP.
+ \*(Pp = \*4 \(-> \fBmodifyOtherKeys\fP.
+.iP
+.IP
+\*(XT's response can be used to restore this state,
+because it is formatted as an XTMODKEYS control, i.e.,
+.iP
+ \*(Cs\*>\*(Pp\*s\*m
+.iP
+where
+.iP
+ \*(Pp = \*0 \(-> \fBmodifyKeyboard\fP.
+ \*(Pp = \*1 \(-> \fBmodifyCursorKeys\fP.
+ \*(Pp = \*2 \(-> \fBmodifyFunctionKeys\fP.
+ \*(Pp = \*4 \(-> \fBmodifyOtherKeys\fP.
+.
+.iP
.IP \\*(Cs\\*(Ps\\*s\\*n
Device Status Report (DSR).
\*(Ps = \*5 \(-> Status Report.
@@ -2568,6 +2617,34 @@ for each item from the list of selection
If the second parameter is neither a base64 string nor \*?,
then the selection is cleared.
.sP
+ \*(Ps = \*6\*0 \(-> Query allowed features (XTQALLOWED).
+\fI\*(XT\fP replies with
+.sP
+ \*(Os\*6\*0\*s\*;\*(Pt\*s\*(ST
+.sP
+where \*(Pt is a comma-separated list
+of the \fIallowed\fP optional runtime features,
+i.e., zero or more of these resource names:
+.iP
+ \fBallowColorOps\fR
+ \fBallowFontOps\fR
+ \fBallowMouseOps\fR
+ \fBallowPasteControls\fR
+ \fBallowTcapOps\fR
+ \fBallowTitleOps\fR
+ \fBallowWindowOps\fR
+.sP
+ \*(Ps = \*6\*1 \(-> Query disallowed features (XTQDISALLOWED).
+The second parameter (i.e., the main feature)
+must be one of the resource names returned by \*(Os\*6\*0.
+\fI\*(XT\fP replies with
+.sP
+ \*(Os\*6\*1\*s\*;\*(Pt\*s\*(ST
+.sP
+where \*(Pt is a comma-separated list
+of the optional runtime features which would be disallowed
+if the main feature is disabled.
+.sP
\*(Ps = \*1\*0\*4\*;\fIc\fP \(-> Reset Color Number \fIc\fP. It is reset to
the color specified by the corresponding X resource.
Any number of \fIc\fP parameters may be given.
@@ -2693,14 +2770,14 @@ ordinary keys may be sent as escape sequ
.bP
When \fBmodifyOtherKeys\fP is set to 1,
only the alt- and meta-modifiers apply.
-For example, \fIalt-Tab\fP sends
+For example, \fIalt-Tab\fP sends
\*(Cs\*2\*7\*;\*3\*;\*9\*~
(the second parameter is \*(``3\*('' for \fIalt\fP,
and the third parameter is the ASCII value of tab, \*(``9\*('').
.bP
When \fBmodifyOtherKeys\fP is set to 2,
all of the modifiers apply.
-For example, \fIshift-Tab\fP sends
+For example, \fIshift-Tab\fP sends
\*(Cs\*2\*7\*;\*2\*;\*9\*~
rather than
\*(Cs\*Z
@@ -2709,7 +2786,7 @@ rather than
The \fBformatOtherKeys\fP resource tells \fI\*n\fP to change the
format of the escape sequences sent when \fBmodifyOtherKeys\fP applies.
When \fBmodifyOtherKeys\fP is set to 1,
-for example \fIalt-Tab\fP sends
+for example \fIalt-Tab\fP sends
\*(Cs\*9\*;\*3\*u
(changing the order of parameters).
One drawback to this format is that applications may confuse it with
@@ -3010,7 +3087,7 @@ _
The VT100/VT220 keypad did not have all of those keys.
They were implemented in \fI\*(xt\fP in X11R1 (1987),
defining a mapping of all X11 keys which might be provided on a keypad.
-For instance, a Sun4/II type-4 keyboard provided
+For instance, a Sun4/II type-4 keyboard provided
\*(``=\*('' (equal),
\*(``/\*('' (divide), and
\*(``*\*('' (multiply).
@@ -3931,7 +4008,7 @@ which each manual agrees should \fIset\f
The VT330/VT340 graphics programming manual (second edition, March 1988) says
.RS 5
.sp
-When sixel display mode is set, the \fISixel Scrolling\fP feature is enabled.
+When sixel display mode is set, the \fISixel Scrolling\fP feature is enabled.
.br
When sixel display mode is reset, the \fISixel Scrolling\fP feature is
disabled.
.RE
@@ -4145,7 +4222,7 @@ as defined hereunder.
This Standard addresses a whole class of devices which can vary greatly
from each other depending on the application for which a device has
been specifically designed. Obviously, a
-product which implements all facilities described in this standard \[en]
+product which implements all facilities described in this standard \[en]
thus being in \*(``full conformance\*('' with it \[en] whilst theoretically
possible, would be technically and economically unthinkable.
.ft R
Index: ctlseqs.txt
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/ctlseqs.txt,v
retrieving revision 1.35
diff -u -p -u -r1.35 ctlseqs.txt
--- ctlseqs.txt 7 Nov 2022 11:15:27 -0000 1.35
+++ ctlseqs.txt 28 Jan 2023 17:16:53 -0000
@@ -20,8 +20,8 @@
Thomas Dickey
XFree86 Project (1996-2006)
- invisible-island.net (2006-2022)
- updated for XTerm Patch #374 (2022/10/10)
+ invisible-island.net (2006-2023)
+ updated for XTerm Patch #378 (2023/01/06)
@@ -429,7 +429,7 @@ DCS $ q Pt ST
* | -> DECSNLS
xterm responds with DCS 1 $ r Pt ST for valid requests,
replacing the Pt with the corresponding CSI string, or DCS 0 $
- r Pt ST for invalid requests.
+ r ST for invalid requests.
DCS Ps $ t Pt ST
Restore presentation status (DECRSPS), VT320 and up. The
@@ -442,24 +442,34 @@ DCS + Q Pt ST
Request resource values (XTGETXRES), xterm. The string
following the "Q" is a list of names encoded in hexadecimal (2
digits per character) separated by ; which correspond to xterm
- resource names. Only boolean, numeric and string resources
- are supported by this query.
+ resource names.
xterm responds with
DCS 1 + R Pt ST for valid requests, adding to Pt an = , and
- the value of the corresponding resource that xterm is using,
- or
+ the value of the corresponding xterm resource, or
DCS 0 + R Pt ST for invalid requests.
The strings are encoded in hexadecimal (2 digits per
character).
+ Only boolean, numeric and string resources for the VT100
+ widget are supported by this query. XTerm evaluates resources
+ at startup time. Several of xterm's state variables use
+ resources to determine their initial value. Because the
+ resource variable may not reflect the current state, xterm
+ provides control sequences for querying the state directly:
+
+ o XTQALLOWED
+ o XTQMODKEYS
+
DCS + p Pt ST
Set Termcap/Terminfo Data (XTSETTCAP), xterm. The string
- following the "p" is a name to use for retrieving data from
- the terminal database. The data will be used for the "tcap"
- keyboard configuration's function- and special-keys, as well
- as by the Request Termcap/Terminfo String control.
+ following the "p" is encoded in hexadecimal. After decoding
+ it, xterm will use the name to retrieve data from the terminal
+ database. If successful, that overrides the termName resource
+ when handling the "tcap" keyboard configuration's function-
+ and special-keys, as well as by the Request Termcap/Terminfo
+ String control.
DCS + q Pt ST
@@ -482,9 +492,12 @@ DCS + q Pt ST
DCS 1 + r Pt ST for valid requests, adding to Pt an = , and
the value of the corresponding string that xterm would send,
or
- DCS 0 + r Pt ST for invalid requests.
+ DCS 0 + r ST for invalid requests.
The strings are encoded in hexadecimal (2 digits per
- character).
+ character). If more than one name is given, xterm replies
+ with each name/value pair in the same response. An invalid
+ name (one not found in xterm's tables) ends processing of the
+ list of names.
Functions using CSI , ordered by the final character(s)
@@ -738,7 +751,9 @@ CSI Ps ; Ps f
Horizontal and Vertical Position [row;column] (default =
[1,1]) (HVP).
-CSI Ps g Tab Clear (TBC).
+CSI Ps g Tab Clear (TBC). ECMA-48 defines additional codes, but the
+ VT100 user manual notes that it ignores other codes. DEC's
+ later terminals (and xterm) do the same, for compatibility.
Ps = 0 -> Clear Current Column (default).
Ps = 3 -> Clear All.
@@ -924,7 +939,7 @@ CSI ? Pm l
Ps = 6 9 -> Disable left and right margin mode (DECLRMM),
VT420 and up.
Ps = 8 0 -> Disable Sixel Display Mode (DECSDM), VT330,
- VT340, VT382. Turns on ``Sixel Scrolling''. See the section
+ VT340, VT382. Turns on "Sixel Scrolling". See the section
Sixel Graphics and mode 8 4 5 2 .
Ps = 9 5 -> Clear screen when DECCOLM is set/reset
(DECNCSM), VT510 and up.
@@ -1154,6 +1169,28 @@ CSI > Pp m
If no parameters are given, all resources are reset to their
initial values.
+CSI ? Pp m
+ Query key modifier options (XTQMODKEYS), xterm.
+
+ The parameter Pp identifies the resource to query.
+
+ Pp = 0 -> modifyKeyboard.
+ Pp = 1 -> modifyCursorKeys.
+ Pp = 2 -> modifyFunctionKeys.
+ Pp = 4 -> modifyOtherKeys.
+
+ XTerm's response can be used to restore this state, because it
+ is formatted as an XTMODKEYS control, i.e.,
+
+ CSI > Pp m
+
+ where
+
+ Pp = 0 -> modifyKeyboard.
+ Pp = 1 -> modifyCursorKeys.
+ Pp = 2 -> modifyFunctionKeys.
+ Pp = 4 -> modifyOtherKeys.
+
CSI Ps n Device Status Report (DSR).
Ps = 5 -> Status Report.
Result ("OK") is CSI 0 n
@@ -1847,6 +1884,32 @@ OSC Ps ; Pt ST
If the second parameter is neither a base64 string nor ? ,
then the selection is cleared.
+ Ps = 6 0 -> Query allowed features (XTQALLOWED). XTerm
+ replies with
+
+ OSC 6 0 ; Pt ST
+
+ where Pt is a comma-separated list of the allowed optional
+ runtime features, i.e., zero or more of these resource names:
+
+ allowColorOps
+ allowFontOps
+ allowMouseOps
+ allowPasteControls
+ allowTcapOps
+ allowTitleOps
+ allowWindowOps
+
+ Ps = 6 1 -> Query disallowed features (XTQDISALLOWED). The
+ second parameter (i.e., the main feature) must be one of the
+ resource names returned by OSC 6 0 . XTerm replies with
+
+ OSC 6 1 ; Pt ST
+
+ where Pt is a comma-separated list of the optional runtime
+ features which would be disallowed if the main feature is
+ disabled.
+
Ps = 1 0 4 ; c -> Reset Color Number c. It is reset to the
color specified by the corresponding X resource. Any number
of c parameters may be given. These parameters correspond to
@@ -3292,44 +3355,44 @@ o The SCOSC/SCORC control sequences fo
be used in termcap for vi, for example, to turn off saving of
lines, but restore whatever the original state was on exit.
- while the SCOSC/SCORC pair was added in 1995 by XFree86 (and
+ while the SCOSC/SCORC pair was added in 1995 by XFree86 (and
documented long afterwards).
- The SCO ANSI console terminal descriptions did not use these
- controls (they used the VT100-compatible SC/RC pair). SCOSC/SCORC
- were an artifact of DOS 2.00 (January 1983), by Microsoft and later
+ The SCO ANSI console terminal descriptions did not use these
+ controls (they used the VT100-compatible SC/RC pair). SCOSC/SCORC
+ were an artifact of DOS 2.00 (January 1983), by Microsoft and later
supported by SCO and other vendors.
- The SCOSC/SCORC pair is considered a private mode because the final
+ The SCOSC/SCORC pair is considered a private mode because the final
characters (s and u ) fall in the range from "`" to "~" (octal 0140
- to octal 0176). Other private control sequences can be constructed
+ to octal 0176). Other private control sequences can be constructed
by using octets 074 to 077 (characters "<", "=", ">", or "?") at the
beginning of the parameter string. The XTSAVE and XTRESTORE
controls use "?") in this manner.
Because the XTSAVE and XTRESTORE controls are private, other
- terminals may behave differently. For example, DEC (a contributor
- to the early xterm as well as a manufacturer of terminals) used an
- incompatible private control in one of its terminals more than five
+ terminals may behave differently. For example, DEC (a contributor
+ to the early xterm as well as a manufacturer of terminals) used an
+ incompatible private control in one of its terminals more than five
years later (for the VT420 PCTerm, announced in February 1992).
- In that model of the VT420, CSI ? Pm; Pc r selects the PC TERM
- emulation mode. When this mode is enabled, the keyboard sends scan
- codes rather than characters (analogous to X keyboard events). The
- first parameter of this private control enables or disables PC TERM
+ In that model of the VT420, CSI ? Pm; Pc r selects the PC TERM
+ emulation mode. When this mode is enabled, the keyboard sends scan
+ codes rather than characters (analogous to X keyboard events). The
+ first parameter of this private control enables or disables PC TERM
mode, while the second selects a character set. An ambiguity arises
if an application omits the second parameter. In that special case,
- it cannot be distinguished from XTRESTORE. DEC did not take this
+ it cannot be distinguished from XTRESTORE. DEC did not take this
into account when designing the feature.
- If there were potential users, xterm could accommodate this by a
- resource setting. In retrospect (thirty years later), there have
- been no uses of PC TERM, while the XTRESTORE feature is still in
+ If there were potential users, xterm could accommodate this by a
+ resource setting. In retrospect (thirty years later), there have
+ been no uses of PC TERM, while the XTRESTORE feature is still in
use.
o The aixterm manual page gives the format of the control sequence for
- foreground and background colors 8-15, but does not specify what
- those colors are. That is implied by the description's mention of
+ foreground and background colors 8-15, but does not specify what
+ those colors are. That is implied by the description's mention of
HFT:
The aixterm command provides a standard terminal type for
@@ -3339,7 +3402,7 @@ o The aixterm manual page gives the fo
the -v flag.
Unlike xterm, there are no resource names for the 16 colors, leaving
- the reader to assume that the mapping is hard-coded. The control
- sequences for colors 8-15 are not specified by ECMA-48, but rather
- (as done in other instances by xterm) chosen to not conflict with
+ the reader to assume that the mapping is hard-coded. The control
+ sequences for colors 8-15 are not specified by ECMA-48, but rather
+ (as done in other instances by xterm) chosen to not conflict with
current or future standards.
Index: fontutils.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/fontutils.c,v
retrieving revision 1.41
diff -u -p -u -r1.41 fontutils.c
--- fontutils.c 9 Nov 2022 21:55:15 -0000 1.41
+++ fontutils.c 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: fontutils.c,v 1.750 2022/10/23 22:55:11 tom Exp $ */
+/* $XTermId: fontutils.c,v 1.760 2023/01/08 23:42:23 tom Exp $ */
/*
- * Copyright 1998-2021,2022 by Thomas E. Dickey
+ * Copyright 1998-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -163,7 +163,7 @@ static Boolean merge_sublist(char ***, c
#endif
static void save2FontList(XtermWidget, const char *, XtermFontNames *,
- VTFontEnum, const char *, Bool);
+ VTFontEnum, const char *, Bool, Bool);
#if OPT_RENDERFONT
static void fillInFaceSize(XtermWidget, int);
@@ -1965,6 +1965,8 @@ xtermLoadItalics(XtermWidget xw)
TRACE(("MERGE_SUBFONT " #dst "." #name " found \"%s\"\n",
NonNull(dst.name))); \
}
#define MERGE_SUBLIST(dst,src,name) \
+ if (dst.fonts.x11.name == NULL) \
+ dst.fonts.x11.name = TypeCalloc(char *); \
if (merge_sublist(&(dst.fonts.x11.name), src.fonts.x11.name)) { \
TRACE(("MERGE_SUBLIST " #dst "." #name " merge \"%s\"\n",
src.fonts.x11.name[0])); \
} else { \
@@ -2184,10 +2186,20 @@ xtermLoadVTFonts(XtermWidget xw, String
* Now, save the string to a font-list for consistency
*/
#define ALLOC_SUBLIST(which,field) \
- save2FontList(xw, "cached", \
- &(subresourceRec.fonts), \
- which, \
- subresourceRec.default_font.field, False)
+ if (subresourceRec.default_font.field != NULL) { \
+ char *blob = x_strdup(subresourceRec.default_font.field); \
+ char *base = blob; \
+ for (base = blob; ; base = NULL) { \
+ char *item = strtok(base, ","); \
+ if (item == NULL) \
+ break; \
+ save2FontList(xw, "cached", \
+ &(subresourceRec.fonts), \
+ which, \
+ item, False, False); \
+ } \
+ free(blob); \
+ }
ALLOC_SUBLIST(fNorm, f_n);
ALLOC_SUBLIST(fBold, f_b);
@@ -2612,6 +2624,25 @@ checkedXftWidth(Display *dpy,
return result;
}
+/*
+ * Check if the given character has a glyph known to Xft. This is likely to be
+ * slower than checking our cache.
+ *
+ * see xc/lib/Xft/xftglyphs.c
+ */
+static Bool
+slowXftMissing(XtermWidget xw, XftFont *font, unsigned wc)
+{
+ TScreen *screen = TScreenOf(xw);
+ Bool result = False;
+
+ if (font != NULL) {
+ if (XftCharIndex(screen->display, font, wc) == 0)
+ result = True;
+ }
+ return result;
+}
+
static int
checkXftWidth(XtermWidget xw, XTermXftFonts *data)
{
@@ -2701,6 +2732,24 @@ checkXftWidth(XtermWidget xw, XTermXftFo
return failed;
}
+#if OPT_TRACE
+static const char *
+nameOfXftFont(XftFont *fp)
+{
+ static char *result;
+ char buffer[1024];
+ FreeAndNull(result);
+ if (XftNameUnparse(fp->pattern, buffer, (int) sizeof(buffer))) {
+ char *target;
+ char *source = buffer;
+ if ((target = strtok(source, ":")) != 0) {
+ result = x_strdup(target);
+ }
+ }
+ return NonNull(result);
+}
+#endif
+
#if OPT_REPORT_FONTS
static void
reportXftFonts(XtermWidget xw,
@@ -2742,8 +2791,26 @@ reportXftFonts(XtermWidget xw,
fflush(stdout);
}
}
+
+static void
+reportXftFallbackFont(XtermWidget xw,
+ XTermXftFonts *fontData,
+ int fontNum,
+ XftFont *font,
+ XftPattern *match)
+{
+ if (resource.reportFonts) {
+ char tag[80];
+ sprintf(tag, "%s#%d",
+ whichXftFonts(xw, fontData),
+ fontNum + 1);
+ reportXftFonts(xw, fontData, fontNum, font, "fallback", tag, match);
+ }
+}
+
#else
#define reportXftFonts(xw, fontData, fontNum, result, name, tag, match)
/* empty */
+#define reportXftFallbackFont(xw, fontData, fontNum, font, match) /*
empty */
#endif /* OPT_REPORT_FONTS */
/*
@@ -2818,7 +2885,7 @@ xtermOpenXft(XtermWidget xw,
XftFont *result = 0;
TRACE(("xtermOpenXft(name=%s, tag=%s)\n", name, tag));
- if (pat != 0) {
+ if (pat != 0 && (fontNum <= MaxXftCache)) {
XftPattern *match;
FcConfigSubstitute(NULL, pat, FcMatchPattern);
@@ -2839,8 +2906,8 @@ xtermOpenXft(XtermWidget xw,
#endif
if (result != NULL) {
TRACE(("...matched %s font\n", tag));
- if (fontData->fs_size <= (unsigned) fontNum)
- fontData->fs_size = (unsigned) (fontNum + 1);
+ if (fontData->fs_size < fontNum)
+ fontData->fs_size = fontNum;
XftFpN(fontData, fontNum) = result;
XftIsN(fontData, fontNum) = xcOpened;
if (!maybeXftCache(xw, result)) {
@@ -2861,7 +2928,7 @@ xtermOpenXft(XtermWidget xw,
}
}
}
- if (result == NULL) {
+ if (result == NULL && (fontNum <= MaxXftCache)) {
XftFpN(fontData, fontNum) = NULL;
XftIsN(fontData, fontNum) = xcEmpty;
}
@@ -3213,7 +3280,7 @@ void
xtermCloseXft(TScreen *screen, XTermXftFonts *pub)
{
if (XftFp(pub) != NULL) {
- Cardinal n;
+ int n;
if (pub->pattern) {
XftPatternDestroy(pub->pattern);
@@ -3224,7 +3291,7 @@ xtermCloseXft(TScreen *screen, XTermXftF
pub->fontset = NULL;
}
- for (n = 0; n < pub->fs_size; ++n) {
+ for (n = 0; n <= pub->fs_size; ++n) {
if (XftFpN(pub, n) != NULL) {
closeCachedXft(screen, XftFpN(pub, n));
XftFpN(pub, n) = NULL;
@@ -4150,45 +4217,62 @@ xtermDrawBoxChar(XTermDraw * params,
#endif /* OPT_BOX_CHARS */
#if OPT_RENDERFONT
+static int
+checkXftGlyph(XtermWidget xw, XftFont *font, unsigned wc)
+{
+ TScreen *screen = TScreenOf(xw);
+ int result = 0;
+ int expect;
+
+ if ((expect = CharWidth(screen, wc)) > 0) {
+ XGlyphInfo gi;
+ int actual;
+ int limit = (100 + xw->misc.limit_fontwidth);
+
+ XftTextExtents32(screen->display, font, &wc, 1, &gi);
+ /*
+ * Some (more than a few) fonts are sloppy; allow 10% outside
+ * the bounding box to accommodate them.
+ */
+ actual = ((gi.xOff * 100) >= (limit * FontWidth(screen))) ? 2 : 1;
+ if (actual <= expect) {
+ /* allow double-cell if wcwidth agrees */
+ result = 1;
+ } else {
+ /*
+ * Do not use this font for this specific character, but
+ * possibly other characters can be used.
+ */
+ result = -1;
+ TRACE(("SKIP U+%04X %d vs %d (%d vs %d) %s\n",
+ wc, gi.xOff, FontWidth(screen), actual, expect,
+ nameOfXftFont(font)));
+ }
+ } else {
+ result = 1;
+ }
+ return result;
+}
+
/*
* Check if the glyph is defined in the given font, and (try to) filter out
* cases where double-width glyphs are stuffed into a single-width outline.
*/
-static Boolean
+static int
foundXftGlyph(XtermWidget xw, XTermXftFonts *data, int fontNum, unsigned wc)
{
XftFont *font = XftFpN(data, fontNum);
- TScreen *screen = TScreenOf(xw);
- Boolean result = False;
+ int result = 0;
if (font != 0) {
if (!xtermXftMissing(xw, data, fontNum, font, wc)) {
- int expect;
if (XftIsN(data, fontNum) == xcBogus) {
;
} else if (XftIsN(data, fontNum) == xcOpened) {
- result = True;
- } else if ((expect = CharWidth(screen, wc)) > 0) {
- XGlyphInfo gi;
- int actual;
-
- XftTextExtents32(screen->display, font, &wc, 1, &gi);
- /*
- * Some (more than a few) fonts are sloppy; allow 10% outside
- * the bounding box to accommodate them.
- */
- actual = ((gi.xOff * 10) >= (11 * FontWidth(screen))) ? 2 : 1;
- if (actual <= expect) {
- /* allow double-cell if wcwidth agrees */
- result = True;
- } else {
- XftIsN(data, fontNum) = xcBogus;
- TRACE(("SKIP U+%04X %d vs %d (%d vs %d)\n",
- wc, gi.xOff, FontWidth(screen), actual, expect));
- }
+ result = 1;
} else {
- result = True;
+ result = checkXftGlyph(xw, font, wc);
}
}
}
@@ -4196,7 +4280,7 @@ foundXftGlyph(XtermWidget xw, XTermXftFo
}
static void
-markXftOpened(XtermWidget xw, XTermXftFonts *which, Cardinal n, unsigned wc)
+markXftOpened(XtermWidget xw, XTermXftFonts *which, int n, unsigned wc)
{
if (XftIsN(which, n) != xcOpened) {
which->opened++;
@@ -4291,8 +4375,8 @@ findXftGlyph(XtermWidget xw, XTermXftFon
TScreen *screen = TScreenOf(xw);
XftFont *given;
XftFont *actual = NULL;
- Cardinal n;
FcResult status;
+ int n;
int result = -1;
/* sanity-check */
@@ -4377,10 +4461,10 @@ findXftGlyph(XtermWidget xw, XTermXftFon
FcFontSetSortDestroy(sortedFonts);
FcPatternDestroy(myPattern);
- fontData->fs_size = (unsigned) fontData->fontset->nfont;
+ fontData->fs_size = Min(MaxXftCache, fontData->fontset->nfont);
} {
XftFont *check;
- Cardinal empty = fontData->fs_size;
+ int empty = fontData->fs_size;
for (n = 1; n <= fontData->fs_size; ++n) {
XTermXftState usage = XftIsN(fontData, n);
@@ -4406,11 +4490,15 @@ findXftGlyph(XtermWidget xw, XTermXftFon
&& (fontData->opened < xw->work.max_fontsets)) {
FcPattern *myPattern = NULL;
FcPattern *myReport = NULL;
+ int defer = -1;
if (empty == 0) /* should not happen */
empty++;
- for (n = empty; n < fontData->fs_size; ++n) {
- unsigned nn = n - 1;
+
+ for (n = empty; n <= fontData->fs_size; ++n) {
+ int found;
+ int nn = n - 1;
+
if (XftIsN(fontData, n) != xcEmpty) {
continue;
}
@@ -4422,8 +4510,6 @@ findXftGlyph(XtermWidget xw, XTermXftFon
myPattern = FcPatternDuplicate(fontData->fontset->fonts[nn]);
check = XftFontOpenPattern(screen->display, myPattern);
(void) maybeXftCache(xw, check);
- if (fontData->fs_size <= n)
- fontData->fs_size = (n + 1);
XftFpN(fontData, n) = check;
if (check == NULL) {
; /* shouldn't happen... */
@@ -4433,27 +4519,48 @@ findXftGlyph(XtermWidget xw, XTermXftFon
XftIsN(fontData, n) = xcBogus;
} else
#endif
- if (foundXftGlyph(xw, fontData, (int) n, wc)) {
- char tag[80];
- if (resource.reportFonts) {
- sprintf(tag, "%s#%d",
- whichXftFonts(xw, fontData),
- n + 1);
- } else {
- tag[0] = '\0';
- }
+ if ((found = foundXftGlyph(xw, fontData, (int) n, wc))
+ != 0) {
markXftOpened(xw, fontData, n, wc);
- reportXftFonts(xw, fontData, (int) n, check,
- "fallback", tag, myReport);
+ reportXftFallbackFont(xw, fontData, (int) n, check,
myReport);
+ if (found < 0) {
+ if (defer < 0) {
+ defer = (int) n;
+ TRACE(("Deferring font choice #%d\n", n + 1));
+ continue;
+ } else if (slowXftMissing(xw, check, wc)) {
+ TRACE(("Deferred, continuing #%d\n", n + 1));
+ continue;
+ }
+ } else if (defer >= 0) {
+ defer = -1;
+ TRACE(("Deferred, replacing %d with %d\n",
+ defer + 1, n + 1));
+ }
actual = check;
result = (int) n;
TRACE_FALLBACK(xw, "new", wc, result, actual);
break;
} else {
- /*
- * The slot is opened, but we are not using it yet.
- */
- XftIsN(fontData, n) = xcUnused;
+ Bool ok;
+ if (defer >= 0
+ && (ok = !slowXftMissing(xw, check, wc))
+ && checkXftGlyph(xw, check, wc)) {
+ XTermFontMap *font_map = &(fontData->font_map);
+ TRACE(("checkrecover2 %d\n", n));
+ markXftOpened(xw, fontData, n, wc);
+ reportXftFallbackFont(xw, fontData, (int) n, check,
myReport);
+ actual = check;
+ result = (int) n;
+ TRACE_FALLBACK(xw, "fix", wc, result, actual);
+ font_map->per_font[wc] = (XTfontNum) (result + 1);
+ break;
+ } else {
+ /*
+ * The slot is opened, but we are not using it yet.
+ */
+ XftIsN(fontData, n) = xcUnused;
+ }
}
}
if (myReport != NULL)
@@ -4497,8 +4604,10 @@ xtermXftMissing(XtermWidget xw,
font_map->depth = (fontNum + 1);
/* allocate space */
if (last > font_map->last_char) {
- font_map->per_font = realloc(font_map->per_font, last);
- memset(font_map->per_font + font_map->last_char, 0, (last -
font_map->last_char));
+ size_t need = (last * sizeof(XTfontNum));
+ size_t c1st = (font_map->last_char * sizeof(XTfontNum));
+ font_map->per_font = realloc(font_map->per_font, need);
+ memset(font_map->per_font + font_map->last_char, 0, (need -
c1st));
font_map->last_char = last;
}
@@ -4526,12 +4635,13 @@ xtermXftMissing(XtermWidget xw,
&nextPage)) != FC_CHARSET_DONE);
(void) added;
(void) actual;
- TRACE(("xtermXftMissing U+%04X #%-3d %6u added vs %6u of %6ld %s\n",
+ TRACE(("xtermXftMissing U+%04X #%-3d %6u added vs %6u of %6ld %s:
%s\n",
wc,
font_map->depth,
added, actual,
font_map->last_char + 1,
- whichXftFonts(xw, data)));
+ whichXftFonts(xw, data),
+ nameOfXftFont(font)));
}
if (wc < font_map->last_char) {
result = (font_map->per_font[wc] != (fontNum + 1));
@@ -5242,6 +5352,7 @@ save2FontList(XtermWidget xw,
XtermFontNames * fontnames,
VTFontEnum which,
const char *source,
+ Bool check,
Bool ttf)
{
char *value;
@@ -5386,9 +5497,7 @@ save2FontList(XtermWidget xw,
(unsigned long) count,
value));
} else {
- fprintf(stderr,
- "realloc failure in save2FontList(%s)\n",
- name);
+ xtermWarning("realloc failure in save2FontList(%s)\n",
name);
freeFontList(list);
success = False;
}
@@ -5401,10 +5510,11 @@ save2FontList(XtermWidget xw,
size_t limit = use_ttf ? MAX_XFT_FONTS : MAX_XLFD_FONTS;
#endif
if (count > limit && *x_skip_blanks(value)) {
- fprintf(stderr, "%s: too many fonts for %s, ignoring %s\n",
- ProgramName,
- whichFontEnum(which),
- value);
+ if (check) {
+ xtermWarning("too many fonts for %s, ignoring %s\n",
+ whichFontEnum(which),
+ value);
+ }
if (list && *list) {
free((*list)[limit]);
(*list)[limit] = 0;
@@ -5465,7 +5575,7 @@ allocFontList(XtermWidget xw,
if (list) {
for (n = 0; list[n] != 0; ++n) {
if (*list[n]) {
- save2FontList(xw, name, target, which, list[n], ttf);
+ save2FontList(xw, name, target, which, list[n], True, ttf);
}
}
free(list);
@@ -5484,7 +5594,7 @@ initFontList(XtermWidget xw,
TRACE(("initFontList(%s)\n", name));
for (which = 0; which < fMAX; ++which) {
- save2FontList(xw, name, target, (VTFontEnum) which, "", ttf);
+ save2FontList(xw, name, target, (VTFontEnum) which, "", False, ttf);
}
}
Index: input.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/input.c,v
retrieving revision 1.27
diff -u -p -u -r1.27 input.c
--- input.c 17 Oct 2021 09:10:00 -0000 1.27
+++ input.c 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: input.c,v 1.368 2021/09/12 18:20:03 tom Exp $ */
+/* $XTermId: input.c,v 1.369 2022/11/24 12:48:54 tom Exp $ */
/*
- * Copyright 1999-2020,2021 by Thomas E. Dickey
+ * Copyright 1999-2021,2022 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -627,6 +627,7 @@ ModifyOtherKeys(XtermWidget xw,
result = True;
break;
#endif
+ case XK_Escape:
case XK_Return:
case XK_Tab:
result = (modify_parm != 0);
@@ -634,8 +635,8 @@ ModifyOtherKeys(XtermWidget xw,
default:
if (IsControlInput(kd)) {
result = True;
- } else if (state == ShiftMask) {
- result = (kd->keysym == ' ' || kd->keysym == XK_Return);
+ } else if (state == ShiftMask && kd->keysym == ' ') {
+ result = True;
} else if (computeMaskedModifier(xw, state, ShiftMask)) {
result = True;
}
Index: main.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/main.c,v
retrieving revision 1.62
diff -u -p -u -r1.62 main.c
--- main.c 9 Nov 2022 21:55:15 -0000 1.62
+++ main.c 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: main.c,v 1.891 2022/10/21 23:02:38 tom Exp $ */
+/* $XTermId: main.c,v 1.892 2023/01/09 00:28:06 tom Exp $ */
/*
- * Copyright 2002-2021,2022 by Thomas E. Dickey
+ * Copyright 2002-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -3798,9 +3798,7 @@ xtermTrimEnv(void)
char *equals = strchr(environ[j], '=');
size_t dstlen = strlen(environ[j]);
- if (equals == NULL)
- equals = (environ[j] + dstlen);
- else
+ if (equals != NULL)
dstlen = (size_t) (equals - environ[j]);
for (k = 0; k < XtNumber(table); ++k) {
Index: main.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/main.h,v
retrieving revision 1.19
diff -u -p -u -r1.19 main.h
--- main.h 7 Nov 2022 11:15:27 -0000 1.19
+++ main.h 28 Jan 2023 17:16:53 -0000
@@ -1,4 +1,4 @@
-/* $XTermId: main.h,v 1.81 2022/07/07 09:44:28 tom Exp $ */
+/* $XTermId: main.h,v 1.82 2022/11/21 22:28:35 tom Exp $ */
/*
* Copyright 2000-2021,2022 by Thomas E. Dickey
@@ -240,7 +240,7 @@
#endif
#ifndef DEF_TRACK_USAGE
-#define DEF_TRACK_USAGE True
+#define DEF_TRACK_USAGE False
#endif
#ifndef DEF_XFT_CACHE
Index: misc.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/misc.c,v
retrieving revision 1.50
diff -u -p -u -r1.50 misc.c
--- misc.c 22 Jan 2023 14:22:05 -0000 1.50
+++ misc.c 28 Jan 2023 17:16:53 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: misc.c,v 1.1030 2022/10/23 22:56:44 tom Exp $ */
+/* $XTermId: misc.c,v 1.1044 2023/01/07 01:11:16 tom Exp $ */
/*
- * Copyright 1999-2021,2022 by Thomas E. Dickey
+ * Copyright 1999-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -3542,6 +3542,28 @@ typedef enum {
#define OSC_RESET 100
#define OSC_Reset(code) (code) + OSC_RESET
+/*
+ * Other (non-color) OSC controls
+ */
+typedef enum {
+ OSC_IconBoth = 0
+ ,OSC_IconOnly = 1
+ ,OSC_TitleOnly = 2
+ ,OSC_X_Property = 3
+ ,OSC_SetAnsiColor = 4
+ ,OSC_GetAnsiColors = 5
+ ,OSC_ColorMode = 6
+ ,OSC_SetupPointer = 22
+ ,OSC_Unused_30 = 30 /* Konsole (unused) */
+ ,OSC_Unused_31 = 31 /* Konsole (unused) */
+ ,OSC_NewLogFile = 46
+ ,OSC_FontOps = 50
+ ,OSC_Unused_51 /* Emacs (unused) */
+ ,OSC_SelectionData = 52
+ ,OSC_AllowedOps = 60
+ ,OSC_DisallowedOps = 61
+} OscMiscOps;
+
static Bool
GetOldColors(XtermWidget xw)
{
@@ -3693,6 +3715,7 @@ OscToColorIndex(OscTextColors mode)
case OSC_NCOLORS:
break;
}
+#undef CASE
return result;
}
@@ -3972,6 +3995,44 @@ ChangeFontRequest(XtermWidget xw, String
/***====================================================================***/
+static void
+report_allowed_ops(XtermWidget xw, int final)
+{
+ TScreen *screen = TScreenOf(xw);
+ char delimiter = ';';
+
+ unparseputc1(xw, ANSI_OSC);
+ unparseputn(xw, OSC_AllowedOps);
+
+#define CASE(name) \
+ if (screen->name) { \
+ unparseputc(xw, delimiter); \
+ unparseputs(xw, #name); \
+ delimiter = ','; \
+ }
+ CASE(allowColorOps);
+ CASE(allowFontOps);
+ CASE(allowMouseOps);
+ CASE(allowPasteControls);
+ CASE(allowTcapOps);
+ CASE(allowTitleOps);
+ CASE(allowWindowOps);
+#undef CASE
+
+ unparseputc1(xw, final);
+}
+
+static void
+report_disallowed_ops(XtermWidget xw, char *value, int final)
+{
+ unparseputc1(xw, ANSI_OSC);
+ unparseputn(xw, OSC_DisallowedOps);
+ unparse_disallowed_ops(xw, value);
+ unparseputc1(xw, final);
+}
+
+/***====================================================================***/
+
void
do_osc(XtermWidget xw, Char *oscbuf, size_t len, int final)
{
@@ -4058,14 +4119,15 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
*/
if (xw->work.palette_changed) {
switch (mode) {
- case 03: /* change X property */
- case 30: /* Konsole (unused) */
- case 31: /* Konsole (unused) */
- case 50: /* font operations */
- case 51: /* Emacs (unused) */
-#if OPT_PASTE64
- case 52: /* selection data */
-#endif
+ case OSC_AllowedOps:
+ case OSC_DisallowedOps:
+ case OSC_FontOps:
+ case OSC_NewLogFile:
+ case OSC_SelectionData:
+ case OSC_Unused_30:
+ case OSC_Unused_31:
+ case OSC_Unused_51:
+ case OSC_X_Property:
TRACE(("forced repaint after palette changed\n"));
xw->work.palette_changed = False;
xtermRepaint(xw);
@@ -4081,10 +4143,10 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
* a special case.
*/
switch (mode) {
- case 50:
+ case OSC_FontOps:
#if OPT_ISO_COLORS
- case OSC_Reset(4):
- case OSC_Reset(5):
+ case OSC_Reset(OSC_SetAnsiColor):
+ case OSC_Reset(OSC_GetAnsiColors):
need_data = False;
optional_data = True;
break;
@@ -4102,6 +4164,7 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
case OSC_Reset(OSC_TEK_BG):
case OSC_Reset(OSC_TEK_CURSOR):
#endif
+ case OSC_AllowedOps:
need_data = False;
break;
#endif
@@ -4135,34 +4198,34 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
}
switch (mode) {
- case 0: /* new icon name and title */
+ case OSC_IconBoth: /* new icon name and title */
ChangeIconName(xw, buf);
ChangeTitle(xw, buf);
break;
- case 1: /* new icon name only */
+ case OSC_IconOnly: /* new icon name only */
ChangeIconName(xw, buf);
break;
- case 2: /* new title only */
+ case OSC_TitleOnly: /* new title only */
ChangeTitle(xw, buf);
break;
- case 3: /* change X property */
+ case OSC_X_Property: /* change X property */
if (AllowWindowOps(xw, ewSetXprop))
ChangeXprop(buf);
break;
#if OPT_ISO_COLORS
- case 5:
+ case OSC_GetAnsiColors:
ansi_colors = NUM_ANSI_COLORS;
/* FALLTHRU */
- case 4:
+ case OSC_SetAnsiColor:
if (ChangeAnsiColorRequest(xw, mode, buf, ansi_colors, final))
xw->work.palette_changed = True;
break;
- case 6:
+ case OSC_ColorMode:
/* FALLTHRU */
- case OSC_Reset(6):
+ case OSC_Reset(OSC_ColorMode):
TRACE(("parse colorXXMode:%s\n", buf));
while (*buf != '\0') {
long which = 0;
@@ -4213,10 +4276,10 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
}
}
break;
- case OSC_Reset(5):
+ case OSC_Reset(OSC_GetAnsiColors):
ansi_colors = NUM_ANSI_COLORS;
/* FALLTHRU */
- case OSC_Reset(4):
+ case OSC_Reset(OSC_SetAnsiColor):
if (ResetAnsiColorRequest(xw, buf, ansi_colors))
xw->work.palette_changed = True;
break;
@@ -4258,17 +4321,12 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
}
break;
- case 22:
+ case OSC_SetupPointer:
xtermSetupPointer(xw, buf);
break;
- case 30:
- case 31:
- /* reserved for Konsole (Stephan Binner <[email protected]>) */
- break;
-
#ifdef ALLOWLOGGING
- case 46: /* new log file */
+ case OSC_NewLogFile:
#ifdef ALLOWLOGFILECHANGES
/*
* Warning, enabling this feature allows people to overwrite
@@ -4288,7 +4346,7 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
break;
#endif /* ALLOWLOGGING */
- case 50:
+ case OSC_FontOps:
#if OPT_SHIFT_FONTS
if (*buf == '?') {
QueryFontRequest(xw, buf, final);
@@ -4297,19 +4355,24 @@ do_osc(XtermWidget xw, Char *oscbuf, siz
}
#endif /* OPT_SHIFT_FONTS */
break;
- case 51:
- /* reserved for Emacs shell (Rob Mayoff <[email protected]>) */
- break;
#if OPT_PASTE64
- case 52:
+ case OSC_SelectionData:
ManipulateSelectionData(xw, screen, buf, final);
break;
#endif
- /*
- * One could write code to send back the display and host names,
- * but that could potentially open a fairly nasty security hole.
- */
+
+ case OSC_AllowedOps: /* XTQALLOWED */
+ report_allowed_ops(xw, final);
+ break;
+
+ case OSC_DisallowedOps: /* XTQDISALLOWED */
+ report_disallowed_ops(xw, buf, final);
+ break;
+
+ case OSC_Unused_30:
+ case OSC_Unused_31:
+ case OSC_Unused_51:
default:
TRACE(("do_osc - unrecognized code\n"));
break;
@@ -4825,12 +4888,12 @@ do_dcs(XtermWidget xw, Char *dcsbuf, siz
cp++;
switch (*cp) {
#if OPT_TCAP_QUERY
- case 'p':
+ case 'p': /* XTSETTCAP */
if (AllowTcapOps(xw, etSetTcap)) {
set_termcap(xw, cp + 1);
}
break;
- case 'q':
+ case 'q': /* XTGETTCAP */
if (AllowTcapOps(xw, etGetTcap)) {
Bool fkey;
unsigned state;
@@ -4909,11 +4972,12 @@ do_dcs(XtermWidget xw, Char *dcsbuf, siz
break;
#endif
#if OPT_XRES_QUERY
- case 'Q':
+ case 'Q': /* XTGETXRES */
++cp;
if (AllowXResOps(xw)) {
Boolean first = True;
- while (*cp != '\0') {
+ okay = True;
+ while (*cp != '\0' && okay) {
const char *parsed = 0;
const char *tmp;
char *name = x_decode_hex(cp, &parsed);
@@ -4922,6 +4986,9 @@ do_dcs(XtermWidget xw, Char *dcsbuf, siz
if (cp == parsed || name == NULL) {
free(name);
break; /* no data found, error */
+ }
+ if ((cp - parsed) > 1024) {
+ break; /* ignore improbable resource */
}
TRACE(("query-feature '%s'\n", name));
if ((value = vt100ResourceToString(xw, name)) != 0) {
Index: ptyx.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/ptyx.h,v
retrieving revision 1.53
diff -u -p -u -r1.53 ptyx.h
--- ptyx.h 7 Nov 2022 11:15:27 -0000 1.53
+++ ptyx.h 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: ptyx.h,v 1.1076 2022/10/07 08:00:53 Ben.Wong Exp $ */
+/* $XTermId: ptyx.h,v 1.1082 2023/01/02 13:24:41 tom Exp $ */
/*
- * Copyright 1999-2021,2022 by Thomas E. Dickey
+ * Copyright 1999-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -1912,12 +1912,13 @@ typedef struct {
* FIXME: initially implement for Xft, but replace known_missing[] in
* X11 fonts as well.
*/
+typedef Char XTfontNum;
typedef struct {
int depth; /* number of fonts merged for map */
size_t limit; /* allocated size of per_font, etc */
size_t first_char; /* merged first-character index */
size_t last_char; /* merged last-character index */
- Char * per_font; /* index 1-n of first font with char */
+ XTfontNum * per_font; /* index 1-n of first font with char */
} XTermFontMap;
typedef enum {
@@ -1961,11 +1962,13 @@ typedef struct {
XTermXftState usage;
} XTermXftCache;
+#define MaxXftCache MaxUChar
+
typedef struct {
XftPattern * pattern; /* pattern for main font */
XftFontSet * fontset; /* ordered list of fallback patterns */
- XTermXftCache cache[MaxUChar + 1]; /* list of open font pointers */
- unsigned fs_size; /* allocated size of cache[] */
+ XTermXftCache cache[MaxXftCache + 1]; /* list of open font pointers */
+ int fs_size; /* last usable index of cache[] */
Char opened; /* number in cache[] with xcOpened */
XTermFontInfo font_info; /* summary of font metrics */
XTermFontMap font_map; /* map of glyphs provided in fontset */
@@ -2495,8 +2498,8 @@ typedef struct {
String disallowedMouseOps;
char disallow_mouse_ops[emLAST];
- String disallowedPasteControls;
- char disallow_paste_controls[epLAST];
+ String disallowedPasteOps;
+ char disallow_paste_ops[epLAST];
String disallowedTcapOps;
char disallow_tcap_ops[etLAST];
@@ -3227,6 +3230,7 @@ typedef struct _Misc {
float face_size[NMENUFONTS];
char *render_font_s;
int limit_fontsets;
+ int limit_fontwidth;
#endif
} Misc;
Index: terminfo
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/terminfo,v
retrieving revision 1.15
diff -u -p -u -r1.15 terminfo
--- terminfo 7 Nov 2022 11:15:27 -0000 1.15
+++ terminfo 28 Jan 2023 17:16:54 -0000
@@ -1,10 +1,10 @@
-# $XTermId: terminfo,v 1.204 2022/06/20 23:37:59 tom Exp $
+# $XTermId: terminfo,v 1.206 2023/01/08 10:51:12 tom Exp $
#
# Updates/notes/new entries (e.g., xterm-8bit, xterm-16color, xterm-256color)
# - Thomas E. Dickey
#
#------------------------------------------------------------------------------
-# Copyright 1996-2021,2022 by Thomas E. Dickey
+# Copyright 1996-2022,2023 by Thomas E. Dickey
#
# All Rights Reserved
#
@@ -145,6 +145,8 @@ xterm-new|modern xterm terminal emulator
use=xterm+pcfkeys,
use=xterm+tmux,
use=xterm+nofkeys,
+ use=bracketed+paste,
+ use=report+version,
# Left/right margins are supported in xterm since patch #279 (2012/05/10)
vt420+lrmm|VT420 left/right margins,
@@ -965,6 +967,28 @@ xterm+x11mouse|X11 xterm mouse protocol,
%'\s'%+%c
%p2%'!'%+%c
%p1%'!'%+%c,
+
+# https://invisible-island.net/xterm/xterm-paste64.html
+#
+# Bracketed paste was introduced by xterm patch #203 in May 2005, as part of a
+# larger feature for manipulating the clipboard selection. Few terminals aside
+# from xterm fully implement the clipboard feature, but several copy this
+# detail. The names for the extended capabilities here were introduced by vim
+# in January 2017, but used internally. In 2023, vim patch 9.0.1117 is needed
+# to work with this change.
+bracketed+paste|xterm bracketed paste,
+ BD=\E[?2004l,
+ BE=\E[?2004h,
+ PE=\E[201~,
+ PS=\E[200~,
+
+# https://invisible-island.net/xterm/xterm.log.html#xterm_354
+#
+# The response is a DSR sequence identifying the version: DCS > | text ST
+# For example:
+# ^[P>|XTerm(354)^[\
+report+version|Report xterm name and version (XTVERSION).,
+ RV=\E[>0q,
# This chunk is used for building the VT220/Sun/PC keyboard variants.
xterm-basic|modern xterm terminal emulator - common,
Index: util.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/util.c,v
retrieving revision 1.43
diff -u -p -u -r1.43 util.c
--- util.c 7 Nov 2022 11:15:27 -0000 1.43
+++ util.c 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: util.c,v 1.913 2022/09/25 17:46:22 tom Exp $ */
+/* $XTermId: util.c,v 1.914 2023/01/04 09:21:31 tom Exp $ */
/*
- * Copyright 1999-2021,2022 by Thomas E. Dickey
+ * Copyright 1999-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -2699,34 +2699,6 @@ isDefaultBackground(const char *name)
{
return (Boolean) !x_strcasecmp(name, XtDefaultBackground);
}
-
-#if OPT_WIDE_CHARS
-/*
- * Check for Unicode BIDI control characters, which may be miscategorized via
- * wcwidth() and iswprint() as zero-width printable characters.
- */
-Boolean
-isWideControl(unsigned ch)
-{
- Boolean result;
-
- switch (ch) {
- case 0x200E:
- case 0x200F:
- case 0x202A:
- case 0x202B:
- case 0x202C:
- case 0x202D:
- case 0x202E:
- result = True;
- break;
- default:
- result = False;
- break;
- }
- return result;
-}
-#endif
/***====================================================================***/
Index: version.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/version.h,v
retrieving revision 1.57
diff -u -p -u -r1.57 version.h
--- version.h 9 Nov 2022 21:55:15 -0000 1.57
+++ version.h 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: version.h,v 1.529 2022/10/24 00:25:39 tom Exp $ */
+/* $XTermId: version.h,v 1.536 2023/01/09 10:29:58 tom Exp $ */
/*
- * Copyright 1998-2021,2022 by Thomas E. Dickey
+ * Copyright 1998-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -38,8 +38,8 @@
* version of X to which this version of xterm has been built. The resulting
* number in parentheses is my patch number (Thomas E. Dickey).
*/
-#define XTERM_PATCH 375
-#define XTERM_DATE 2022-10-23
+#define XTERM_PATCH 378
+#define XTERM_DATE 2023-01-09
#ifndef __vendorversion__
#define __vendorversion__ "XTerm/OpenBSD"
Index: xstrings.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/xstrings.c,v
retrieving revision 1.18
diff -u -p -u -r1.18 xstrings.c
--- xstrings.c 10 Jan 2021 09:23:57 -0000 1.18
+++ xstrings.c 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: xstrings.c,v 1.78 2020/10/12 18:50:28 tom Exp $ */
+/* $XTermId: xstrings.c,v 1.79 2022/11/16 23:54:32 tom Exp $ */
/*
- * Copyright 2000-2019,2020 by Thomas E. Dickey
+ * Copyright 2000-2020,2022 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -395,29 +395,39 @@ x_freeargs(char **argv)
int
x_strcasecmp(const char *s1, const char *s2)
{
- size_t len = strlen(s1);
+ size_t len1 = (s1 != NULL) ? strlen(s1) : 0;
+ size_t len2 = (s2 != NULL) ? strlen(s2) : 0;
- if (len != strlen(s2))
- return 1;
-
- return x_strncasecmp(s1, s2, (unsigned) len);
+ return ((len1 != len2)
+ ? 1
+ : x_strncasecmp(s1, s2, (unsigned) len1));
}
int
x_strncasecmp(const char *s1, const char *s2, unsigned n)
{
- while (n-- != 0) {
- char c1 = x_toupper(*s1);
- char c2 = x_toupper(*s2);
- if (c1 != c2)
- return 1;
- if (c1 == 0)
- break;
- s1++;
- s2++;
+ int result = 0;
+
+ if (s1 != NULL && s2 != NULL) {
+ while (n-- != 0) {
+ char c1 = x_toupper(*s1);
+ char c2 = x_toupper(*s2);
+ if (c1 != c2) {
+ result = 1;
+ break;
+ } else if (c1 == 0) {
+ break;
+ }
+ s1++;
+ s2++;
+ }
+ } else if (s1 == NULL && s2 != NULL) {
+ result = 1;
+ } else if (s1 != NULL && s2 == NULL) {
+ result = 1;
}
- return 0;
+ return result;
}
/*
Index: xterm.appdata.xml
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/xterm.appdata.xml,v
retrieving revision 1.11
diff -u -p -u -r1.11 xterm.appdata.xml
--- xterm.appdata.xml 9 Nov 2022 21:55:15 -0000 1.11
+++ xterm.appdata.xml 28 Jan 2023 17:16:54 -0000
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright 2014-2021,2022 Thomas Dickey <[email protected]> -->
+<!-- Copyright 2014-2022,2023 Thomas Dickey <[email protected]> -->
<component type="desktop">
<id>xterm.desktop</id>
<metadata_license>CC-BY-3.0</metadata_license>
@@ -35,7 +35,7 @@
<keyword>terminal</keyword>
</keywords>
<releases>
- <release version="375" date="2022-10-23"/>
+ <release version="378" date="2023-01-09"/>
</releases>
<url type="homepage">https://invisible-island.net/xterm/</url>
<update_contact>[email protected]</update_contact>
Index: xterm.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/xterm.h,v
retrieving revision 1.53
diff -u -p -u -r1.53 xterm.h
--- xterm.h 9 Nov 2022 21:55:15 -0000 1.53
+++ xterm.h 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: xterm.h,v 1.919 2022/10/23 13:37:56 tom Exp $ */
+/* $XTermId: xterm.h,v 1.922 2023/01/04 09:21:42 tom Exp $ */
/*
- * Copyright 1999-2021,2022 by Thomas E. Dickey
+ * Copyright 1999-2022,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -550,6 +550,7 @@ extern char **environ;
#define XtNkeepSelection "keepSelection"
#define XtNkeyboardDialect "keyboardDialect"
#define XtNlimitFontsets "limitFontsets"
+#define XtNlimitFontWidth "limitFontWidth"
#define XtNlimitResize "limitResize"
#define XtNlimitResponse "limitResponse"
#define XtNlocale "locale"
@@ -760,6 +761,7 @@ extern char **environ;
#define XtCKeepSelection "KeepSelection"
#define XtCKeyboardDialect "KeyboardDialect"
#define XtCLimitFontsets "LimitFontsets"
+#define XtCLimitFontWidth "LimitFontWidth"
#define XtCLimitResize "LimitResize"
#define XtCLimitResponse "LimitResponse"
#define XtCLocale "Locale"
@@ -1028,16 +1030,17 @@ extern void resetCharsets (TScreen * /*
extern void resetMargins (XtermWidget /* xw */);
extern void restoreCharsets (TScreen * /* screen */, DECNRCM_codes * /* source
*/);
extern void saveCharsets (TScreen * /* screen */, DECNRCM_codes * /* target
*/);
-extern void set_max_col(TScreen * /* screen */, int /* cols */);
-extern void set_max_row(TScreen * /* screen */, int /* rows */);
+extern void set_max_col(TScreen * /* screen */, int /* cols */);
+extern void set_max_row(TScreen * /* screen */, int /* rows */);
+extern void unparse_disallowed_ops (XtermWidget /* xw */, char * /* value */);
extern void unparse_end (XtermWidget /* xw */);
extern void unparseputc (XtermWidget /* xw */, int /* c */);
extern void unparseputc1 (XtermWidget /* xw */, int /* c */);
extern void unparseputn (XtermWidget /* xw */, unsigned /* n */);
extern void unparseputs (XtermWidget /* xw */, const char * /* s */);
extern void unparseseq (XtermWidget /* xw */, ANSI * /* ap */);
-extern void v_write (int /* f */, const Char * /* d */, size_t /* len */);
-extern void xtermAddInput (Widget /* w */);
+extern void v_write (int /* f */, const Char * /* d */, size_t /* len */);
+extern void xtermAddInput (Widget /* w */);
extern void xtermDecodeSCS (XtermWidget /* xw */, int /* which */, int /*
sgroup */, int /* prefix */, int /* suffix */);
#if OPT_BLINK_CURS
@@ -1761,7 +1764,6 @@ extern void putXtermCell (TScreen * /* s
#endif
#if OPT_WIDE_CHARS
-extern Boolean isWideControl(unsigned /* ch */);
extern int DamagedCells(TScreen * /* screen */, unsigned /* n */, int * /* klp
*/, int * /* krp */, int /* row */, int /* col */);
extern int DamagedCurCells(TScreen * /* screen */, unsigned /* n */, int * /*
klp */, int * /* krp */);
extern unsigned AsciiEquivs(unsigned /* ch */);
Index: xterm.log.html
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/xterm.log.html,v
retrieving revision 1.53
diff -u -p -u -r1.53 xterm.log.html
--- xterm.log.html 9 Nov 2022 21:55:15 -0000 1.53
+++ xterm.log.html 28 Jan 2023 17:17:25 -0000
@@ -2,7 +2,7 @@
*****************************************************************************
* this file is part of xterm *
* *
- * Copyright 1997-2021,2022 by Thomas E. Dickey *
+ * Copyright 1997-2022,2023 by Thomas E. Dickey *
* *
* All Rights Reserved *
* *
@@ -30,7 +30,7 @@
* sale, use or other dealings in this Software without prior written *
* authorization. *
*****************************************************************************
- $XTermId: xterm.log.html,v 1.2453 2022/10/24 00:25:20 tom Exp $
+ $XTermId: xterm.log.html,v 1.2478 2023/01/09 10:29:25 tom Exp $
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
@@ -50,7 +50,7 @@
<body>
<hr>
- <p>Copyright © 1997-2021,2022 by <a href=
+ <p>Copyright © 1997-2022,2023 by <a href=
"mailto:[email protected]">Thomas E. Dickey</a></p>
<hr>
@@ -70,6 +70,12 @@
CHANGELOG</a>).</p>
<ul>
+ <li><a href="#xterm_378">Patch #378 - 2023/01/09</a></li>
+
+ <li><a href="#xterm_377">Patch #377 - 2022/11/25</a></li>
+
+ <li><a href="#xterm_376">Patch #376 - 2022/11/16</a></li>
+
<li><a href="#xterm_375">Patch #375 - 2022/10/23</a></li>
<li><a href="#xterm_374">Patch #374 - 2022/10/10</a></li>
@@ -1026,6 +1032,80 @@
<li><a href="#xterm_02">Patch #2 - 1996/1/7</a></li>
<li><a href="#xterm_01">Patch #1 - 1996/1/6</a></li>
+ </ul>
+
+ <h1><a name="xterm_378" id="xterm_378">Patch #378 -
+ 2023/01/09</a></h1>
+
+ <ul>
+ <li>improve descriptions of <em>XTQMODKEYS</em> and
+ <em>XTQALLOWED</em> features in <tt>ctlseqs.ms</tt> (reports by
+ Bram Moolenaar, Thomas Wolff).</li>
+
+ <li>add <tt>bracketed+paste</tt> and <tt>report+version</tt>
+ building blocks to terminfo, from ncurses 6.4</li>
+
+ <li>improve check for unsupported formatting characters, e.g.,
+ zero-width space, to properly ignore them (report by Thomas
+ Wolff).</li>
+
+ <li>improve/document error-checking for some of the controls
+ which return responses: DECRQSS, XTGETXRES, XTSETTCAP,
+ XTGETTCAP (prompted by discussion with David Leadbeater).</li>
+
+ <li>improve limit-checks for fallback font cache (report by
+ Dimitrije Erdeljan).</li>
+
+ <li>improve check for too-wide glyph in fallback font by
+ allowing xterm to continue searching for a suitable font rather
+ than just failing on the first. Also add
+ <tt>limitFontWidth</tt> to allow changing the amount by which a
+ glyph must extend outside the font's bounding box to disallow
+ it.</li>
+ </ul>
+
+ <h1><a name="xterm_377" id="xterm_377">Patch #377 -
+ 2022/11/25</a></h1>
+
+ <ul>
+ <li>add control sequences for reporting the current state of
+ the modified keys options (XTQMODKEYS) and allowed/disallowed
+ operations (XTQALLOWED), (prompted by discussion with Bram
+ Moolenaar).</li>
+
+ <li>amend <code>modifyOtherKeys</code> case 2 to distinguish
+ the escape character with modifiers, e.g., shift-escape, from a
+ plain escape character (suggested by Bram Moolenaar).</li>
+
+ <li>improve parsing and error-recovery in the case where a list
+ of X11 bitmap fonts is given in the <code>-fn</code> and
+ related options.</li>
+
+ <li>change default for <code>xftTrackMemUsage</code> to false,
+ because libXft does not handle certain fonts.</li>
+ </ul>
+
+ <h1><a name="xterm_376" id="xterm_376">Patch #376 -
+ 2022/11/16</a></h1>
+
+ <ul>
+ <li>modify configure script to always check for gcc
+ attributes,</li>
+
+ <li>update <code>install-sh</code>.</li>
+
+ <li>fix parsing of <code>result -u</code> in
+ <code>vttests/halves.pl</code>.</li>
+
+ <li>add a note in <code>ctlseqs.ms</code> about compatibility
+ of <code>TBC</code>.</li>
+
+ <li>fix a copy/paste error in manual (patch by Grady
+ Martin).</li>
+
+ <li>add null-pointer checks in <code>x_strcasecmp</code> and
+ <code>x_strncasecmp</code>, to help with error-recovery for a
+ missing font (Debian #1022942).</li>
</ul>
<h1><a name="xterm_375" id="xterm_375">Patch #375 -
Index: xterm.man
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/xterm.man,v
retrieving revision 1.60
diff -u -p -u -r1.60 xterm.man
--- xterm.man 7 Nov 2022 11:15:27 -0000 1.60
+++ xterm.man 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
'\" t
-.\" $XTermId: xterm.man,v 1.864 2022/10/08 00:17:27 tom Exp $
+.\" $XTermId: xterm.man,v 1.874 2023/01/08 19:20:45 tom Exp $
.\"
-.\" Copyright 1996-2021,2022 by Thomas E. Dickey
+.\" Copyright 1996-2022,2023 by Thomas E. Dickey
.\"
.\" All Rights Reserved
.\"
@@ -279,8 +279,8 @@ See \fIXterm Control Sequences\fP for de
.
.\" ***************************************************************************
.SH OPTIONS
-Because \fI\*n\fP uses the X Toolkit library,
-it accepts the standard X Toolkit command line options.
+Because \fI\*n\fP uses the \fIX Toolkit\fP library,
+it accepts the standard \fIX Toolkit\fP command line options.
\fI\*N\fP also accepts many application-specific options.
.PP
By convention, if an option begins with a \*(``\fB+\fP\*(''
@@ -288,17 +288,17 @@ instead of a \*(``\fB\-\fP\*('',
the option is restored to its default value.
.\" ***************************************************************************
.PP
-Most of the \fI\*n\fP options are actually parsed by the X Toolkit,
+Most of the \fI\*n\fP options are actually parsed by the \fIX Toolkit\fP,
which sets resource values, and
overrides corresponding resource-settings in your X resource files.
-\fI\*N\fP provides the X Toolkit with a table of options.
-A few of these are marked, telling the X Toolkit to ignore them
+\fI\*N\fP provides the \fIX Toolkit\fP with a table of options.
+A few of these are marked, telling the \fIX Toolkit\fP to ignore them
(\fB\-help\fP,
\fB\-version\fP,
\fB\-class\fP,
\fB\-e\fP, and
\fB\-into\fP).
-After the X Toolkit has parsed the command-line parameters,
+After the \fIX Toolkit\fP has parsed the command-line parameters,
it removes those which it handles,
leaving the specially-marked parameters for \fI\*n\fP to handle.
.\" ***************************************************************************
@@ -333,9 +333,9 @@ The \fB\-version\fP and \fB\-help\fP opt
cannot open the display, and are useful for testing and configuration scripts.
Along with \fB\-class\fP, they are checked before other options.
To do this, \fI\*n\fP has its own (much simpler) argument parser,
-along with a table of the X Toolkit's built-in list of options.
+along with a table of the \fIX Toolkit\fP's built-in list of options.
.PP
-Relying upon the X Toolkit to parse the options and associated values
+Relying upon the \fIX Toolkit\fP to parse the options and associated values
has the advantages of simplicity and good integration with the X resource
mechanism.
There are a few drawbacks
@@ -355,7 +355,7 @@ In the design of these options,
some are deemed more important,
and can override other options.
.IP
-The X Toolkit uses patterns (constants and wildcards) to match resources.
+The \fIX Toolkit\fP uses patterns (constants and wildcards) to match resources.
Once a particular pattern has been used,
it will not modify it.
To override a given setting,
@@ -365,7 +365,7 @@ Some poorly-designed resource files are
to allow the command-line options to affect the relevant widget values.
.bP
In a few cases,
-the X Toolkit combines its standard options in ways which do not work
+the \fIX Toolkit\fP combines its standard options in ways which do not work
well with \fI\*n\fP.
This happens with the color (\fB\-fg\fP, \fB\-bg\fP) and reverse (\fB\-rv\fP)
options.
@@ -524,7 +524,7 @@ Normally it is \*(``__default_class__\*(
can be set to another class such as
\*(``U__default_class__\*('' to override selected resources.
.IP
-X Toolkit sets the \fBWM_CLASS\fP property using the instance name
+\fIX Toolkit\fP sets the \fBWM_CLASS\fP property using the instance name
and this class value.
.TP 8
.B "\-cm"
@@ -605,7 +605,7 @@ When a CJK
double-width font is specified, you also need to turn
on the \fBcjkWidth\fP resource.
.IP
-If you specify both \fB\-fa\fP and the X Toolkit option \fB\-fn\fP,
+If you specify both \fB\-fa\fP and the \fIX Toolkit\fP option \fB\-fn\fP,
the \fB\-fa\fP setting overrides the latter.
.IP
See also the \fBrenderFont\fP resource,
@@ -1363,8 +1363,8 @@ initialization or the \fB\-S\fP option t
.PP
The following command line arguments are provided for compatibility with
older versions.
-They may not be supported in the next release as the X
-Toolkit provides standard options that accomplish the same task.
+They may not be supported in the next release as the
+\fIX Toolkit\fP provides standard options that accomplish the same task.
.TP 8
.B "%\fIgeom\fP"
This option specifies the preferred size and position of the Tektronix window.
@@ -1381,12 +1381,12 @@ It is equivalent to \fB\-title\fP.
.BI \-n " string"
This option specifies the icon name for \fI\*n\fP's windows.
It is shorthand for specifying the \*(``\fBiconName\fP\*('' resource.
-Note that this is not the same as the toolkit option \fB\-name\fP.
+Note that this is not the same as the \fIX Toolkit\fP option \fB\-name\fP.
The default icon name is the application name.
.IP
If no suitable icon is found, \fI\*n\fP provides a compiled-in pixmap.
.IP
-X Toolkit sets the \fBWM_ICON_NAME\fP property using this value.
+\fIX Toolkit\fP sets the \fBWM_ICON_NAME\fP property using this value.
.TP 8
.B \-r
This option indicates that reverse video should be simulated by swapping
@@ -1400,17 +1400,18 @@ It is equivalent to \fB\-borderwidth\fP
.
.SS X Toolkit Options
.PP
-The following standard X Toolkit command line arguments are commonly used
+The following standard \fIX Toolkit\fP command line arguments are commonly used
with \fI\*n\fP:
.TP 8
.B \-bd \fIcolor\fP
This option specifies the color to use for the border of the window.
The corresponding resource name is \fBborderColor\fP.
-\fI\*N\fP uses the X Toolkit default, which is \*(``XtDefaultForeground\*(''.
+\fI\*N\fP uses the \fIX Toolkit\fP default,
+which is \*(``XtDefaultForeground\*(''.
.IP
\fI\*N\fP's VT100 window has two borders:
the \fIinner\fP border \fBinternalBorder\fP
-and the \fIouter\fP border \fBborderWidth\fP, managed by the X Toolkit.
+and the \fIouter\fP border \fBborderWidth\fP, managed by the \fIX Toolkit\fP.
.IP
Normally \fI\*n\fP fills the inner border using the VT100 window's
background color.
@@ -1446,6 +1447,12 @@ The default is
This option specifies the font to be used for displaying normal text.
The corresponding resource name is \fIfont\fP.
The resource value default is \fIfixed\fP.
+.IP
+\fI\*N\fP's \fB\-fn\fP option accepts a comma-separated list like \fB\-fa\fP,
+for the VT100 widget,
+using the first bitmap font (and discarding additional fonts).
+However, other widgets (such as the toolbar) will be confused by this
+and give a warning.
.TP 8
.B \-font \fIfont\fP
This is the same as \fB\-fn\fP.
@@ -1486,14 +1493,14 @@ The default title is the command
line specified after the \fB\-e\fP option, if any, otherwise the application
name.
.IP
-X Toolkit sets the \fBWM_NAME\fP property using this value.
+\fIX Toolkit\fP sets the \fBWM_NAME\fP property using this value.
.TP 8
.B \-xrm \fIresourcestring\fP
This option specifies a resource string to be used.
This is especially
useful for setting resources that do not have separate command line options.
.PP
-X Toolkit accepts alternate names for a few of these options, e.g.,
+\fIX Toolkit\fP accepts alternate names for a few of these options, e.g.,
.bP
\*(``\fB\-background\fP\*('' for \*(``\fB\-bg\fP\*(''
.bP
@@ -1506,8 +1513,9 @@ Abbreviated options also are supported,
.
.
.SH RESOURCES
-\fI\*N\fP understands all of the core X Toolkit resource names and classes.
-It also uses the X Toolkit resource types (such as
+\fI\*N\fP understands all of the core
+\fIX Toolkit\fP resource names and classes.
+It also uses the \fIX Toolkit\fP resource types (such as
booleans,
colors,
fonts,
@@ -1517,7 +1525,7 @@ along with their respective converters.
Those resource types are not always sufficient:
.bP
\fI\*N\fP's resource values may be lists of names.
-X Toolkit resource types do not include lists.
+\fIX Toolkit\fP resource types do not include lists.
\fI\*N\fP uses a string for the resource, and parses it.
.IP
Comma-separated lists of names ignore case.
@@ -1811,7 +1819,7 @@ The default is
.TP 8
.B "menuHeight\fP (class\fB MenuHeight\fP)"
Specifies the height of the toolbar,
-which may be increased by the X toolkit layout widget depending upon
+which may be increased by the \fIX Toolkit\fP Layout widget depending upon
the fontsize used.
The default is
\*(``25\*(''.
@@ -1819,7 +1827,7 @@ The default is
.B "menuLocale\fP (class\fB MenuLocale\fP)"
Specify the locale used for character-set computations when loading
the popup menus.
-Use this to improve initialization performance of the Athena popup menus,
+Use this to improve initialization performance of the \fIAthena\fP popup menus,
which may load unnecessary (and very large) fonts, e.g.,
in a locale having UTF-8 encoding.
The default is \*(``C\*('' (POSIX).
@@ -2477,7 +2485,7 @@ default is \*(``true\*(''.
.TP 8
.B "awaitInput\fP (class\fB AwaitInput\fP)"
Specifies whether or not \fI\*n\fR uses a 50 millisecond timeout to
-await input (i.e., to support the Xaw3d arrow scrollbar).
+await input (i.e., to support the \fIXaw3d\fP arrow scrollbar).
The default is \*(``false\*(''.
.TP 8
.B "backarrowKey\fP (class\fB BackarrowKey\fP)"
@@ -3480,7 +3488,7 @@ XTerm*faceName: x:fixed,xft:Bitstream Ve
.IP
Two TrueType fonts can be specified in this way.
The first is the primary font;
-the second acts as a manual override to the fontconfig fontset.
+the second acts as a manual override to the \fIfontconfig\fP fontset.
.IP
If no \fBfaceName\fP resource is specified,
or if there is no match for both TrueType normal and bold fonts,
@@ -3976,7 +3984,8 @@ which change character sets.
The default is \*(``B\*('', which corresponds to US ASCII.
.TP 8
.B "limitFontsets\fP (class\fB LimitFontsets\fP)"
-Limits the number of TrueType fallback fonts (i.e., fontset) which can be
tested.
+Limits the number of TrueType fallback fonts (i.e., fontset)
+which can be tested.
The default is \*(``50\*(''.
No more than \*(``255\*('' will be scanned.
.IP
@@ -3992,6 +4001,17 @@ to the standard output.
.IP
Set this to \*(``0\*('' to disable fallbacks entirely.
.TP 8
+.B "limitFontWidth\fP (class\fB LimitFontWidth\fP)"
+When looking for fallback fonts, \fI\*n\fP checks to see that the
+the character to be displayed is the same width as the primary font.
+If a character extends outside the font's bounding box,
+\fI\*n\fP will clip it, to fit.
+.IP
+This resource controls the amount by which the character can extend
+outside its bounding box before \fI\*n\fP looks further for a better font.
+.IP
+The default is \*(``10\*('' (percent).
+.TP 8
.B "limitResize\fP (class\fB LimitResize\fP)"
Limits resizing of the screen via control sequence to a given multiple of
the display dimensions.
@@ -4084,7 +4104,7 @@ you can add those after the command, e.g
.NE
.IP
Alternatively,
-you may put those parameter within a shell script to execute the converter,
+you may put those parameters within a shell script to execute the converter,
and set this resource to point to the shell script.
.IP
When using a locale-filter, e.g., with the \fI\-e\fP option, or the shell,
@@ -4363,7 +4383,7 @@ Specifies the number of characters from
bell should be rung, when enabled by the \fBmarginBell\fP resource.
The default is \*(``10\*(''.
.TP 8
-.B "\fIname\fP\fBKeymap\fP (class\fB \fIName\fP\fBKeymap\fP)"
+.B "\fIname\fBKeymap\fR (class\fB \fIName\fBKeymap\fR)"
See the discussion of the \fBkeymap()\fP action.
.TP 8
.B "nextEventDelay\fP (class\fB NextEventDelay\fP)"
@@ -4928,7 +4948,7 @@ There are several aspects to reverse vid
The command-line \fB\-rv\fP option tells the X libraries to reverse
the foreground and background colors.
\fI\*N\fP's command-line options set resource values.
-In particular, the X Toolkit sets the \fBreverseVideo\fP resource
+In particular, the \fIX Toolkit\fP sets the \fBreverseVideo\fP resource
when the \fB\-rv\fP option is used.
.bP
If the user has also used command-line options \fB\-fg\fP or \fB\-bg\fP
@@ -5251,7 +5271,7 @@ Specifies the key and button bindings fo
strings\*('', etc.
The \fBtranslations\fP resource,
which provides much of \fI\*n\fP's configurability,
-is a feature of the X Toolkit Intrinsics library (Xt).
+is a feature of the \fIX Toolkit Intrinsics\fP library (Xt).
See the \fBActions\fP section.
.TP 8
.B "trimSelection\fP (class\fB TrimSelection\fP)"
@@ -5511,7 +5531,7 @@ The default is \*(``0\*('' to use Xft's
Enables glyph memory tracking (introduced in Xft 2.3.5),
which allows Xft to efficiently discard obsolete data when running
short of memory.
-The default is \*(``true\*(''.
+The default is \*(``false\*(''.
.TP 8
.B "ximFont\fP (class\fB XimFont\fP)"
This option specifies the font to be used for displaying the preedit string
@@ -5570,7 +5590,7 @@ Specifies the width of the Tektronix win
.SS Menu Resources
.PP
The resources that may be specified for the various menus are described in
-the documentation for the Athena \fBSimpleMenu\fP widget.
+the documentation for the \fIAthena\fP \fBSimpleMenu\fP widget.
The name and classes of the entries in each of the menus are listed below.
Resources named \*(``\fBline\fIN\fR\*('' where \fIN\fR is a number
are separators with class \fBSmeLine\fR.
@@ -5892,7 +5912,7 @@ This entry invokes the \fBset\-visibilit
.\"
.SS Scrollbar Resources
.PP
-The following resources are useful when specified for the Athena Scrollbar
+The following resources are useful when specified for the \fIAthena\fP
Scrollbar
widget:
.TP 8
.B "background\fP (class\fB Background\fP)"
@@ -6924,7 +6944,7 @@ which can be controlled by writing escap
These are disabled if the SendEvents feature is enabled:
.RS
.TP
-.B Allow Color Ops\fP (resource \fBallow\-font\-ops\fP)
+.B Allow Color Ops\fP (resource \fBallow\-color\-ops\fP)
This corresponds to the \fBallowColorOps\fP resource.
Enable or disable control sequences that set/query the colors.
.TP
@@ -8176,7 +8196,7 @@ keys for entering commonly-typed words:
Key bindings are normally associated with the \fIvt100\fP or \fItek4014\fP
widgets which act as terminal emulators.
\fI\*N\fP's scrollbar (and toolbar if it is configured) are separate widgets.
-Because all of these use the X Toolkit,
+Because all of these use the \fIX Toolkit\fP,
they have corresponding \fBtranslations\fP resources.
Those resources are distinct,
and match different patterns, e.g., the differences in widget-name and
@@ -8540,7 +8560,7 @@ In the output from \fBxprop\fP(1), there
.TP 5
.B WM_CLASS
This shows the \fIinstance name\fP and the X resource \fIclass\fP,
-passed to X Toolkit during initialization of \fI\*n\fP,
+passed to \fIX Toolkit\fP during initialization of \fI\*n\fP,
e.g.,
.NS
WM_CLASS(STRING) = "xterm", "UXTerm"
@@ -8556,7 +8576,7 @@ WM_CLIENT_LEADER(WINDOW): window id # 0x
.TP 5
.B WM_COMMAND
This shows the command-line arguments for \fI\*n\fP
-which are passed to X Toolkit during initialization, e.g.,
+which are passed to \fIX Toolkit\fP during initialization, e.g.,
.NS
WM_COMMAND(STRING) = { "xterm", "\-class", "UXTerm", "\-title", "uxterm",
"\-u8" }
.NE
@@ -8580,7 +8600,7 @@ This holds the window title, normally at
It is set via the \fBtitle\fP resource.
Applications can change this using control sequences.
.SS Properties set by Xterm
-X Toolkit does not manage EWMH properties.
+\fIX Toolkit\fP does not manage EWMH properties.
\*N does this directly.
.TP 5
.B _NET_WM_ICON_NAME
@@ -8605,7 +8625,8 @@ That may include other window manager hi
properties for a window manager which claims EWMH compliance.
.TP 5
.B _NET_WM_STATE
-This tells \fI\*n\fP whether its window has been maximized by the window
manager,
+This tells \fI\*n\fP whether
+its window has been maximized by the window manager,
and if so, what type of maximizing:
.RS
.TP 5
@@ -8920,7 +8941,7 @@ https://invisible\-island.net/xterm/xter
https://invisible\-island.net/xterm/xterm.log.html
.RE
.PP
-\fIX Toolkit Intrinsics \(en C Language Interface\fP (Xt),
+\fIX Toolkit Intrinsics \(en C Language Interface\fR (Xt),
.br
Joel McCormack, Paul Asente, Ralph R. Swick (1994),
.br
Index: xtermcap.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/xtermcap.c,v
retrieving revision 1.15
diff -u -p -u -r1.15 xtermcap.c
--- xtermcap.c 10 Jan 2021 09:23:57 -0000 1.15
+++ xtermcap.c 28 Jan 2023 17:16:54 -0000
@@ -1,7 +1,7 @@
-/* $XTermId: xtermcap.c,v 1.56 2020/10/12 18:51:05 tom Exp $ */
+/* $XTermId: xtermcap.c,v 1.58 2023/01/02 18:19:19 tom Exp $ */
/*
- * Copyright 2007-2018,2020 by Thomas E. Dickey
+ * Copyright 2007-2020,2023 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -576,9 +576,10 @@ isLegalTcapName(const char *name)
Bool result = False;
if (*name != '\0') {
+ int length = 0;
result = True;
while (*name != '\0') {
- if (isgraph(CharOf(*name))) {
+ if (++length < 32 && isgraph(CharOf(*name))) {
if (strchr("\\|,:'\"", *name) != 0) {
result = False;
break;
@@ -615,6 +616,7 @@ set_termcap(XtermWidget xw, const char *
if ((value = x_decode_hex(name, &temp)) != 0) {
if (*temp == '\0' && isLegalTcapName(value)) {
if (TcapInit(buffer, value)) {
+ TRACE(("...set_termcap(%s)\n", NonNull(value)));
#if !USE_TERMINFO
memcpy(screen->tcapbuf, buffer, sizeof(buffer));
#endif
Index: package/xterm.spec
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/package/xterm.spec,v
retrieving revision 1.36
diff -u -p -u -r1.36 xterm.spec
--- package/xterm.spec 9 Nov 2022 21:55:15 -0000 1.36
+++ package/xterm.spec 28 Jan 2023 17:16:54 -0000
@@ -1,11 +1,11 @@
-# $XTermId: xterm.spec,v 1.152 2022/10/21 00:45:30 tom Exp $
+# $XTermId: xterm.spec,v 1.156 2022/11/26 12:25:02 tom Exp $
Summary: X terminal emulator (development version)
%global my_middle xterm
%global my_suffix -dev
%global fullname %{my_middle}%{my_suffix}
%global my_class XTermDev
Name: %{fullname}
-Version: 375
+Version: 378
Release: 1
License: X11
Group: User Interface/X
@@ -27,7 +27,9 @@ Provides: x-terminal-emulator >= %{versi
BuildRequires: x11-docs
%else
%if %{is_redhat}
-BuildRequires: xorg-x11-docs
+# missing in Fedora 37:
+## BuildRequires: xorg-x11-docs
+BuildRequires: ncurses-devel
%else
%if %{is_suse}
BuildRequires: xorg-docs
@@ -244,6 +246,9 @@ exit 0
%{_pixmapsdir}/*.xpm
%changelog
+
+* Fri Nov 25 2022 Thomas E. Dickey
+- Fedora 37 has no xorg-x11-docs
* Thu Feb 24 2022 Thomas E. Dickey
- double-buffer is not enabled by default
Index: package/debian/changelog
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/package/debian/changelog,v
retrieving revision 1.37
diff -u -p -u -r1.37 changelog
--- package/debian/changelog 9 Nov 2022 21:55:15 -0000 1.37
+++ package/debian/changelog 28 Jan 2023 17:16:53 -0000
@@ -1,3 +1,21 @@
+xterm-dev (378) unstable; urgency=low
+
+ * maintenance updates
+
+ -- Thomas E. Dickey <[email protected]> Sat, 26 Nov 2022 07:25:02
-0500
+
+xterm-dev (377) unstable; urgency=low
+
+ * maintenance updates
+
+ -- Thomas E. Dickey <[email protected]> Sun, 20 Nov 2022 19:18:58
-0500
+
+xterm-dev (376) unstable; urgency=low
+
+ * maintenance updates
+
+ -- Thomas E. Dickey <[email protected]> Sun, 30 Oct 2022 06:48:25
-0400
+
xterm-dev (375) unstable; urgency=low
* maintenance updates
Index: package/debian/copyright
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/package/debian/copyright,v
retrieving revision 1.12
diff -u -p -u -r1.12 copyright
--- package/debian/copyright 25 Apr 2022 19:20:38 -0000 1.12
+++ package/debian/copyright 28 Jan 2023 17:16:54 -0000
@@ -35,7 +35,7 @@ authorization.
Files: * */*
License: MIT-X11
-Copyright 1996-2021,2022 by Thomas E. Dickey
+Copyright 1996-2022,2023 by Thomas E. Dickey
(date ranges vary, depending on when the respective files were first changed
significantly, and run through the most recent change date).
Index: package/freebsd/Makefile
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/package/freebsd/Makefile,v
retrieving revision 1.26
diff -u -p -u -r1.26 Makefile
--- package/freebsd/Makefile 9 Nov 2022 21:55:15 -0000 1.26
+++ package/freebsd/Makefile 28 Jan 2023 17:16:54 -0000
@@ -1,4 +1,4 @@
-# $XTermId: Makefile,v 1.96 2022/10/21 00:45:30 tom Exp $
+# $XTermId: Makefile,v 1.99 2022/11/26 12:25:02 tom Exp $
# $FreeBSD: head/x11/xterm/Makefile 492827 2019-02-13 06:43:36Z ehaupt $
# This is adapted from the FreeBSD port, installing as "xterm-dev" with
@@ -7,7 +7,7 @@
# and "make makesum".
PORTNAME= xterm
-PORTVERSION= 375
+PORTVERSION= 378
CATEGORIES= x11
MASTER_SITES= ftp://ftp.invisible-island.net/xterm/:src1 \
https://invisible-mirror.net/archives/xterm/:src1
Index: package/pkgsrc/Makefile
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/package/pkgsrc/Makefile,v
retrieving revision 1.8
diff -u -p -u -r1.8 Makefile
--- package/pkgsrc/Makefile 9 Nov 2022 21:55:15 -0000 1.8
+++ package/pkgsrc/Makefile 28 Jan 2023 17:16:54 -0000
@@ -1,6 +1,6 @@
# $NetBSD: Makefile,v 1.117 2018/03/12 11:18:00 wiz Exp $
-DISTNAME= xterm-375
+DISTNAME= xterm-378
PKGREVISION= 1
CATEGORIES= x11
MASTER_SITES= ftp://ftp.invisible-island.net/xterm/
Index: vttests/halves.pl
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/vttests/halves.pl,v
retrieving revision 1.2
diff -u -p -u -r1.2 halves.pl
--- vttests/halves.pl 7 Nov 2022 11:15:28 -0000 1.2
+++ vttests/halves.pl 28 Jan 2023 17:16:54 -0000
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# $XTermId: halves.pl,v 1.10 2022/10/10 23:59:05 tom Exp $
+# $XTermId: halves.pl,v 1.11 2022/11/17 00:45:00 tom Exp $
# -----------------------------------------------------------------------------
# this file is part of xterm
#
@@ -53,6 +53,7 @@ sub screen_width() {
if ( $input[$n] =~ /^COLUMNS=/ ) {
$result = $input[$n];
$result =~ s/^[^=]*=//;
+ $result =~ s/;.*//;
last;
}
}
@@ -84,8 +85,8 @@ sub double_cells($) {
pack(
"U*",
map {
- ( $_ <= 32 || $_ > 127 ) # if non-ASCII character...
- ? 32 # ...just show a blank
+ ( $_ <= 32 || $_ > 127 ) # if non-ASCII character...
+ ? 32 # ...just show a blank
: ( 0xff00 + ( $_ - 32 ) ) # map to "Fullwidth Form"
} unpack( "C*", $value )
); # unpack unsigned-char characters
Index: vttests/modify-keys.pl
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xterm/vttests/modify-keys.pl,v
retrieving revision 1.2
diff -u -p -u -r1.2 modify-keys.pl
--- vttests/modify-keys.pl 10 Jan 2021 09:23:58 -0000 1.2
+++ vttests/modify-keys.pl 28 Jan 2023 17:16:54 -0000
@@ -1,9 +1,9 @@
#!/usr/bin/env perl
-# $XTermId: modify-keys.pl,v 1.91 2020/11/15 16:43:35 tom Exp $
+# $XTermId: modify-keys.pl,v 1.92 2022/11/24 12:43:26 tom Exp $
# -----------------------------------------------------------------------------
# this file is part of xterm
#
-# Copyright 2019,2020 by Thomas E. Dickey
+# Copyright 2019-2020,2022 by Thomas E. Dickey
#
# All Rights Reserved
#
@@ -612,7 +612,10 @@ sub ModifyOtherKeys($$$$) {
$result = 1
if ( &computeMaskedModifier( $state, $ShiftMask ) );
}
- elsif ( $sym eq "XK_Return" or $sym eq "XK_Tab" ) {
+ elsif ($sym eq "XK_Escape"
+ or $sym eq "XK_Return"
+ or $sym eq "XK_Tab" )
+ {
$result = ( $modify_parm != 0 );
}
@@ -620,8 +623,8 @@ sub ModifyOtherKeys($$$$) {
if ( &IsControlInput($code) ) {
$result = 1;
}
- elsif ( $state == $ShiftMask ) {
- $result = ( $sym eq "XK_space" or $sym eq "XK_Return"
);
+ elsif ( $state == $ShiftMask and $sym eq "XK_space" ) {
+ $result = 1;
}
elsif ( &computeMaskedModifier( $state, $ShiftMask ) ) {
$result = 1;
--
Matthieu Herrb