sync with OpenBSD -current
This commit is contained in:
parent
a34e492c6b
commit
acb2a22980
86 changed files with 12131 additions and 4602 deletions
16
README.md
16
README.md
|
@ -100,8 +100,8 @@ in a non-standard directory (the default is /usr/xenocara).
|
|||
|
||||
Xenocara requires objdirs. Just run 'make obj' as root at any level
|
||||
before 'make build' to make sure that the object directories are
|
||||
created. XOBJDIR defines the obj directory that is used (defaults to
|
||||
/usr/xobj). It should be created before running 'make obj'.
|
||||
created. XOBJDIR defines the obj directory that is used (defaults to
|
||||
/usr/xobj). It should be created before running 'make obj'.
|
||||
|
||||
## Regenerating configure scripts
|
||||
|
||||
|
@ -156,18 +156,18 @@ to a new release of XCB:
|
|||
python3 package.
|
||||
3. Update dist/libxcb.
|
||||
4. Check lib/libxcb/src/Makefile if new files need to be generated.
|
||||
5. Run `make` in lib/xcb/src to generate the files for the new version.
|
||||
5. Run make in lib/xcb/src to generate the files for the new version.
|
||||
6. Check lib/libxcb/ for other files needing updates.
|
||||
7. Commit the result.
|
||||
|
||||
## How to build something with debug information?
|
||||
|
||||
You can use `env CFLAGS=-g make -f Makefile.bsd-wrapper build` to
|
||||
You can use env CFLAGS=-g make -f Makefile.bsd-wrapper build to
|
||||
build any module with debugging information, but you'll need to remove
|
||||
`XOBJDIR/xorg-config.cache.${MACHINE}` before doing that because
|
||||
XOBJDIR/xorg-config.cache.${MACHINE} before doing that because
|
||||
autoconf caches the value of CFLAGS in its cache.
|
||||
|
||||
## How to get a core file out of the X server?
|
||||
## How to get a core file out of the X server?
|
||||
|
||||
Several things are needed:
|
||||
|
||||
|
@ -176,7 +176,7 @@ Several things are needed:
|
|||
xenodm, you can add the option in /etc/X11/xenodm/Xservers. If you
|
||||
want to use startx, you need to run it as root, like this:
|
||||
|
||||
`startx -- /usr/X11R6/bin/X -keepPriv`
|
||||
startx -- /usr/X11R6/bin/X -keepPriv
|
||||
|
||||
Now the X server should dump core when catching a fatal signal and the
|
||||
core dump should be in /var/crash/Xorg/<pid>.core.
|
||||
|
@ -189,4 +189,4 @@ dump will be in the current directory where startx was executed.
|
|||
See also http://xorg.freedesktop.org/wiki/Development/Documentation/ServerDebugging
|
||||
|
||||
--
|
||||
$OpenBSD: README.md,v 1.1 2024/07/20 19:56:40 matthieu Exp $
|
||||
$OpenBSD: README.md,v 1.2 2024/07/22 19:36:31 rsadowski Exp $
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
--- $XTermId: COPYING,v 1.6 2023/01/02 15:46:55 tom Exp $
|
||||
--- $XTermId: COPYING,v 1.7 2024/01/01 20:00:01 tom Exp $
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Copyright 1996-2022,2023 by Thomas E. Dickey
|
||||
Copyright 1996-2023,2024 by Thomas E. Dickey
|
||||
|
||||
All Rights Reserved
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
MANIFEST for xterm, version xterm-378
|
||||
MANIFEST for xterm, version xterm-393
|
||||
--------------------------------------------------------------------------------
|
||||
MANIFEST this file
|
||||
256colres.h resource-definitions for 256-color mode
|
||||
|
@ -33,6 +33,8 @@ charclass.c compact character-class module
|
|||
charclass.h interface of charclass.c
|
||||
charproc.c VT100 parser functions
|
||||
charsets.c module to translate character-sets
|
||||
charsets.dat raw data to transform into charsets.h
|
||||
charsets.h charset definitions for xterm
|
||||
config.guess configure script: guess the system type
|
||||
config.sub configure script: validate system type
|
||||
configure generated
|
||||
|
@ -148,6 +150,8 @@ icons/xterm.xpms collection of icons
|
|||
icons/xterm_16x16.xpm normal icon 16x16 pixmap
|
||||
icons/xterm_32x32.xpm 32x32 monochrome icon
|
||||
icons/xterm_48x48.xpm 48x48 monochrome icon
|
||||
package subdirectory
|
||||
package/xterm.spec build-script
|
||||
package/debian subdirectory
|
||||
package/debian/changelog build-script
|
||||
package/debian/color.sed build-script
|
||||
|
@ -157,14 +161,13 @@ package/debian/copyright build-script
|
|||
package/debian/postinst post-install script for update-alternatives
|
||||
package/debian/prerm pre-remove script for update-alternatives
|
||||
package/debian/rules build-script
|
||||
package/debian/source subdirectory
|
||||
package/debian/source/format build-script
|
||||
package/debian subdirectory
|
||||
package/debian/watch build-script
|
||||
package/debian/xterm-dev.docs build-script
|
||||
package/debian/xterm-dev.lintian-overrides ignore useless warnings from lintian
|
||||
package/debian/xterm-dev.menu Debian menu-file for xterm-dev package.
|
||||
package/debian/xterm-xres.sed build-script
|
||||
package/debian/source subdirectory
|
||||
package/debian/source/format build-script
|
||||
package/freebsd subdirectory
|
||||
package/freebsd/Makefile build-script
|
||||
package/freebsd/distinfo generated sums
|
||||
|
@ -178,8 +181,6 @@ package/pkgsrc/Makefile build-script
|
|||
package/pkgsrc/PLIST build-script
|
||||
package/pkgsrc/distinfo build-script
|
||||
package/pkgsrc/options.mk build-script
|
||||
package subdirectory
|
||||
package/xterm.spec build-script
|
||||
tektests subdirectory
|
||||
tektests/aitest.tek tek4014 demo: draw a globe
|
||||
tektests/dmerc.tek tek4014 demo: draws a Mercator projection with orbit
|
||||
|
|
|
@ -1,22 +1,31 @@
|
|||
The NEWS file was generated from xterm.log.html, which serves as the changelog
|
||||
for xterm.
|
||||
--------------------------------------------------------------------------------
|
||||
Patch #378 - 2023/01/09
|
||||
Patch #393 - 2024/07/11
|
||||
|
||||
* 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.
|
||||
* add a check for ANSI SC/RC, to ignore CSI parameters.
|
||||
* improve check for missing characters for bitmap-fonts by using the
|
||||
normal font for reference in the case where the current font, e.g.,
|
||||
the wide-font was derived from the normal font and lacks
|
||||
per-character metrics (report by Rajeev V. Pillai).
|
||||
* fix regression in error-recovery for SGR parameters from patch #357
|
||||
(report by James Holderness).
|
||||
* remove some duplicates in xtermcfg.h (report by Matthew Green).
|
||||
* change default for --enable-imake configure option.
|
||||
* fixes for wcwidth:
|
||||
+ return 0 for format effectors, like a zero-width printing
|
||||
character rather than -1 like a control character (report by
|
||||
Rajeev V. Pillai).
|
||||
+ correct doublewidth to account for reserved codepoints which
|
||||
are listed in the EastAsianWidth file.
|
||||
+ add a special case for surrogate pairs, which might be checked
|
||||
in testing the wcwidth function.
|
||||
* amend sixel bounds-check added in patch #371 to not wrap
|
||||
out-of-bounds data.
|
||||
* eliminate maxStringParse limit for SIXEL.
|
||||
* improve logic which ignores APC, PM and SOS controls to also not
|
||||
accumulate their data temporarily in a buffer.
|
||||
* exclude TERM_INGRESS from cleanup of environment variables (patch
|
||||
by Iain Riley).
|
||||
* fix some documentation typos (report by Thomas Wolff).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
-- $XTermId: THANKS,v 1.36 2022/11/17 00:49:53 tom Exp $
|
||||
-- $XTermId: THANKS,v 1.39 2024/02/10 01:24:54 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.
|
||||
|
@ -13,6 +13,7 @@ Here is a list from xterm.log.html of people who have contributed changes,
|
|||
or whose suggested change could be adapted:
|
||||
|
||||
Adam M Costello
|
||||
Adam Saponara
|
||||
Adam Sulmicki
|
||||
Ailin Nemui
|
||||
Al Poole
|
||||
|
@ -81,6 +82,7 @@ Dennis Schneider
|
|||
Dimitrios Christidis
|
||||
Ed Schouten
|
||||
Eddy De Greef
|
||||
Edward Rosten
|
||||
Edward S Arthur
|
||||
Egbert Eich
|
||||
Egmont Koblinger
|
||||
|
@ -124,6 +126,7 @@ Joe Allen
|
|||
Joe Peterson
|
||||
Johnny Billquist
|
||||
Jonathan Irwin
|
||||
Jonny Langley
|
||||
Julien Cristau
|
||||
Juliusz Chroboczek
|
||||
Jungshik Shin
|
||||
|
@ -154,6 +157,7 @@ Martin Hostettler
|
|||
Martin Pirker
|
||||
Martin Tournoij
|
||||
Matthew Green
|
||||
Matthew Martin
|
||||
Matthias Baake
|
||||
Matthias Scheler
|
||||
Matthieu Herrb
|
||||
|
@ -193,6 +197,7 @@ Pavel Roskin
|
|||
Peder Stray
|
||||
Per Hedeland
|
||||
Peter Berg Larsen
|
||||
Petri Kaukasoina
|
||||
Phil Sidler
|
||||
Philipp Klaus Krause
|
||||
Pierre Lombard
|
||||
|
@ -252,6 +257,7 @@ Victor Stinner
|
|||
Victor Vaile
|
||||
Vincent Lefèvre
|
||||
Vladimir A Pavlov
|
||||
Waldemar Brodkorb
|
||||
Walter Harms
|
||||
Werner Fink
|
||||
Werner Lemberg
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: VTPrsTbl.c,v 1.106 2022/11/25 01:19:18 tom Exp $ */
|
||||
/* $XTermId: VTPrsTbl.c,v 1.117 2023/12/27 22:46:08 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1999-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -467,13 +467,13 @@ CASE_CSI_HASH_STATE,
|
|||
/* $ % & ' */
|
||||
CASE_CSI_DOLLAR_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_AMP_STATE,
|
||||
CASE_CSI_TICK_STATE,
|
||||
/* ( ) * + */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE, /* vt525 */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE, /* vt420 and vt520 */
|
||||
/* , - . / */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
|
@ -526,8 +526,8 @@ CASE_GROUND_STATE,
|
|||
CASE_SU,
|
||||
/* T U V W */
|
||||
CASE_TRACK_MOUSE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt420:NP */
|
||||
CASE_GROUND_STATE, /* vt420:PP */
|
||||
CASE_GROUND_STATE,
|
||||
/* X Y Z [ */
|
||||
CASE_ECH,
|
||||
|
@ -627,7 +627,7 @@ CASE_CSI_HASH_STATE,
|
|||
/* currency yen brokenbar section */
|
||||
CASE_CSI_DOLLAR_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_AMP_STATE,
|
||||
CASE_CSI_TICK_STATE,
|
||||
/* diaeresis copyright ordfeminine guillemotleft */
|
||||
CASE_CSI_IGNORE,
|
||||
|
@ -791,15 +791,15 @@ CASE_CSI_HASH_STATE,
|
|||
/* $ % & ' */
|
||||
CASE_CSI_DOLLAR_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_AMP_STATE,
|
||||
CASE_CSI_TICK_STATE,
|
||||
/* ( ) * + */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_STAR_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE, /* vt420 and vt520 */
|
||||
/* , - . / */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_COMMA_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
|
@ -850,8 +850,8 @@ CASE_GROUND_STATE,
|
|||
CASE_SU,
|
||||
/* T U V W */
|
||||
CASE_TRACK_MOUSE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt420:NP */
|
||||
CASE_GROUND_STATE, /* vt420:PP */
|
||||
CASE_GROUND_STATE,
|
||||
/* X Y Z [ */
|
||||
CASE_ECH,
|
||||
|
@ -901,7 +901,7 @@ CASE_GROUND_STATE,
|
|||
/* | } ~ DEL */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECFNK */
|
||||
CASE_IGNORE,
|
||||
/* 0x80 0x81 0x82 0x83 */
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -951,7 +951,7 @@ CASE_CSI_HASH_STATE,
|
|||
/* currency yen brokenbar section */
|
||||
CASE_CSI_DOLLAR_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_AMP_STATE,
|
||||
CASE_CSI_TICK_STATE,
|
||||
/* diaeresis copyright ordfeminine guillemotleft */
|
||||
CASE_CSI_IGNORE,
|
||||
|
@ -959,7 +959,7 @@ CASE_CSI_IGNORE,
|
|||
CASE_CSI_STAR_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* notsign hyphen registered macron */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_COMMA_STATE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
|
@ -1537,10 +1537,10 @@ CASE_DECSCA,
|
|||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* t u v w */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECSRFR */
|
||||
CASE_GROUND_STATE, /* vt510:DECSTRL */
|
||||
CASE_DECRQDE,
|
||||
CASE_GROUND_STATE, /* vt420:DECRPDE */
|
||||
/* x y z { */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -1699,7 +1699,7 @@ CASE_GROUND_STATE,
|
|||
/* ocircumflex otilde odiaeresis division */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECRQDE,
|
||||
CASE_GROUND_STATE,
|
||||
/* oslash ugrave uacute ucircumflex */
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -1817,9 +1817,9 @@ CASE_GROUND_STATE,
|
|||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* P Q R S */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:PPA */
|
||||
CASE_GROUND_STATE, /* vt420:PPR */
|
||||
CASE_GROUND_STATE, /* vt510:PPB */
|
||||
CASE_GROUND_STATE,
|
||||
/* T U V W */
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -1857,14 +1857,14 @@ CASE_GROUND_STATE,
|
|||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* p q r s */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECSSCLS */
|
||||
CASE_DECSCUSR,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECSKCV */
|
||||
CASE_GROUND_STATE,
|
||||
/* t u v w */
|
||||
CASE_DECSWBV,
|
||||
CASE_DECSMBV,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECSLCK */
|
||||
CASE_GROUND_STATE,
|
||||
/* x y z { */
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -1873,8 +1873,8 @@ CASE_GROUND_STATE,
|
|||
CASE_GROUND_STATE,
|
||||
/* | } ~ DEL */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECKBD */
|
||||
CASE_GROUND_STATE, /* vt510:DECTME */
|
||||
CASE_IGNORE,
|
||||
/* 0x80 0x81 0x82 0x83 */
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -2689,6 +2689,330 @@ CASE_GROUND_STATE,
|
|||
};
|
||||
#endif
|
||||
|
||||
Const PARSE_T csi_amp_table[] = /* CSI ... & */
|
||||
{
|
||||
/* NUL SOH STX ETX */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* EOT ENQ ACK BEL */
|
||||
CASE_IGNORE,
|
||||
CASE_ENQ,
|
||||
CASE_IGNORE,
|
||||
CASE_BELL,
|
||||
/* BS HT NL VT */
|
||||
CASE_BS,
|
||||
CASE_TAB,
|
||||
CASE_VMOT,
|
||||
CASE_VMOT,
|
||||
/* FF CR SO SI */
|
||||
CASE_VMOT,
|
||||
CASE_CR,
|
||||
CASE_SO,
|
||||
CASE_SI,
|
||||
/* DLE DC1 DC2 DC3 */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* DC4 NAK SYN ETB */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* CAN EM SUB ESC */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_IGNORE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_ESC,
|
||||
/* FS GS RS US */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* SP ! " # */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* $ % & ' */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* ( ) * + */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* , - . / */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* 0 1 2 3 */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* 4 5 6 7 */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* 8 9 : ; */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* < = > ? */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* @ A B C */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* D E F G */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* H I J K */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* L M N O */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* P Q R S */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* T U V W */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* X Y Z [ */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* \ ] ^ _ */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* ` a b c */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* d e f g */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* h i j k */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* l m n o */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* p q r s */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* t u v w */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECRQUPSS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* x y z { */
|
||||
CASE_GROUND_STATE, /* vt420:Enable Session */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* | } ~ DEL */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_IGNORE,
|
||||
/* 0x80 0x81 0x82 0x83 */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x84 0x85 0x86 0x87 */
|
||||
CASE_IND,
|
||||
CASE_NEL,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x88 0x89 0x8a 0x8b */
|
||||
CASE_HTS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x8c 0x8d 0x8e 0x8f */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_RI,
|
||||
CASE_SS2,
|
||||
CASE_SS3,
|
||||
/* 0x90 0x91 0x92 0x93 */
|
||||
CASE_DCS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x94 0x95 0x96 0x97 */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_SPA,
|
||||
CASE_EPA,
|
||||
/* 0x98 0x99 0x9a 0x9b */
|
||||
CASE_SOS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECID,
|
||||
CASE_CSI_STATE,
|
||||
/* 0x9c 0x9d 0x9e 0x9f */
|
||||
CASE_ST,
|
||||
CASE_OSC,
|
||||
CASE_PM,
|
||||
CASE_APC,
|
||||
/* nobreakspace exclamdown cent sterling */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* currency yen brokenbar section */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* diaeresis copyright ordfeminine guillemotleft */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* notsign hyphen registered macron */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* degree plusminus twosuperior threesuperior */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* acute mu paragraph periodcentered */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* cedilla onesuperior masculine guillemotright */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* onequarter onehalf threequarters questiondown */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* Agrave Aacute Acircumflex Atilde */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Adiaeresis Aring AE Ccedilla */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Egrave Eacute Ecircumflex Ediaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Igrave Iacute Icircumflex Idiaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Eth Ntilde Ograve Oacute */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Ocircumflex Otilde Odiaeresis multiply */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Ooblique Ugrave Uacute Ucircumflex */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Udiaeresis Yacute Thorn ssharp */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* agrave aacute acircumflex atilde */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* adiaeresis aring ae ccedilla */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* egrave eacute ecircumflex ediaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* igrave iacute icircumflex idiaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* eth ntilde ograve oacute */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* ocircumflex otilde odiaeresis division */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECRQUPSS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* oslash ugrave uacute ucircumflex */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* udiaeresis yacute thorn ydiaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
};
|
||||
|
||||
#if OPT_DEC_RECTOPS
|
||||
Const PARSE_T csi_dollar_table[] = /* CSI ... $ */
|
||||
{
|
||||
|
@ -2839,12 +3163,12 @@ CASE_DECCARA,
|
|||
CASE_GROUND_STATE,
|
||||
/* t u v w */
|
||||
CASE_DECRARA,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt420:DECRQTSR */
|
||||
CASE_DECCRA,
|
||||
CASE_DECRQPSR,
|
||||
/* x y z { */
|
||||
CASE_DECFRA,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt420:DECRPM */
|
||||
CASE_DECERA,
|
||||
CASE_DECSERA,
|
||||
/* | } ~ DEL */
|
||||
|
@ -3157,23 +3481,23 @@ CASE_GROUND_STATE,
|
|||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* p q r s */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECSPPCS */
|
||||
CASE_GROUND_STATE, /* vt420:DECSRC */
|
||||
CASE_GROUND_STATE, /* vt510:DECSCS */
|
||||
CASE_GROUND_STATE, /* vt510:DECSFC */
|
||||
/* t u v w */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt510:DECSCP */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* x y z { */
|
||||
CASE_DECSACE,
|
||||
CASE_DECRQCRA,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt420:DECINVM */
|
||||
CASE_GROUND_STATE,
|
||||
/* | } ~ DEL */
|
||||
CASE_DECSNLS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt420:DECLFKC */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_IGNORE,
|
||||
/* 0x80 0x81 0x82 0x83 */
|
||||
|
@ -3339,6 +3663,332 @@ CASE_GROUND_STATE,
|
|||
};
|
||||
#endif /* OPT_DEC_RECTOPS */
|
||||
|
||||
#if OPT_VT525_COLORS
|
||||
Const PARSE_T csi_comma_table[] = /* CSI ... , */
|
||||
{
|
||||
/* NUL SOH STX ETX */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* EOT ENQ ACK BEL */
|
||||
CASE_IGNORE,
|
||||
CASE_ENQ,
|
||||
CASE_IGNORE,
|
||||
CASE_BELL,
|
||||
/* BS HT NL VT */
|
||||
CASE_BS,
|
||||
CASE_TAB,
|
||||
CASE_VMOT,
|
||||
CASE_VMOT,
|
||||
/* FF CR SO SI */
|
||||
CASE_VMOT,
|
||||
CASE_CR,
|
||||
CASE_SO,
|
||||
CASE_SI,
|
||||
/* DLE DC1 DC2 DC3 */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* DC4 NAK SYN ETB */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* CAN EM SUB ESC */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_IGNORE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_ESC,
|
||||
/* FS GS RS US */
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
CASE_IGNORE,
|
||||
/* SP ! " # */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* $ % & ' */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* ( ) * + */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* , - . / */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* 0 1 2 3 */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* 4 5 6 7 */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* 8 9 : ; */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* < = > ? */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* @ A B C */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* D E F G */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* H I J K */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* L M N O */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* P Q R S */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* T U V W */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* X Y Z [ */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* \ ] ^ _ */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* ` a b c */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* d e f g */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* h i j k */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* l m n o */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* p q r s */
|
||||
CASE_GROUND_STATE, /* vt520:DECLTOD */
|
||||
CASE_DECTID,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* t u v w */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE, /* vt520:DECRQKT */
|
||||
CASE_GROUND_STATE, /* vt520:DECRPKT */
|
||||
CASE_GROUND_STATE, /* vt520:DECRQKD */
|
||||
/* x y z { */
|
||||
CASE_GROUND_STATE, /* vt520:DECSPMA */
|
||||
CASE_GROUND_STATE, /* vt520:DECUS */
|
||||
CASE_GROUND_STATE, /* vt520:DECDLDA */
|
||||
CASE_GROUND_STATE, /* vt520:DECSZS */
|
||||
/* | } ~ DEL */
|
||||
CASE_DECAC,
|
||||
CASE_DECATC,
|
||||
CASE_GROUND_STATE, /* vt520:DECPS */
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x80 0x81 0x82 0x83 */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x84 0x85 0x86 0x87 */
|
||||
CASE_IND,
|
||||
CASE_NEL,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x88 0x89 0x8a 0x8b */
|
||||
CASE_HTS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x8c 0x8d 0x8e 0x8f */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_RI,
|
||||
CASE_SS2,
|
||||
CASE_SS3,
|
||||
/* 0x90 0x91 0x92 0x93 */
|
||||
CASE_DCS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* 0x94 0x95 0x96 0x97 */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_SPA,
|
||||
CASE_EPA,
|
||||
/* 0x98 0x99 0x9a 0x9b */
|
||||
CASE_SOS,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECID,
|
||||
CASE_CSI_STATE,
|
||||
/* 0x9c 0x9d 0x9e 0x9f */
|
||||
CASE_ST,
|
||||
CASE_OSC,
|
||||
CASE_PM,
|
||||
CASE_APC,
|
||||
/* nobreakspace exclamdown cent sterling */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* currency yen brokenbar section */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* diaeresis copyright ordfeminine guillemotleft */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* notsign hyphen registered macron */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* degree plusminus twosuperior threesuperior */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* acute mu paragraph periodcentered */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* cedilla onesuperior masculine guillemotright */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* onequarter onehalf threequarters questiondown */
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
CASE_CSI_IGNORE,
|
||||
/* Agrave Aacute Acircumflex Atilde */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Adiaeresis Aring AE Ccedilla */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Egrave Eacute Ecircumflex Ediaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Igrave Iacute Icircumflex Idiaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Eth Ntilde Ograve Oacute */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Ocircumflex Otilde Odiaeresis multiply */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Ooblique Ugrave Uacute Ucircumflex */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* Udiaeresis Yacute Thorn ssharp */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* agrave aacute acircumflex atilde */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* adiaeresis aring ae ccedilla */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* egrave eacute ecircumflex ediaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* igrave iacute icircumflex idiaeresis */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* eth ntilde ograve oacute */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECTID,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* ocircumflex otilde odiaeresis division */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* oslash ugrave uacute ucircumflex */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
/* udiaeresis yacute thorn ydiaeresis */
|
||||
CASE_DECAC,
|
||||
CASE_DECATC,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
};
|
||||
#endif /* OPT_VT525_COLORS */
|
||||
|
||||
Const PARSE_T dec_table[] = /* CSI ? */
|
||||
{
|
||||
/* NUL SOH STX ETX */
|
||||
|
@ -3450,7 +4100,7 @@ CASE_GRAPHICS_ATTRIBUTES,
|
|||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECST8C,
|
||||
/* X Y Z [ */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
|
@ -3610,7 +4260,7 @@ CASE_GRAPHICS_ATTRIBUTES,
|
|||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
CASE_DECST8C,
|
||||
/* Ooblique Ugrave Uacute Ucircumflex */
|
||||
CASE_GROUND_STATE,
|
||||
CASE_GROUND_STATE,
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
# $XTermId: VTparse.def,v 1.66 2022/11/24 13:58:46 tom Exp $
|
||||
# $XTermId: VTparse.def,v 1.72 2023/12/27 22:45:19 tom Exp $
|
||||
#
|
||||
# vile:confmode rs=lf
|
||||
# -----------------------------------------------------------------------------
|
||||
# this file is part of xterm
|
||||
#
|
||||
# Copyright 1996-2021,2022 by Thomas E. Dickey
|
||||
#
|
||||
# Copyright 1996-2022,2023 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
@ -221,3 +221,11 @@ CASE_XTERM_SHIFT_ESCAPE # XTSHIFTESCAPE
|
|||
CASE_DECSSDT
|
||||
CASE_DECSASD
|
||||
CASE_XTERM_REPORT_MOD_FKEYS # XTQMODKEYS
|
||||
CASE_DECRQDE
|
||||
CASE_DECRQUPSS
|
||||
CASE_CSI_AMP_STATE
|
||||
CASE_CSI_COMMA_STATE
|
||||
CASE_DECAC
|
||||
CASE_DECATC
|
||||
CASE_DECTID
|
||||
CASE_DECST8C
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: VTparse.h,v 1.69 2019/02/10 23:34:21 tom Exp $ */
|
||||
/* $XTermId: VTparse.h,v 1.72 2023/11/24 13:18:38 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1996-2018,2019 by Thomas E. Dickey
|
||||
* Copyright 1996-2019,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -51,10 +51,13 @@ typedef unsigned char PARSE_T;
|
|||
extern Const PARSE_T ansi_table[];
|
||||
extern Const PARSE_T cigtable[];
|
||||
extern Const PARSE_T csi2_table[];
|
||||
extern Const PARSE_T csi_amp_table[];
|
||||
extern Const PARSE_T csi_dec_dollar_table[];
|
||||
extern Const PARSE_T csi_ex_table[];
|
||||
extern Const PARSE_T csi_quo_table[];
|
||||
extern Const PARSE_T csi_sp_table[];
|
||||
extern Const PARSE_T csi_table[];
|
||||
extern Const PARSE_T csi_tick_table[];
|
||||
extern Const PARSE_T dec2_table[];
|
||||
extern Const PARSE_T dec3_table[];
|
||||
extern Const PARSE_T dec_table[];
|
||||
|
@ -65,8 +68,6 @@ extern Const PARSE_T scrtable[];
|
|||
extern Const PARSE_T scs96table[];
|
||||
extern Const PARSE_T scstable[];
|
||||
extern Const PARSE_T sos_table[];
|
||||
extern Const PARSE_T csi_dec_dollar_table[];
|
||||
extern Const PARSE_T csi_tick_table[];
|
||||
|
||||
#if OPT_DEC_RECTOPS
|
||||
extern Const PARSE_T csi_dollar_table[];
|
||||
|
@ -79,6 +80,10 @@ extern Const PARSE_T vt52_esc_table[];
|
|||
extern Const PARSE_T vt52_ignore_table[];
|
||||
#endif
|
||||
|
||||
#if OPT_VT525_COLORS
|
||||
extern Const PARSE_T csi_comma_table[];
|
||||
#endif
|
||||
|
||||
#if OPT_WIDE_CHARS
|
||||
extern Const PARSE_T esc_pct_table[];
|
||||
extern Const PARSE_T scs_amp_table[];
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: button.c,v 1.646 2022/11/25 00:26:32 tom Exp $ */
|
||||
/* $XTermId: button.c,v 1.663 2024/04/19 07:42:00 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1999-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -77,6 +77,7 @@ button.c Handles button events in the terminal emulator.
|
|||
#include <menu.h>
|
||||
#include <charclass.h>
|
||||
#include <xstrings.h>
|
||||
#include <xterm_io.h>
|
||||
|
||||
#if OPT_SELECT_REGEX
|
||||
#if defined(HAVE_PCRE2POSIX_H)
|
||||
|
@ -1302,8 +1303,9 @@ eventColBetween(TScreen *screen, XEvent *event) /* must be XButtonEvent */
|
|||
}
|
||||
|
||||
static int
|
||||
ReadLineMovePoint(TScreen *screen, int col, int ldelta)
|
||||
ReadLineMovePoint(XtermWidget xw, int col, int ldelta)
|
||||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
Char line[6];
|
||||
unsigned count = 0;
|
||||
|
||||
|
@ -1314,13 +1316,13 @@ ReadLineMovePoint(TScreen *screen, int col, int ldelta)
|
|||
line[count++] = ANSI_CSI;
|
||||
} else {
|
||||
line[count++] = ANSI_ESC;
|
||||
line[count++] = '['; /* XXX maybe sometimes O is better? */
|
||||
line[count++] = (xw->keyboard.flags & MODE_DECCKM) ? 'O' : '[';
|
||||
}
|
||||
line[count] = CharOf(col > 0 ? 'C' : 'D');
|
||||
if (col < 0)
|
||||
col = -col;
|
||||
while (col--)
|
||||
v_write(screen->respond, line, 3);
|
||||
v_write(screen->respond, line, (size_t) 3);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1328,12 +1330,16 @@ static int
|
|||
ReadLineDelete(TScreen *screen, CELL *cell1, CELL *cell2)
|
||||
{
|
||||
int del;
|
||||
Char erases[2];
|
||||
|
||||
erases[0] = (Char) get_tty_erase(screen->respond, XTERM_ERASE, "pty");
|
||||
erases[1] = 0;
|
||||
|
||||
del = (cell2->col - cell1->col) + ((cell2->row - cell1->row) * MaxCols(screen));
|
||||
if (del <= 0) /* Just in case... */
|
||||
return 0;
|
||||
while (del--)
|
||||
v_write(screen->respond, (const Char *) "\177", 1);
|
||||
v_write(screen->respond, erases, (size_t) 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1348,13 +1354,13 @@ readlineExtend(XtermWidget xw, XEvent *event)
|
|||
if (isClick1_clean(xw, my_event)
|
||||
&& SCREEN_FLAG(screen, click1_moves)
|
||||
&& rowOnCurrentLine(screen, eventRow(screen, event), &ldelta1)) {
|
||||
ReadLineMovePoint(screen, eventColBetween(screen, event), ldelta1);
|
||||
ReadLineMovePoint(xw, eventColBetween(screen, event), ldelta1);
|
||||
}
|
||||
if (isDoubleClick3(xw, screen, my_event)
|
||||
&& SCREEN_FLAG(screen, dclick3_deletes)
|
||||
&& rowOnCurrentLine(screen, screen->startSel.row, &ldelta1)
|
||||
&& rowOnCurrentLine(screen, screen->endSel.row, &ldelta2)) {
|
||||
ReadLineMovePoint(screen, screen->endSel.col, ldelta2);
|
||||
ReadLineMovePoint(xw, screen->endSel.col, ldelta2);
|
||||
ReadLineDelete(screen, &screen->startSel, &(screen->endSel));
|
||||
}
|
||||
}
|
||||
|
@ -1388,7 +1394,7 @@ DiredButton(Widget w,
|
|||
Line[2] = 'G';
|
||||
Line[3] = CharOf(' ' + col);
|
||||
Line[4] = CharOf(' ' + line);
|
||||
v_write(screen->respond, Line, 5);
|
||||
v_write(screen->respond, Line, (size_t) 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1436,13 +1442,12 @@ ReadLineButton(Widget w,
|
|||
if (col == 0)
|
||||
goto finish;
|
||||
Line[0] = ANSI_ESC;
|
||||
/* XXX: sometimes it is better to send '['? */
|
||||
Line[1] = 'O';
|
||||
Line[1] = (xw->keyboard.flags & MODE_DECCKM) ? 'O' : '[';
|
||||
Line[2] = CharOf(col > 0 ? 'C' : 'D');
|
||||
if (col < 0)
|
||||
col = -col;
|
||||
while (col--)
|
||||
v_write(screen->respond, Line, 3);
|
||||
v_write(screen->respond, Line, (size_t) 3);
|
||||
finish:
|
||||
if (event->type == ButtonRelease)
|
||||
do_select_end(xw, event, params, num_params, False);
|
||||
|
@ -1473,7 +1478,7 @@ ViButton(Widget w,
|
|||
Char Line[6];
|
||||
|
||||
Line[0] = ANSI_ESC; /* force an exit from insert-mode */
|
||||
v_write(pty, Line, 1);
|
||||
v_write(pty, Line, (size_t) 1);
|
||||
|
||||
if (line < 0) {
|
||||
line = -line;
|
||||
|
@ -1482,7 +1487,7 @@ ViButton(Widget w,
|
|||
Line[0] = CONTROL('p');
|
||||
}
|
||||
while (--line >= 0)
|
||||
v_write(pty, Line, 1);
|
||||
v_write(pty, Line, (size_t) 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1665,6 +1670,8 @@ DECtoASCII(unsigned ch)
|
|||
if (xtermIsDecGraphic(ch)) {
|
||||
ch = CharOf("###########+++++##-##++++|######"[ch]);
|
||||
/* 01234567890123456789012345678901 */
|
||||
} else {
|
||||
ch = '?'; /* DEC Technical has no mapping */
|
||||
}
|
||||
return ch;
|
||||
}
|
||||
|
@ -1697,20 +1704,22 @@ UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result)
|
|||
|
||||
if (len != 0) {
|
||||
PtyData data;
|
||||
Boolean save_vt100 = screen->vt100_graphics;
|
||||
|
||||
fakePtyData(&data, s, s + len);
|
||||
screen->vt100_graphics = False; /* temporary override */
|
||||
while (decodeUtf8(screen, &data)) {
|
||||
Bool fails = False;
|
||||
Bool extra = False;
|
||||
IChar value;
|
||||
skipPtyData(&data, value);
|
||||
if (value == UCS_REPL) {
|
||||
if (is_UCS_SPECIAL(value)) {
|
||||
fails = True;
|
||||
} else if (value < 256) {
|
||||
AddChar(&buffer, &used, offset, CharOf(value));
|
||||
} else {
|
||||
unsigned eqv = ucs2dec(screen, value);
|
||||
if (xtermIsDecGraphic(eqv)) {
|
||||
if (xtermIsInternalCs(eqv)) {
|
||||
AddChar(&buffer, &used, offset, DECtoASCII(eqv));
|
||||
} else {
|
||||
eqv = AsciiEquivs(value);
|
||||
|
@ -1740,6 +1749,7 @@ UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result)
|
|||
AddChar(&buffer, &used, offset, ' ');
|
||||
}
|
||||
AddChar(&buffer, &used, offset, '\0');
|
||||
screen->vt100_graphics = save_vt100;
|
||||
*result = (unsigned long) (offset - 1);
|
||||
} else {
|
||||
*result = 0;
|
||||
|
@ -2278,7 +2288,7 @@ GettingSelection(Display *dpy, Atom type, Char *line, unsigned long len)
|
|||
#ifdef VMS
|
||||
# define tty_vwrite(pty,lag,l) tt_write(lag,l)
|
||||
#else /* !( VMS ) */
|
||||
# define tty_vwrite(pty,lag,l) v_write(pty,lag,l)
|
||||
# define tty_vwrite(pty,lag,l) v_write(pty,lag,(size_t) l)
|
||||
#endif /* defined VMS */
|
||||
|
||||
#if OPT_PASTE64
|
||||
|
@ -2454,14 +2464,18 @@ _qWriteSelectionData(XtermWidget xw, Char *lag, size_t length)
|
|||
#endif /* OPT_PASTE64 */
|
||||
#if OPT_READLINE
|
||||
if (SCREEN_FLAG(screen, paste_quotes)) {
|
||||
Char quote[2];
|
||||
quote[0] = (Char) get_tty_lnext(screen->respond, XTERM_LNEXT, "pty");
|
||||
quote[1] = 0;
|
||||
TRACE(("writing quoted selection data %s\n", visibleChars(lag, length)));
|
||||
while (length--) {
|
||||
tty_vwrite(screen->respond, (const Char *) "\026", 1); /* Control-V */
|
||||
tty_vwrite(screen->respond, quote, 1);
|
||||
tty_vwrite(screen->respond, lag++, 1);
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
TRACE(("writing base64 padding %s\n", visibleChars(lag, length)));
|
||||
TRACE(("writing selection data %s\n", visibleChars(lag, length)));
|
||||
tty_vwrite(screen->respond, lag, length);
|
||||
}
|
||||
}
|
||||
|
@ -2469,14 +2483,9 @@ _qWriteSelectionData(XtermWidget xw, Char *lag, size_t length)
|
|||
static void
|
||||
_WriteSelectionData(XtermWidget xw, Char *line, size_t length)
|
||||
{
|
||||
/* Write data to pty a line at a time. */
|
||||
/* Doing this one line at a time may no longer be necessary
|
||||
because v_write has been re-written. */
|
||||
|
||||
#if OPT_PASTE64
|
||||
#if OPT_PASTE64 || OPT_READLINE
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
#endif
|
||||
Char *lag, *end;
|
||||
|
||||
/* in the VMS version, if tt_pasting isn't set to True then qio
|
||||
reads aren't blocked and an infinite loop is entered, where the
|
||||
|
@ -2486,30 +2495,23 @@ _WriteSelectionData(XtermWidget xw, Char *line, size_t length)
|
|||
tt_pasting = True;
|
||||
#endif
|
||||
|
||||
end = &line[length];
|
||||
lag = line;
|
||||
|
||||
#if OPT_PASTE64
|
||||
if (screen->base64_paste) {
|
||||
_qWriteSelectionData(xw, lag, (size_t) (end - lag));
|
||||
_qWriteSelectionData(xw, line, length);
|
||||
base64_flush(screen);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
if (!SCREEN_FLAG(screen, paste_literal_nl)) {
|
||||
Char *cp;
|
||||
for (cp = line; cp != end; cp++) {
|
||||
if (*cp == '\n') {
|
||||
*cp = '\r';
|
||||
_qWriteSelectionData(xw, lag, (size_t) (cp - lag + 1));
|
||||
lag = cp + 1;
|
||||
size_t n;
|
||||
for (n = 0; n < length; ++n) {
|
||||
if (line[n] == '\n') {
|
||||
line[n] = '\r';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (lag != end) {
|
||||
_qWriteSelectionData(xw, lag, (size_t) (end - lag));
|
||||
}
|
||||
_qWriteSelectionData(xw, line, length);
|
||||
}
|
||||
#ifdef VMS
|
||||
tt_pasting = False;
|
||||
|
@ -2551,11 +2553,82 @@ removeControls(XtermWidget xw, char *value)
|
|||
dst = strlen(value);
|
||||
} else {
|
||||
size_t src = 0;
|
||||
Boolean *disallowed = screen->disallow_paste_ops;
|
||||
TERMIO_STRUCT data;
|
||||
char current_chars[epLAST];
|
||||
|
||||
if (disallowed[epSTTY] && ttyGetAttr(screen->respond, &data) == 0) {
|
||||
int n;
|
||||
int disabled = xtermDisabledChar();
|
||||
|
||||
TRACE(("disallow(STTY):"));
|
||||
memcpy(current_chars, disallowed, sizeof(current_chars));
|
||||
|
||||
for (n = 0; n < NCCS; ++n) {
|
||||
PasteControls nc = (data.c_cc[n] < 32
|
||||
? data.c_cc[n]
|
||||
: (data.c_cc[n] == 127
|
||||
? epDEL
|
||||
: epLAST));
|
||||
if (nc == epNUL || nc == epLAST)
|
||||
continue;
|
||||
if (CharOf(data.c_cc[n]) == CharOf(disabled))
|
||||
continue;
|
||||
if ((n == VMIN || n == VTIME) && !(data.c_lflag & ICANON))
|
||||
continue;
|
||||
switch (n) {
|
||||
/* POSIX */
|
||||
case VEOF:
|
||||
case VEOL:
|
||||
case VERASE:
|
||||
case VINTR:
|
||||
case VKILL:
|
||||
case VQUIT:
|
||||
case VSTART:
|
||||
case VSTOP:
|
||||
case VSUSP:
|
||||
/* system-dependent */
|
||||
#ifdef VDISCARD
|
||||
case VDISCARD:
|
||||
#endif
|
||||
#ifdef VDSUSP
|
||||
case VDSUSP:
|
||||
#endif
|
||||
#ifdef VEOL2
|
||||
case VEOL2:
|
||||
#endif
|
||||
#ifdef VLNEXT
|
||||
case VLNEXT:
|
||||
#endif
|
||||
#ifdef VREPRINT
|
||||
case VREPRINT:
|
||||
#endif
|
||||
#ifdef VSTATUS
|
||||
case VSTATUS:
|
||||
#endif
|
||||
#ifdef VSWTC
|
||||
case VSWTC: /* System V SWTCH */
|
||||
#endif
|
||||
#ifdef VWERASE
|
||||
case VWERASE:
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
if (nc != epLAST) {
|
||||
TRACE((" \\%03o", data.c_cc[n]));
|
||||
current_chars[nc] = 1;
|
||||
}
|
||||
}
|
||||
TRACE(("\n"));
|
||||
disallowed = current_chars;
|
||||
}
|
||||
while ((value[dst] = value[src]) != '\0') {
|
||||
int ch = CharOf(value[src++]);
|
||||
|
||||
#define ReplacePaste(n) \
|
||||
if (screen->disallow_paste_ops[n]) \
|
||||
if (disallowed[n]) \
|
||||
value[dst] = ' '
|
||||
|
||||
if (ch < 32) {
|
||||
|
@ -2826,7 +2899,7 @@ HandleInsertSelection(Widget w,
|
|||
&& (okSendMousePos(xw) == MOUSE_OFF)
|
||||
&& SCREEN_FLAG(screen, paste_moves)
|
||||
&& rowOnCurrentLine(screen, eventRow(screen, event), &ldelta))
|
||||
ReadLineMovePoint(screen, eventColBetween(screen, event), ldelta);
|
||||
ReadLineMovePoint(xw, eventColBetween(screen, event), ldelta);
|
||||
#endif /* OPT_READLINE */
|
||||
|
||||
xtermGetSelection(w, event->xbutton.time, params, *num_params, NULL);
|
||||
|
@ -3101,7 +3174,7 @@ EndExtend(XtermWidget xw,
|
|||
break;
|
||||
}
|
||||
}
|
||||
v_write(screen->respond, line, count);
|
||||
v_write(screen->respond, line, (size_t) count);
|
||||
UnHiliteText(xw);
|
||||
}
|
||||
}
|
||||
|
@ -3932,6 +4005,7 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc)
|
|||
indexed)) != 0) {
|
||||
int len = (int) strlen(search);
|
||||
int col;
|
||||
int offset;
|
||||
int best_col = -1;
|
||||
int best_len = -1;
|
||||
|
||||
|
@ -3940,12 +4014,13 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc)
|
|||
endc->row = 0;
|
||||
endc->col = 0;
|
||||
|
||||
for (col = 0; indexed[col] < len; ++col) {
|
||||
for (col = 0; (offset = indexed[col]) < len; ++col) {
|
||||
if (regexec(&preg,
|
||||
search + indexed[col],
|
||||
(size_t) 1, &match, 0) == 0) {
|
||||
int start_inx = (int) (match.rm_so + indexed[col]);
|
||||
int finis_inx = (int) (match.rm_eo + indexed[col]);
|
||||
search + offset,
|
||||
(size_t) 1, &match,
|
||||
col ? REG_NOTBOL : 0) == 0) {
|
||||
int start_inx = (int) (match.rm_so + offset);
|
||||
int finis_inx = (int) (match.rm_eo + offset);
|
||||
int start_col = indexToCol(indexed, len, start_inx);
|
||||
int finis_col = indexToCol(indexed, len, finis_inx);
|
||||
|
||||
|
@ -3972,11 +4047,10 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc)
|
|||
indexed[best_col],
|
||||
indexed[best_nxt]));
|
||||
TRACE(("matched:%d:%s\n",
|
||||
indexed[best_nxt] + 1 -
|
||||
indexed[best_nxt] -
|
||||
indexed[best_col],
|
||||
visibleChars((Char *) (search + indexed[best_col]),
|
||||
(unsigned) (indexed[best_nxt] +
|
||||
1 -
|
||||
(unsigned) (indexed[best_nxt] -
|
||||
indexed[best_col]))));
|
||||
}
|
||||
free(search);
|
||||
|
@ -4947,14 +5021,15 @@ _OwnSelection(XtermWidget xw,
|
|||
SelectedCells *tcp = &(screen->clipboard_data);
|
||||
TRACE(("saving selection to clipboard buffer\n"));
|
||||
scp = &(screen->selected_cells[CLIPBOARD_CODE]);
|
||||
if ((buf = (Char *) malloc((size_t) scp->data_length)) == 0)
|
||||
if ((buf = (Char *) malloc((size_t) scp->data_length)) == 0) {
|
||||
SysError(ERROR_BMALLOC2);
|
||||
|
||||
free(tcp->data_buffer);
|
||||
memcpy(buf, scp->data_buffer, scp->data_length);
|
||||
tcp->data_buffer = buf;
|
||||
tcp->data_limit = scp->data_length;
|
||||
tcp->data_length = scp->data_length;
|
||||
} else {
|
||||
free(tcp->data_buffer);
|
||||
memcpy(buf, scp->data_buffer, scp->data_length);
|
||||
tcp->data_buffer = buf;
|
||||
tcp->data_limit = scp->data_length;
|
||||
tcp->data_length = scp->data_length;
|
||||
}
|
||||
}
|
||||
scp = &(screen->selected_cells[which]);
|
||||
if (scp->data_length == 0) {
|
||||
|
@ -5094,6 +5169,8 @@ SaveText(TScreen *screen,
|
|||
unsigned c;
|
||||
assert(i < (int) ld->lineSize);
|
||||
c = E2A(ld->charData[i]);
|
||||
if (ld->attribs[i] & INVISIBLE)
|
||||
continue;
|
||||
#if OPT_WIDE_CHARS
|
||||
/* We want to strip out every occurrence of HIDDEN_CHAR AFTER a
|
||||
* wide character.
|
||||
|
@ -5432,7 +5509,7 @@ EditorButton(XtermWidget xw, XButtonEvent *event)
|
|||
|
||||
/* Transmit key sequence to process running under xterm */
|
||||
TRACE(("EditorButton -> %s\n", visibleChars(line, count)));
|
||||
v_write(pty, line, count);
|
||||
v_write(pty, line, (size_t) count);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: cachedGCs.c,v 1.81 2021/09/16 19:48:02 tom Exp $ */
|
||||
/* $XTermId: cachedGCs.c,v 1.82 2024/05/17 20:59:36 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2007-2019,2021 by Thomas E. Dickey
|
||||
* Copyright 2007-2021,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -92,7 +92,7 @@ traceCgsEnum(CgsEnum value)
|
|||
CASE(BoldReverse);
|
||||
CASE(Border);
|
||||
CASE(Filler);
|
||||
#if OPT_BOX_CHARS
|
||||
#if OPT_BOX_CHARS || OPT_WIDE_CHARS
|
||||
CASE(Line);
|
||||
CASE(Dots);
|
||||
#endif
|
||||
|
@ -343,7 +343,7 @@ newCache(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId, CgsCache * me)
|
|||
xgcv.graphics_exposures = True; /* default */
|
||||
xgcv.function = GXcopy;
|
||||
break;
|
||||
#if OPT_BOX_CHARS
|
||||
#if OPT_BOX_CHARS || OPT_WIDE_CHARS
|
||||
case gcLine:
|
||||
mask |= (GCGraphicsExposures | GCFunction);
|
||||
xgcv.graphics_exposures = True; /* default */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $XTermId: charclass.c,v 1.46 2023/01/04 09:26:46 tom Exp $ */
|
||||
/* $XTermId: charclass.c,v 1.50 2023/04/01 00:11:47 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2002-2022,2023 by Thomas E. Dickey
|
||||
|
@ -262,8 +262,8 @@ report_wide_char_class(void)
|
|||
printf("from these overlapping intervals of character codes:\n");
|
||||
for (i = classtab[0].first; i <= classtab[0].last; i++) {
|
||||
printf("\tU+%04X .. U+%04X %s\n",
|
||||
classtab[i].first,
|
||||
classtab[i].last,
|
||||
(unsigned) classtab[i].first,
|
||||
(unsigned) classtab[i].last,
|
||||
class_name((Classes) classtab[i].cclass));
|
||||
}
|
||||
printf("\n");
|
||||
|
@ -311,7 +311,7 @@ expected_class(int wch)
|
|||
{
|
||||
int result = wch;
|
||||
wint_t ch = (wint_t) wch;
|
||||
if (ch == '\0' || ch == '\t') {
|
||||
if (wch < 0 || ch == '\0' || ch == '\t') {
|
||||
result = BLANK;
|
||||
} else if (iswcntrl(ch)) {
|
||||
result = CNTRL;
|
||||
|
|
1441
app/xterm/charproc.c
1441
app/xterm/charproc.c
File diff suppressed because it is too large
Load diff
1705
app/xterm/charsets.c
1705
app/xterm/charsets.c
File diff suppressed because it is too large
Load diff
1302
app/xterm/charsets.dat
Normal file
1302
app/xterm/charsets.dat
Normal file
File diff suppressed because it is too large
Load diff
2286
app/xterm/charsets.h
Normal file
2286
app/xterm/charsets.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,9 @@
|
|||
dnl $XTermId: configure.in,v 1.392 2023/01/08 11:41:52 tom Exp $
|
||||
dnl $XTermId: configure.in,v 1.402 2024/05/11 17:24:20 tom Exp $
|
||||
dnl
|
||||
dnl -----------------------------------------------------------------------------
|
||||
dnl this file is part of xterm
|
||||
dnl
|
||||
dnl Copyright 1997-2022,2023 by Thomas E. Dickey
|
||||
dnl Copyright 1997-2023,2024 by Thomas E. Dickey
|
||||
dnl
|
||||
dnl All Rights Reserved
|
||||
dnl
|
||||
|
@ -82,6 +82,7 @@ AM_LANGINFO_CODESET
|
|||
CF_SIG_ATOMIC_T
|
||||
AC_CHECK_TYPE(time_t, long)
|
||||
CF_TYPE_CC_T
|
||||
CF_TYPE_NFDS_T
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_UID_T
|
||||
|
@ -99,12 +100,15 @@ AC_CHECK_FUNCS( \
|
|||
unsetenv \
|
||||
sched_yield \
|
||||
setpgid \
|
||||
strftime \
|
||||
setsid \
|
||||
tcgetattr \
|
||||
waitpid \
|
||||
wcswidth \
|
||||
wcwidth )
|
||||
CF_FUNC_GETTIME
|
||||
CF_FUNC_STRFTIME
|
||||
CF_MKSTEMP
|
||||
CF_SETITIMER
|
||||
CF_UTMP
|
||||
CF_STRUCT_LASTLOG
|
||||
CF_POSIX_SAVED_IDS
|
||||
|
@ -163,7 +167,7 @@ cf_name=`echo "$program_transform_name" | sed -e '[s,\\$\\$,$,g]'`
|
|||
cf_name=`echo xterm |sed -e "$cf_name"`
|
||||
AC_MSG_CHECKING(for symbolic link to create to $cf_name)
|
||||
AC_ARG_WITH(xterm-symlink,
|
||||
[ --with-xterm-symlink=XXX make symbolic link to installed xterm],
|
||||
[[ --with-xterm-symlink[=XXX] make symbolic link to installed xterm]],
|
||||
[with_symlink=$withval],
|
||||
[with_symlink=xterm])
|
||||
AC_MSG_RESULT($with_symlink)
|
||||
|
@ -200,7 +204,7 @@ AC_MSG_RESULT($disable_setgid)
|
|||
|
||||
AC_MSG_CHECKING(if you want to run xterm setuid to a given user)
|
||||
AC_ARG_WITH(setuid,
|
||||
[ --with-setuid=XXX use the given setuid user],
|
||||
[[ --with-setuid[=XXX] use the given setuid user]],
|
||||
[use_given_setuid=$withval],
|
||||
[use_given_setuid=no])
|
||||
AC_MSG_RESULT($use_given_setuid)
|
||||
|
@ -217,7 +221,7 @@ fi
|
|||
|
||||
AC_MSG_CHECKING(if you want to run xterm setgid to match utmp/utmpx file)
|
||||
AC_ARG_WITH(utmp-setgid,
|
||||
[ --with-utmp-setgid=XXX use setgid to match utmp/utmpx file],
|
||||
[[ --with-utmp-setgid[=XXX] use setgid to match utmp/utmpx file]],
|
||||
[use_utmp_setgid=$withval],
|
||||
[use_utmp_setgid=no])
|
||||
AC_MSG_RESULT($use_utmp_setgid)
|
||||
|
@ -260,6 +264,10 @@ if test "$use_utempter" = yes ; then
|
|||
fi
|
||||
fi
|
||||
|
||||
# We use these for the manpage:
|
||||
CF_WITH_UTMP_PATH
|
||||
CF_WITH_WTMP_PATH
|
||||
|
||||
### checks for external data
|
||||
CF_ERRNO
|
||||
CF_TTY_GROUP
|
||||
|
@ -296,7 +304,7 @@ CF_TERMIOS_TYPES
|
|||
# the feature if it is unwanted.
|
||||
AC_MSG_CHECKING(if we expect to use the Xcursor library)
|
||||
CF_ARG_DISABLE(xcursor,
|
||||
[ --disable-xcursor disable cursorTheme resource],
|
||||
[ --disable-xcursor disable cursorTheme resource],
|
||||
[enable_xcursor=no],
|
||||
[enable_xcursor=yes])
|
||||
AC_MSG_RESULT($enable_xcursor)
|
||||
|
@ -343,6 +351,11 @@ AC_MSG_RESULT($default_termid)
|
|||
case $default_termid in
|
||||
(vt*) default_termid=`echo $default_termid | sed -e 's/^..//'`
|
||||
;;
|
||||
([[1-9]][[0-9]][[0-9]]|[[1-9]][[0-9]])
|
||||
;;
|
||||
(*)
|
||||
AC_MSG_ERROR([expected a number, not $default_termid])
|
||||
;;
|
||||
esac
|
||||
AC_DEFINE_UNQUOTED(DFT_DECID,"$default_termid",[default terminal-id])
|
||||
AC_SUBST(default_termid)
|
||||
|
@ -415,7 +428,7 @@ if test "$cf_tic_prog" = yes ; then
|
|||
fi
|
||||
AC_MSG_CHECKING(for private terminfo-directory)
|
||||
AC_ARG_WITH(own-terminfo,
|
||||
[ --with-own-terminfo=P set default $TERMINFO (default: from environment)],
|
||||
[[ --with-own-terminfo[=P] set default $TERMINFO (default: from environment)]],
|
||||
[TERMINFO_DIR=$withval],
|
||||
[TERMINFO_DIR=${TERMINFO-none}])
|
||||
AC_MSG_RESULT($TERMINFO_DIR)
|
||||
|
@ -759,7 +772,7 @@ CF_INPUT_METHOD
|
|||
test "$cf_cv_input_method" = no && enable_ximp=no
|
||||
if test "$enable_ximp" != no ; then
|
||||
if test "$enable_i18n" = no ; then
|
||||
AC_MSG_WARN(input-methor relies upon internationalization)
|
||||
AC_MSG_WARN(input-method relies upon internationalization)
|
||||
enable_ximp=no
|
||||
fi
|
||||
fi
|
||||
|
@ -839,10 +852,10 @@ else
|
|||
fi
|
||||
|
||||
AC_MSG_CHECKING(if you want support for mouse in readline applications)
|
||||
CF_ARG_ENABLE(readline-mouse,
|
||||
[ --enable-readline-mouse enable support for mouse in readline applications],
|
||||
[enable_readline_mouse=yes],
|
||||
[enable_readline_mouse=no])
|
||||
CF_ARG_DISABLE(readline-mouse,
|
||||
[ --disable-readline-mouse disable support for mouse in readline applications],
|
||||
[enable_readline_mouse=no],
|
||||
[enable_readline_mouse=yes])
|
||||
AC_MSG_RESULT($enable_readline_mouse)
|
||||
if test "$enable_readline_mouse" = yes ; then
|
||||
AC_DEFINE(OPT_READLINE,1,[Define to 1 to enable support for mouse in readline applications])
|
||||
|
@ -1084,7 +1097,11 @@ if test "$enable_regis_graphics" = yes || test "$enable_sixel_graphics" = yes ;
|
|||
EXTRAHDRS="$EXTRAHDRS graphics.h"
|
||||
EXTRASRCS="$EXTRASRCS graphics.c"
|
||||
EXTRAOBJS="$EXTRAOBJS graphics.o"
|
||||
STRINGS_MAX=600000
|
||||
else
|
||||
STRINGS_MAX=20000
|
||||
fi
|
||||
AC_SUBST(STRINGS_MAX)
|
||||
|
||||
AC_MSG_CHECKING(if you want sixel screen dump support)
|
||||
CF_ARG_DISABLE(print-graphics,
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -20,8 +20,8 @@
|
|||
|
||||
Thomas Dickey
|
||||
XFree86 Project (1996-2006)
|
||||
invisible-island.net (2006-2023)
|
||||
updated for XTerm Patch #378 (2023/01/06)
|
||||
invisible-island.net (2006-2024)
|
||||
updated for XTerm Patch #392 (2024/05/25)
|
||||
|
||||
|
||||
|
||||
|
@ -315,6 +315,7 @@ ESC ( C Designate G0 Character Set, VT100, ISO 2022.
|
|||
There are a few other 94-character sets:
|
||||
C = 0 -> DEC Special Character and Line Drawing Set, VT100.
|
||||
C = < -> DEC Supplemental, VT200.
|
||||
C = < -> User Preferred Selection Set, VT300.
|
||||
C = > -> DEC Technical, VT300.
|
||||
These are documented as 94-character sets (like USASCII)
|
||||
without NRCS:
|
||||
|
@ -413,6 +414,29 @@ DCS Ps ; Ps | Pt ST
|
|||
key value. The key codes correspond to the DEC function-key
|
||||
codes (e.g., F6=17).
|
||||
|
||||
DCS Ps! u Pt ST
|
||||
Assigning User-Preferred Supplemental Sets (DECAUPSS), VT320,
|
||||
VT510. XTerm ignores this in UTF-8 mode, and uses the
|
||||
preferLatin1 resource to choose the default setting.
|
||||
VT320 provides these:
|
||||
DCS 0 ! u % 5 ST -> DEC Supplemental Graphic
|
||||
DCS 1 ! u A ST -> ISO Latin-1 supplemental
|
||||
VT510 adds these:
|
||||
DCS 0 ! u " ? ST -> DEC Greek
|
||||
DCS 0 ! u " 4 ST -> DEC Hebrew
|
||||
DCS 0 ! u % 0 ST -> DEC Turkish
|
||||
DCS 0 ! u & 4 ST -> DEC Cyrillic
|
||||
DCS 1 ! u B ST -> ISO Latin-2 Supplemental
|
||||
DCS 1 ! u F ST -> ISO Greek Supplemental
|
||||
DCS 1 ! u H ST -> ISO Hebrew Supplemental
|
||||
DCS 1 ! u M ST -> ISO Latin-5 Supplemental
|
||||
DCS 1 ! u L ST -> ISO Latin-Cyrillic
|
||||
VT520 accepts a few others (undocumented); xterm adds these:
|
||||
DCS 0 ! u B ST -> United States (USASCII).
|
||||
DCS 0 ! u 0 ST -> DEC Special Character and Line Drawing
|
||||
Set.
|
||||
DCS 0 ! u > ST -> DEC Technical.
|
||||
|
||||
DCS $ q Pt ST
|
||||
Request Status String (DECRQSS), VT420 and up.
|
||||
The string following the "q" is one of the following:
|
||||
|
@ -426,7 +450,11 @@ DCS $ q Pt ST
|
|||
$ | -> DECSCPP
|
||||
$ } -> DECSASD
|
||||
$ ~ -> DECSSDT
|
||||
* x -> DECSACE
|
||||
* | -> DECSNLS
|
||||
, | -> DECAC (VT525 only)
|
||||
, } -> DECATC (VT525 only)
|
||||
> Pm m -> XTQMODKEYS (xterm)
|
||||
xterm responds with DCS 1 $ r Pt ST for valid requests,
|
||||
replacing the Pt with the corresponding CSI string, or DCS 0 $
|
||||
r ST for invalid requests.
|
||||
|
@ -615,7 +643,7 @@ CSI ? Pi ; Pa ; Pv S
|
|||
sizes, but disallows modifying those sizes because that is
|
||||
done once, using resource-values.
|
||||
o Graphics geometry is not necessarily the same as "window
|
||||
size" (see the dtterm window manipulation extensions).
|
||||
size" (see the XTWINOPS window manipulation extensions).
|
||||
XTerm limits the maximum graphics geometry according to
|
||||
the maxGraphicSize resource.
|
||||
The maxGraphicSize resource can be either an explicit
|
||||
|
@ -655,6 +683,9 @@ CSI > Pm T
|
|||
|
||||
(See discussion of Title Modes).
|
||||
|
||||
CSI ? 5 W Reset tab stops to start with column 9, every 8 columns
|
||||
(DECST8C), VT510.
|
||||
|
||||
CSI Ps X Erase Ps Character(s) (default = 1) (ECH).
|
||||
|
||||
CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).
|
||||
|
@ -683,6 +714,7 @@ CSI Ps c Send Device Attributes (Primary DA).
|
|||
-> CSI ? 6 2 ; Ps c ("VT220")
|
||||
-> CSI ? 6 3 ; Ps c ("VT320")
|
||||
-> CSI ? 6 4 ; Ps c ("VT420")
|
||||
-> CSI ? 6 5 ; Ps c ("VT510" to ("VT525")
|
||||
|
||||
The VT100-style response parameters do not mean anything by
|
||||
themselves. VT220 (and higher) parameters do, telling the
|
||||
|
@ -793,16 +825,21 @@ CSI ? Pm h
|
|||
Ps = 4 1 -> more(1) fix (see curses resource).
|
||||
Ps = 4 2 -> Enable National Replacement Character sets
|
||||
(DECNRCM), VT220.
|
||||
Ps = 4 3 -> Enable Graphics Expanded Print Mode (DECGEPM).
|
||||
Ps = 4 3 -> Enable Graphic Expanded Print Mode (DECGEPM),
|
||||
VT340.
|
||||
Ps = 4 4 -> Turn on margin bell, xterm.
|
||||
Ps = 4 4 -> Enable Graphics Print Color Mode (DECGPCM).
|
||||
Ps = 4 5 -> Reverse-wraparound mode, xterm.
|
||||
Ps = 4 5 -> Enable Graphics Print ColorSpace (DECGPCS).
|
||||
Ps = 4 6 -> Start logging, xterm. This is normally
|
||||
disabled by a compile-time option.
|
||||
Ps = 4 4 -> Enable Graphic Print Color Mode (DECGPCM),
|
||||
VT340.
|
||||
Ps = 4 5 -> Reverse-wraparound mode (XTREVWRAP), xterm.
|
||||
Ps = 4 5 -> Enable Graphic Print Color Syntax (DECGPCS),
|
||||
VT340.
|
||||
Ps = 4 6 -> Start logging (XTLOGGING), xterm. This is
|
||||
normally disabled by a compile-time option.
|
||||
Ps = 4 6 -> Graphic Print Background Mode, VT340.
|
||||
Ps = 4 7 -> Use Alternate Screen Buffer, xterm. This may
|
||||
be disabled by the titeInhibit resource.
|
||||
Ps = 4 7 -> Enable Graphics Rotated Print Mode (DECGRPM).
|
||||
Ps = 4 7 -> Enable Graphic Rotated Print Mode (DECGRPM),
|
||||
VT340.
|
||||
Ps = 6 6 -> Application keypad mode (DECNKM), VT320.
|
||||
Ps = 6 7 -> Backarrow key sends backspace (DECBKM), VT340,
|
||||
VT420. This sets the backarrowKey resource to "true".
|
||||
|
@ -829,6 +866,7 @@ CSI ? Pm h
|
|||
This sets the scrollTtyOutput resource to "true".
|
||||
Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt). This
|
||||
sets the scrollKey resource to "true".
|
||||
Ps = 1 0 1 4 -> Enable fastScroll resource, xterm.
|
||||
Ps = 1 0 1 5 -> Enable urxvt Mouse Mode.
|
||||
Ps = 1 0 1 6 -> Enable SGR Mouse PixelMode, xterm.
|
||||
Ps = 1 0 3 4 -> Interpret "meta" key, xterm. This sets the
|
||||
|
@ -853,6 +891,8 @@ CSI ? Pm h
|
|||
is received, xterm. This enables the popOnBell resource.
|
||||
Ps = 1 0 4 4 -> Reuse the most recent data copied to
|
||||
CLIPBOARD, xterm. This enables the keepClipboard resource.
|
||||
Ps = 1 0 4 5 -> Extended Reverse-wraparound mode
|
||||
(XTREVWRAP2), xterm.
|
||||
Ps = 1 0 4 6 -> Enable switching to/from Alternate Screen
|
||||
Buffer, xterm. This works for terminfo-based systems,
|
||||
updating the titeInhibit resource.
|
||||
|
@ -874,7 +914,12 @@ CSI ? Pm h
|
|||
Ps = 1 0 6 0 -> Set legacy keyboard emulation, i.e, X11R6,
|
||||
xterm.
|
||||
Ps = 1 0 6 1 -> Set VT220 keyboard emulation, xterm.
|
||||
Ps = 2 0 0 1 -> Enable readline mouse button-1, xterm.
|
||||
Ps = 2 0 0 2 -> Enable readline mouse button-2, xterm.
|
||||
Ps = 2 0 0 3 -> Enable readline mouse button-3, xterm.
|
||||
Ps = 2 0 0 4 -> Set bracketed paste mode, xterm.
|
||||
Ps = 2 0 0 5 -> Enable readline character-quoting, xterm.
|
||||
Ps = 2 0 0 6 -> Enable readline newline pasting, xterm.
|
||||
|
||||
CSI Ps i Media Copy (MC).
|
||||
Ps = 0 -> Print screen (default).
|
||||
|
@ -924,15 +969,19 @@ CSI ? Pm l
|
|||
Ps = 4 1 -> No more(1) fix (see curses resource).
|
||||
Ps = 4 2 -> Disable National Replacement Character sets
|
||||
(DECNRCM), VT220.
|
||||
Ps = 4 3 -> Disable Graphics Expanded Print Mode (DECGEPM).
|
||||
Ps = 4 3 -> Disable Graphic Expanded Print Mode (DECGEPM),
|
||||
VT340.
|
||||
Ps = 4 4 -> Turn off margin bell, xterm.
|
||||
Ps = 4 4 -> Disable Graphics Print Color Mode (DECGPCM).
|
||||
Ps = 4 5 -> No Reverse-wraparound mode, xterm.
|
||||
Ps = 4 5 -> Disable Graphics Print ColorSpace (DECGPCS).
|
||||
Ps = 4 6 -> Stop logging, xterm. This is normally disabled
|
||||
by a compile-time option.
|
||||
Ps = 4 4 -> Disable Graphic Print Color Mode (DECGPCM),
|
||||
VT340.
|
||||
Ps = 4 5 -> No Reverse-wraparound mode (XTREVWRAP), xterm.
|
||||
Ps = 4 5 -> Disable Graphic Print Color Syntax (DECGPCS),
|
||||
VT340.
|
||||
Ps = 4 6 -> Stop logging (XTLOGGING), xterm. This is
|
||||
normally disabled by a compile-time option.
|
||||
Ps = 4 7 -> Use Normal Screen Buffer, xterm.
|
||||
Ps = 4 7 -> Disable Graphics Rotated Print Mode (DECGRPM).
|
||||
Ps = 4 7 -> Disable Graphic Rotated Print Mode (DECGRPM),
|
||||
VT340.
|
||||
Ps = 6 6 -> Numeric keypad mode (DECNKM), VT320.
|
||||
Ps = 6 7 -> Backarrow key sends delete (DECBKM), VT340,
|
||||
VT420. This sets the backarrowKey resource to "false".
|
||||
|
@ -959,6 +1008,7 @@ CSI ? Pm l
|
|||
(rxvt). This sets the scrollTtyOutput resource to "false".
|
||||
Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).
|
||||
This sets the scrollKey resource to "false".
|
||||
Ps = 1 0 1 4 -> Disable fastScroll resource, xterm.
|
||||
Ps = 1 0 1 5 -> Disable urxvt Mouse Mode.
|
||||
Ps = 1 0 1 6 -> Disable SGR Mouse Pixel-Mode, xterm.
|
||||
Ps = 1 0 3 4 -> Don't interpret "meta" key, xterm. This
|
||||
|
@ -980,6 +1030,8 @@ CSI ? Pm l
|
|||
resource.
|
||||
Ps = 1 0 4 3 -> Disable raising of the window when Control-
|
||||
G is received, xterm. This disables the popOnBell resource.
|
||||
Ps = 1 0 4 5 -> No Extended Reverse-wraparound mode
|
||||
(XTREVWRAP2), xterm.
|
||||
Ps = 1 0 4 6 -> Disable switching to/from Alternate Screen
|
||||
Buffer, xterm. This works for terminfo-based systems,
|
||||
updating the titeInhibit resource. If currently using the
|
||||
|
@ -1004,7 +1056,12 @@ CSI ? Pm l
|
|||
X11R6, xterm.
|
||||
Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style,
|
||||
xterm.
|
||||
Ps = 2 0 0 1 -> Disable readline mouse button-1, xterm.
|
||||
Ps = 2 0 0 2 -> Disable readline mouse button-2, xterm.
|
||||
Ps = 2 0 0 3 -> Disable readline mouse button-3, xterm.
|
||||
Ps = 2 0 0 4 -> Reset bracketed paste mode, xterm.
|
||||
Ps = 2 0 0 5 -> Disable readline character-quoting, xterm.
|
||||
Ps = 2 0 0 6 -> Disable readline newline pasting, xterm.
|
||||
|
||||
CSI Pm m Character Attributes (SGR).
|
||||
Ps = 0 -> Normal (default), VT100.
|
||||
|
@ -1250,11 +1307,8 @@ CSI ? Ps n
|
|||
The last two parameters apply to VT300 & up (keyboard ready)
|
||||
and VT400 & up (LK01) respectively.
|
||||
|
||||
Ps = 5 3 -> Report Locator status. The response is CSI ? 5
|
||||
3 n Locator available, if compiled-in, or CSI ? 5 0 n No
|
||||
Locator, if not.
|
||||
Ps = 5 5 -> Report Locator status. The response is CSI ? 5
|
||||
3 n Locator available, if compiled-in, or CSI ? 5 0 n No
|
||||
0 n Locator available, if compiled-in, or CSI ? 5 3 n No
|
||||
Locator, if not.
|
||||
Ps = 5 6 -> Report Locator type. The response is CSI ? 5 7
|
||||
; 1 n Mouse, if compiled-in, or CSI ? 5 7 ; 0 n Cannot
|
||||
|
@ -1338,9 +1392,9 @@ CSI Pm # p
|
|||
limitations of C#.
|
||||
|
||||
CSI > Ps q
|
||||
Ps = 0 -> Report xterm name and version (XTVERSION). The
|
||||
response is a DSR sequence identifying the version: DCS > |
|
||||
text ST
|
||||
Ps = 0 -> Report xterm name and version (XTVERSION).
|
||||
The response is a DSR sequence identifying the version:
|
||||
DCS > | text ST
|
||||
|
||||
CSI Ps q Load LEDs (DECLL), VT100.
|
||||
Ps = 0 -> Clear all LEDS (default).
|
||||
|
@ -1500,6 +1554,12 @@ CSI Ps ; Ps ; Ps t
|
|||
Ps >= 2 4 -> Resize to Ps lines (DECSLPP), VT340 and VT420.
|
||||
xterm adapts this by resizing its window.
|
||||
|
||||
XTWINOPS 2 2 (save/push title) and 2 3 (restore/pop title)
|
||||
accept an optional third parameter for direct access to the
|
||||
stack. Parameters in the range 1 through 10, may be used to
|
||||
store the title into the stack or retrieve the title from the
|
||||
stack without pushing/popping.
|
||||
|
||||
CSI > Pm t
|
||||
This xterm control sets one or more features of the title
|
||||
modes (XTSMTITLE), xterm. Each parameter enables a single
|
||||
|
@ -1524,12 +1584,25 @@ CSI Pt ; Pl ; Pb ; Pr ; Pm $ t
|
|||
|
||||
CSI u Restore cursor (SCORC, also ANSI.SYS).
|
||||
|
||||
CSI & u User-Preferred Supplemental Set (DECRQUPSS), VT320, VT510.
|
||||
Response is DECAUPSS.
|
||||
|
||||
CSI Ps SP u
|
||||
Set margin-bell volume (DECSMBV), VT520.
|
||||
Ps = 0 , 5 , 6 , 7 , or 8 -> high.
|
||||
Ps = 1 -> off.
|
||||
Ps = 2 , 3 or 4 -> low.
|
||||
|
||||
CSI " v Request Displayed Extent (DECRQDE), VT340, VT420.
|
||||
Response is
|
||||
CSI Ph; Pw; Pc; Pr; Pp " w
|
||||
where
|
||||
Ph is the number of lines of the current page
|
||||
Pw is the number of columns of the current page
|
||||
Pc is the column number at the top-left of the window
|
||||
Pr is the row number at the top-left of the window
|
||||
Pp is the current page number
|
||||
|
||||
CSI Pt ; Pl ; Pb ; Pr ; Pp ; Pt ; Pl ; Pp $ v
|
||||
Copy Rectangular Area (DECCRA), VT400 and up.
|
||||
Pt ; Pl ; Pb ; Pr denotes the rectangle.
|
||||
|
@ -1595,7 +1668,6 @@ CSI Ps # y
|
|||
3 -> omit checksum for cells not explicitly initialized.
|
||||
4 -> do not mask cell value to 8 bits or ignore combining
|
||||
characters.
|
||||
5 -> do not mask cell value to 7 bits.
|
||||
|
||||
CSI Pi ; Pg ; Pt ; Pl ; Pb ; Pr * y
|
||||
Request Checksum of Rectangular Area (DECRQCRA), VT420 and up.
|
||||
|
@ -1718,6 +1790,42 @@ CSI # } Pop video attributes from stack (XTPOPSGR), xterm. Popping
|
|||
restores the video-attributes which were saved using XTPUSHSGR
|
||||
to their previous state.
|
||||
|
||||
CSI Ps; Pf; Pb, |
|
||||
Assign Color (DECAC), VT525 only.
|
||||
Ps selects the color item
|
||||
Pf is the foreground color index 0..15
|
||||
Pb is the background color index 0..15
|
||||
Color items:
|
||||
Ps = 1 -> normal text
|
||||
Ps = 2 -> window frame
|
||||
xterm uses the SGR color palette with DECAC color item 1 to
|
||||
update the VT100 window colors, like OSC 1 0 and 1 1 .
|
||||
|
||||
CSI Ps; Pf; Pb, }
|
||||
Alternate Text Color (DECATC), VT525 only. This feature
|
||||
specifies the colors to use when DECSTGLT is selected to 1 or
|
||||
2.
|
||||
Ps selects attribute combinations
|
||||
Pf is the foreground color index 0..15
|
||||
Pb is the background color index 0..15
|
||||
Attribute combinations:
|
||||
Ps = 0 -> normal text
|
||||
Ps = 1 -> bold
|
||||
Ps = 2 -> reverse
|
||||
Ps = 3 -> underline
|
||||
Ps = 4 -> blink
|
||||
Ps = 5 -> bold reverse
|
||||
Ps = 6 -> bold underline
|
||||
Ps = 7 -> bold blink
|
||||
Ps = 8 -> reverse underline
|
||||
Ps = 9 -> reverse blink
|
||||
Ps = 1 0 -> underline blink
|
||||
Ps = 1 1 -> bold reverse underline
|
||||
Ps = 1 2 -> bold reverse blink
|
||||
Ps = 1 3 -> bold underline blink
|
||||
Ps = 1 4 -> reverse underline blink
|
||||
Ps = 1 5 -> bold reverse underline blink
|
||||
|
||||
CSI Ps ' }
|
||||
Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.
|
||||
|
||||
|
@ -1741,13 +1849,15 @@ Operating System Commands
|
|||
OSC Ps ; Pt BEL
|
||||
|
||||
OSC Ps ; Pt ST
|
||||
Set Text Parameters. Some control sequences return
|
||||
Set Text Parameters, xterm. Some control sequences return
|
||||
information:
|
||||
o For colors and font, if Pt is a "?", the control sequence
|
||||
elicits a response which consists of the control sequence
|
||||
which would set the corresponding value.
|
||||
o The dtterm control sequences allow you to determine the
|
||||
icon name and window title.
|
||||
o A few of these control sequences began with dtterm (codes
|
||||
0 , 1 , and 2 ). Code 3 in dtterm sets the working
|
||||
directory for the next session. XTerm does that with the
|
||||
spawn-new-terminal action.
|
||||
|
||||
XTerm accepts either BEL or ST for terminating OSC
|
||||
sequences, and when returning information, uses the same
|
||||
|
@ -1816,6 +1926,25 @@ OSC Ps ; Pt ST
|
|||
list. The colors are specified by name or RGB specification
|
||||
as per XParseColor.
|
||||
|
||||
Resource Description
|
||||
-----------------------+-----------------------------
|
||||
foreground | VT100 text foreground color
|
||||
background | VT100 text background color
|
||||
cursorColor | text cursor color
|
||||
pointerColor | pointer foreground color
|
||||
pointerColorBackground | pointer background
|
||||
(foreground) | Tektronix foreground color
|
||||
(background) | Tektronix background color
|
||||
highlightColor | highlight background color
|
||||
(cursorColor) | Tektronix cursor color
|
||||
highlightTextColor | highlight foreground color
|
||||
-----------------------+-----------------------------
|
||||
|
||||
|
||||
The Tektronix colors are initially set from the VT100 colors,
|
||||
but after that can be set independently using these control
|
||||
sequences.
|
||||
|
||||
If a "?" is given rather than a name or RGB specification,
|
||||
xterm replies with a control sequence of the same form which
|
||||
can be used to set the corresponding dynamic color. Because
|
||||
|
@ -1834,10 +1963,14 @@ OSC Ps ; Pt ST
|
|||
Ps = 1 8 -> Change Tektronix cursor color to Pt.
|
||||
Ps = 1 9 -> Change highlight foreground color to Pt.
|
||||
|
||||
Ps = 2 2 -> Change pointer cursor to Pt.
|
||||
Ps = 2 2 -> Change pointer cursor shape to Pt. The
|
||||
parameter Pt sets the pointerShape resource. If Pt is empty,
|
||||
or does not match any of the standard names, n uses the
|
||||
resource's default "xterm" shape.
|
||||
|
||||
Ps = 4 6 -> Change Log File to Pt. This is normally
|
||||
disabled by a compile-time option.
|
||||
Ps = 4 6 -> Change Log File to Pt. The parameter Pt sets
|
||||
the logFile resource. Logging is normally disabled by a
|
||||
compile-time option.
|
||||
|
||||
Ps = 5 0 -> Set Font to Pt. These controls may be disabled
|
||||
using the allowFontOps resource. If Pt begins with a "#",
|
||||
|
@ -1981,8 +2114,8 @@ XTerm detects all of these keys via X key-press and key-release events.
|
|||
It uses the translations resource to decide what to do with these
|
||||
events.
|
||||
|
||||
o Ordinary keys are handled with the insert-seven-bit or insert-eight-
|
||||
bit action.
|
||||
o Ordinary keys are handled with the insert-seven-bit action, or the
|
||||
insert-eight-bit action.
|
||||
|
||||
o Special keys may be handled with other resources. However, xterm
|
||||
also has built-in logic to map commonly-used special keys into
|
||||
|
@ -2459,6 +2592,50 @@ For background and discussion, see the FAQ:
|
|||
|
||||
|
||||
|
||||
Readline Modes
|
||||
|
||||
Several modes provide support for mouse button events in readline.
|
||||
Bracketed paste is one of these readline modes, but is used more widely.
|
||||
|
||||
Some assumptions (particular mouse buttons) and limitations (the mouse
|
||||
is clicked on the current row on the screen) apply:
|
||||
|
||||
2 0 0 1 If mouse button 1 is used to end or extend a selection (the
|
||||
select-end action), and if the cursor position is on the same
|
||||
row as the mouse-click, send left/right cursor control
|
||||
sequences to the host to adjust the cursor position to match
|
||||
the mouse click.
|
||||
|
||||
2 0 0 2 When pasting text (the insert-selection action which is
|
||||
normally bound to mouse button 2), if mouse protocol is not
|
||||
enabled, and if the cursor position is on the same row as the
|
||||
mouse-click, send left/right cursor control sequences to the
|
||||
host to adjust the cursor position to match the mouse click.
|
||||
|
||||
2 0 0 3 If mouse button 3 is double-clicked when ending or extending a
|
||||
selection, (the select-end action), and if the cursor position
|
||||
is on the same line as the mouse-click:
|
||||
|
||||
o Send left/right cursor control sequences to the host to
|
||||
adjust the cursor position to match the mouse click.
|
||||
|
||||
o In addition to the same row, the selection may be part of
|
||||
a wrapped line as in other xterm selections (see the
|
||||
Selection Functions section in the manual page).
|
||||
|
||||
o After adjusting the cursor position, xterm sends erase-
|
||||
characters (one for each character in the selection) to
|
||||
tell the host to delete the selected text.
|
||||
|
||||
2 0 0 5 When writing a selection to the host (i.e., pasting text),
|
||||
escape each character with the literal-next (Ctrl-V)
|
||||
character.
|
||||
|
||||
2 0 0 6 Normally when xterm writes selections to the host, it
|
||||
translates newlines to carriage returns. This mode disables
|
||||
the translation, passing newlines literally.
|
||||
|
||||
|
||||
Title Modes
|
||||
|
||||
The window- and icon-labels can be set or queried using control
|
||||
|
@ -2858,6 +3035,13 @@ DCS Pm p Pr..Pr ST
|
|||
Pm = 2 -> resume command, use command display mode.
|
||||
Pm = 3 -> start new command, use command display mode.
|
||||
|
||||
A few of the VT330/VT340 private modes conflict with xterm. Codes 4 0
|
||||
to 4 7 were first used by xterm in X10R4 (December 1986). While X11R1
|
||||
xterm dropped codes 4 1 and 4 2 , the remaining ones are still used.
|
||||
The VT330/VT340 introduced in April 1987 uses 4 4 to 4 7 for color
|
||||
graphics printing controls. When configured for ReGIS, xterm uses the
|
||||
VT330/VT340 interpretation of these private modes.
|
||||
|
||||
|
||||
Non-VT100 Modes
|
||||
|
||||
|
@ -3019,10 +3203,11 @@ However long, the technical manuals have problems:
|
|||
o DEC's manuals did not provide a comprehensive comparison of the
|
||||
features in different model.
|
||||
|
||||
Peter Sichel's Host Interface Functions Checklist spreadsheet is
|
||||
useful for noting which model introduced a given feature (although
|
||||
there are a few apparent errors such as the DECRQSS feature cited
|
||||
for VT320 whereas the technical manual omits it).
|
||||
Host Interface Functions Checklist by Peter Sichel (January 12,
|
||||
1994) is helpful. This spreadsheet is useful for noting which model
|
||||
introduced a given feature (although there are a few apparent errors
|
||||
such as the DECRQSS feature cited for VT320 whereas the technical
|
||||
manual omits it).
|
||||
|
||||
o Sometimes the manuals disagree. For example, DEC's standard
|
||||
document (DEC STD 070) for terminals says that DECSCL performs a
|
||||
|
@ -3159,7 +3344,7 @@ Standards
|
|||
The DEC terminal family (VT100 through VT525) is upward-compatible,
|
||||
using standards plus extensions, e.g., "private modes". Not all
|
||||
commonly-used features are standard. For example, scrolling regions are
|
||||
not found in ECMA-48. On the other hand, ECMA-48 was not intended to
|
||||
not found in ECMA-48. On the other hand, ECMA-48 was not intended to be
|
||||
all-encompassing. Quoting from the second edition:
|
||||
|
||||
Full conformance to a standard means that all its requirements are
|
||||
|
@ -3173,7 +3358,7 @@ all-encompassing. Quoting from the second edition:
|
|||
|
||||
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
|
||||
device has been specifically designed. Obviously, a product which
|
||||
implements all facilities described in this standard - thus being in
|
||||
"full conformance" with it - whilst theoretically possible, would be
|
||||
technically and economically unthinkable.
|
||||
|
@ -3215,7 +3400,7 @@ o ANSI X3.64-1979 does not list color as a feature of the SGR sequence
|
|||
ANSI X3.64-1979, and ECMA-48, Additional Controls for Character-
|
||||
Imaging I/O Devices, were developed in parallel, with close
|
||||
liaison. ISO DP 6429, Additional Control Functions for
|
||||
Character-Imaging Devices, was developed as a synthesis of X3.04
|
||||
Character-Imaging Devices, was developed as a synthesis of X3.64
|
||||
and ECMA-48. During this process, some control functions as
|
||||
well as additional selective parameters were added. Except for
|
||||
point 1 below, X3.64 is a subset of ISO 6429. Although the two
|
||||
|
@ -3352,47 +3537,47 @@ o The SCOSC/SCORC control sequences for saving/restoring the cursor
|
|||
Most Dec Private mode settings can be saved away internally
|
||||
using \E[?ns, where n is the same number to set or reset the Dec
|
||||
Private mode. The mode can be restored using \E[?nr. This can
|
||||
be used in termcap for vi, for example, to turn off saving of
|
||||
be used in termcap for vi(1), 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
|
||||
|
@ -3402,7 +3587,7 @@ o The aixterm manual page gives the format of the control sequence for
|
|||
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.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: cursor.c,v 1.83 2022/09/23 08:13:43 tom Exp $ */
|
||||
/* $XTermId: cursor.c,v 1.93 2023/09/21 08:17:56 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2002-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2002-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -100,46 +100,101 @@ CursorSet(TScreen *screen, int row, int col, unsigned flags)
|
|||
}
|
||||
|
||||
/*
|
||||
* moves the cursor left n, no wrap around
|
||||
* Unlike VT100, xterm allows reverse wrapping of the cursor. This feature was
|
||||
* introduced in X10R4 (December 1986), but did not modify the comment which
|
||||
* said "moves the cursor left n, no wrap around". However, this reverse
|
||||
* wrapping allowed the cursor to wrap around to the end of the screen.
|
||||
*
|
||||
* xterm added VT420-compatible left/right margin support in 2012. If the
|
||||
* cursor starts off within the margins, the reverse wrapping result will be
|
||||
* within the margins.
|
||||
*
|
||||
* Wrapping to the end of the screen did not appear to be the original intent.
|
||||
* That was revised in 2023, using private mode 45 for movement within the
|
||||
* current (wrapped) line, and 1045 for movement to "any" line.
|
||||
*/
|
||||
void
|
||||
CursorBack(XtermWidget xw, int n)
|
||||
{
|
||||
#define WRAP_MASK (REVERSEWRAP | WRAPAROUND)
|
||||
#define WRAP_MASK2 (REVERSEWRAP2 | WRAPAROUND)
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
int rev;
|
||||
int left = ScrnLeftMargin(xw);
|
||||
/* *INDENT-EQLS* */
|
||||
int rev = (((xw->flags & WRAP_MASK) == WRAP_MASK) != 0);
|
||||
int rev2 = (((xw->flags & WRAP_MASK2) == WRAP_MASK2) != 0);
|
||||
int left = ScrnLeftMargin(xw);
|
||||
int right = ScrnRightMargin(xw);
|
||||
int before = screen->cur_col;
|
||||
int top = ScrnTopMargin(xw);
|
||||
int bottom = ScrnBottomMargin(xw);
|
||||
int col = screen->cur_col;
|
||||
int row = screen->cur_row;
|
||||
|
||||
if ((rev = ((xw->flags & WRAP_MASK) == WRAP_MASK)) != 0
|
||||
&& screen->do_wrap) {
|
||||
n--;
|
||||
}
|
||||
int count;
|
||||
CLineData *ld;
|
||||
|
||||
TRACE(("CursorBack(%d) current %d,%d rev=%d/%d margins H[%d..%d] V[%d..%d]\n",
|
||||
n,
|
||||
screen->cur_row, screen->cur_col,
|
||||
rev, rev2,
|
||||
left, right,
|
||||
top, bottom));
|
||||
|
||||
/* if the cursor is already before the left-margin, we have to let it go */
|
||||
if (before < left)
|
||||
left = 0;
|
||||
|
||||
if ((screen->cur_col -= n) < left) {
|
||||
if (rev) {
|
||||
int in_row = ScrnRightMargin(xw) - left + 1;
|
||||
int offset = (in_row * screen->cur_row) + screen->cur_col - left;
|
||||
if ((before == left) &&
|
||||
ScrnIsColInMargins(screen, before) &&
|
||||
ScrnIsRowInMargins(screen, screen->cur_row) &&
|
||||
screen->cur_row == screen->top_marg) {
|
||||
offset = (screen->bot_marg + 1) * in_row - 1;
|
||||
} else if (offset < 0) {
|
||||
int length = in_row * MaxRows(screen);
|
||||
offset += ((-offset) / length + 1) * length;
|
||||
}
|
||||
set_cur_row(screen, (offset / in_row));
|
||||
set_cur_col(screen, (offset % in_row) + left);
|
||||
do_xevents(xw);
|
||||
ld = NULL;
|
||||
if ((count = n) > 0) {
|
||||
if ((rev || rev2) && screen->do_wrap) {
|
||||
--count;
|
||||
} else {
|
||||
set_cur_col(screen, left);
|
||||
--col;
|
||||
}
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
if (col < left) {
|
||||
if (rev2) {
|
||||
col = right;
|
||||
if (row == top)
|
||||
row = bottom + 1;
|
||||
} else {
|
||||
if (!rev) {
|
||||
col = left;
|
||||
break;
|
||||
}
|
||||
if (row <= top) {
|
||||
col = left;
|
||||
row = top;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ld = NULL; /* try a reverse-wrap */
|
||||
--row;
|
||||
}
|
||||
if (ld == NULL) {
|
||||
ld = getLineData(screen, ROW2INX(screen, row));
|
||||
if (ld == NULL)
|
||||
break; /* should not happen */
|
||||
if (row != screen->cur_row) {
|
||||
if (!rev2 && !LineTstWrapped(ld)) {
|
||||
++row; /* reverse-wrap failed */
|
||||
col = left;
|
||||
break;
|
||||
}
|
||||
col = right;
|
||||
}
|
||||
}
|
||||
|
||||
if (--count <= 0)
|
||||
break;
|
||||
--col;
|
||||
}
|
||||
set_cur_row(screen, row);
|
||||
set_cur_col(screen, col);
|
||||
do_xevents(xw);
|
||||
|
||||
ResetWrap(screen);
|
||||
}
|
||||
|
||||
|
@ -289,7 +344,8 @@ CarriageReturn(XtermWidget xw)
|
|||
|
||||
set_cur_col(screen, col);
|
||||
ResetWrap(screen);
|
||||
do_xevents(xw);
|
||||
if (screen->jumpscroll && !screen->fastscroll)
|
||||
do_xevents(xw);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -451,7 +507,6 @@ CursorNextLine(XtermWidget xw, int count)
|
|||
|
||||
CursorDown(screen, count < 1 ? 1 : count);
|
||||
CarriageReturn(xw);
|
||||
do_xevents(xw);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -464,7 +519,6 @@ CursorPrevLine(XtermWidget xw, int count)
|
|||
|
||||
CursorUp(screen, count < 1 ? 1 : count);
|
||||
CarriageReturn(xw);
|
||||
do_xevents(xw);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: error.h,v 1.26 2012/10/05 00:17:51 tom Exp $ */
|
||||
/* $XTermId: error.h,v 1.28 2023/11/24 00:56:16 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997-2011,2012 by Thomas E. Dickey
|
||||
* Copyright 1997-2012,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -53,6 +53,8 @@
|
|||
|
||||
/* @(#)error.h X10/6.6 11/6/86 */
|
||||
|
||||
#define ERROR_MISC 1 /* miscellaneous errors */
|
||||
|
||||
/* main.c */
|
||||
#define ERROR_FIONBIO 11 /* main: ioctl() failed on FIONBIO */
|
||||
#define ERROR_F_GETFL 12 /* main: ioctl() failed on F_GETFL */
|
||||
|
@ -73,6 +75,7 @@
|
|||
#define ERROR_INIGROUPS 28 /* spawn: initgroups() failed */
|
||||
#define ERROR_FORK 29 /* spawn: fork() failed */
|
||||
#define ERROR_EXEC 30 /* spawn: exec() failed */
|
||||
#define ERROR_GET_ATOM 31 /* intern_atom() failed */
|
||||
#define ERROR_PTYS 32 /* get_pty: not enough ptys */
|
||||
#define ERROR_PTY_EXEC 34 /* waiting for initial map */
|
||||
#define ERROR_SETUID 35 /* spawn: setuid() failed */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: fontutils.c,v 1.760 2023/01/08 23:42:23 tom Exp $ */
|
||||
/* $XTermId: fontutils.c,v 1.783 2024/07/10 15:48:26 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1998-2022,2023 by Thomas E. Dickey
|
||||
* Copyright 1998-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -44,6 +44,7 @@
|
|||
|
||||
#include <main.h>
|
||||
#include <data.h>
|
||||
#include <error.h>
|
||||
#include <menu.h>
|
||||
#include <xstrings.h>
|
||||
#include <xterm.h>
|
||||
|
@ -393,7 +394,7 @@ get_font_name_props(Display *dpy, XFontStruct *fs, char **result)
|
|||
* first get the full font name
|
||||
*/
|
||||
name = 0;
|
||||
fontatom = XInternAtom(dpy, "FONT", False);
|
||||
fontatom = CachedInternAtom(dpy, "FONT");
|
||||
if (fontatom != 0) {
|
||||
XFontProp *fp;
|
||||
int i;
|
||||
|
@ -1201,6 +1202,81 @@ reportXCharStruct(const char *tag, XCharStruct * cs)
|
|||
ReportFonts("\t\t\tdescent: %d\n", cs->descent);
|
||||
}
|
||||
|
||||
static void
|
||||
fillXCharStruct(XCharStruct * cs, short value)
|
||||
{
|
||||
cs->lbearing = value;
|
||||
cs->rbearing = value;
|
||||
cs->width = value;
|
||||
cs->ascent = value;
|
||||
cs->descent = value;
|
||||
}
|
||||
|
||||
/* if the per-character data differs from the summary, that is a problem */
|
||||
static void
|
||||
compareXCharStruct(const char *tag, XCharStruct * actual, XCharStruct * expect)
|
||||
{
|
||||
#define CompareXCharStruct(field) \
|
||||
if (actual->field != expect->field) \
|
||||
ReportFonts("\t\t%s %s differs: %d\n", tag, #field, actual->field)
|
||||
CompareXCharStruct(lbearing);
|
||||
CompareXCharStruct(rbearing);
|
||||
CompareXCharStruct(width);
|
||||
CompareXCharStruct(ascent);
|
||||
CompareXCharStruct(descent);
|
||||
}
|
||||
|
||||
static void
|
||||
reportXPerChar(XFontStruct *fs)
|
||||
{
|
||||
XCharStruct *cs = fs->per_char;
|
||||
|
||||
if (cs != NULL) {
|
||||
XCharStruct min_bounds;
|
||||
XCharStruct max_bounds;
|
||||
int valid = 0;
|
||||
int total = 0;
|
||||
unsigned first_char = 0;
|
||||
unsigned last_char = 0;
|
||||
unsigned ch;
|
||||
|
||||
if (fs->max_byte1 == 0) {
|
||||
first_char = fs->min_char_or_byte2;
|
||||
last_char = fs->max_char_or_byte2;
|
||||
} else {
|
||||
first_char = (fs->min_byte1 * 256) + fs->min_char_or_byte2;
|
||||
last_char = (fs->max_byte1 * 256) + fs->max_char_or_byte2;
|
||||
}
|
||||
|
||||
fillXCharStruct(&max_bounds, -32768);
|
||||
fillXCharStruct(&min_bounds, 32767);
|
||||
for (ch = first_char; ch < last_char; ++ch) {
|
||||
XCharStruct *item = cs + ch;
|
||||
++total;
|
||||
if (!CI_NONEXISTCHAR(item)) {
|
||||
++valid;
|
||||
#define MIN_BOUNDS(field) min_bounds.field = Min(min_bounds.field, item->field)
|
||||
MIN_BOUNDS(lbearing);
|
||||
MIN_BOUNDS(rbearing);
|
||||
MIN_BOUNDS(width);
|
||||
MIN_BOUNDS(ascent);
|
||||
MIN_BOUNDS(descent);
|
||||
#define MAX_BOUNDS(field) max_bounds.field = Max(max_bounds.field, item->field)
|
||||
MAX_BOUNDS(lbearing);
|
||||
MAX_BOUNDS(rbearing);
|
||||
MAX_BOUNDS(width);
|
||||
MAX_BOUNDS(ascent);
|
||||
MAX_BOUNDS(descent);
|
||||
}
|
||||
}
|
||||
ReportFonts("\t\tPer-character: %d/%d\n", valid, total);
|
||||
compareXCharStruct("Max", &max_bounds, &(fs->max_bounds));
|
||||
compareXCharStruct("Min", &min_bounds, &(fs->min_bounds));
|
||||
} else {
|
||||
ReportFonts("\t\tPer-character: none\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reportOneVTFont(const char *tag,
|
||||
XTermFonts * fnt)
|
||||
|
@ -1222,8 +1298,8 @@ reportOneVTFont(const char *tag,
|
|||
ReportFonts("\t\tall chars: %s\n", (fs->all_chars_exist
|
||||
? "yes"
|
||||
: "no"));
|
||||
ReportFonts("\t\tdefault char: %d\n", fs->default_char);
|
||||
ReportFonts("\t\tdirection: %d\n", fs->direction);
|
||||
ReportFonts("\t\tdefault char: %u\n", fs->default_char);
|
||||
ReportFonts("\t\tdirection: %u\n", fs->direction);
|
||||
ReportFonts("\t\tascent: %d\n", fs->ascent);
|
||||
ReportFonts("\t\tdescent: %d\n", fs->descent);
|
||||
ReportFonts("\t\tfirst char: %u\n", first_char);
|
||||
|
@ -1243,12 +1319,13 @@ reportOneVTFont(const char *tag,
|
|||
ReportFonts("\t\tmissing-chars: %u\n", missing);
|
||||
ReportFonts("\t\tpresent-chars: %u\n", countGlyphs(fs) - missing);
|
||||
}
|
||||
ReportFonts("\t\tmin_byte1: %d\n", fs->min_byte1);
|
||||
ReportFonts("\t\tmax_byte1: %d\n", fs->max_byte1);
|
||||
ReportFonts("\t\tmin_byte1: %u\n", fs->min_byte1);
|
||||
ReportFonts("\t\tmax_byte1: %u\n", fs->max_byte1);
|
||||
ReportFonts("\t\tproperties: %d\n", fs->n_properties);
|
||||
reportXCharStruct("min_bounds", &(fs->min_bounds));
|
||||
reportXCharStruct("max_bounds", &(fs->max_bounds));
|
||||
/* TODO: report fs->properties and fs->per_char */
|
||||
reportXPerChar(fs);
|
||||
/* TODO: report fs->properties */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1264,11 +1341,12 @@ reportVTFontInfo(XtermWidget xw, int fontnum)
|
|||
ReportFonts("Loaded VTFonts(default)\n");
|
||||
}
|
||||
|
||||
reportOneVTFont("fNorm", GetNormalFont(screen, fNorm));
|
||||
reportOneVTFont("fBold", GetNormalFont(screen, fBold));
|
||||
#define ReportOneVTFont(name) reportOneVTFont(#name, screen->fnts + name)
|
||||
ReportOneVTFont(fNorm);
|
||||
ReportOneVTFont(fBold);
|
||||
#if OPT_WIDE_CHARS
|
||||
reportOneVTFont("fWide", GetNormalFont(screen, fWide));
|
||||
reportOneVTFont("fWBold", GetNormalFont(screen, fWBold));
|
||||
ReportOneVTFont(fWide);
|
||||
ReportOneVTFont(fWBold);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -1775,7 +1853,7 @@ xtermLoadFont(XtermWidget xw,
|
|||
UIntSet(screen->fnt_boxes, 2);
|
||||
for (ch = 1; ch < 32; ch++) {
|
||||
unsigned n = dec2ucs(screen, ch);
|
||||
if ((n != UCS_REPL)
|
||||
if (!is_UCS_SPECIAL(n)
|
||||
&& (n != ch)
|
||||
&& (screen->fnt_boxes & 2)) {
|
||||
if (xtermMissingChar(n, &new_fonts[fNorm]) ||
|
||||
|
@ -2188,7 +2266,7 @@ xtermLoadVTFonts(XtermWidget xw, String myName, String myClass)
|
|||
#define ALLOC_SUBLIST(which,field) \
|
||||
if (subresourceRec.default_font.field != NULL) { \
|
||||
char *blob = x_strdup(subresourceRec.default_font.field); \
|
||||
char *base = blob; \
|
||||
char *base; \
|
||||
for (base = blob; ; base = NULL) { \
|
||||
char *item = strtok(base, ","); \
|
||||
if (item == NULL) \
|
||||
|
@ -2398,8 +2476,12 @@ xtermSetCursorBox(TScreen *screen)
|
|||
XPoint *vp;
|
||||
int fw = FontWidth(screen) - 1;
|
||||
int fh = FontHeight(screen) - 1;
|
||||
int ww = isCursorBar(screen) ? 1 : fw;
|
||||
int hh = isCursorUnderline(screen) ? 1 : fh;
|
||||
int ww = isCursorBar(screen) ? fw / 8 : fw;
|
||||
int hh = isCursorUnderline(screen) ? fh / 8 : fh;
|
||||
if (ww < 2)
|
||||
ww = 2;
|
||||
if (hh < 2)
|
||||
hh = 2;
|
||||
|
||||
vp = &VTbox[1];
|
||||
(vp++)->x = (short) ww;
|
||||
|
@ -3268,7 +3350,7 @@ checkFontInfo(int value, const char *tag, int failed)
|
|||
if (value == 0 || failed) {
|
||||
if (value == 0) {
|
||||
xtermWarning("Selected font has no non-zero %s for ISO-8859-1 encoding\n", tag);
|
||||
exit(1);
|
||||
exit(ERROR_MISC);
|
||||
} else {
|
||||
xtermWarning("Selected font has no valid %s for ISO-8859-1 encoding\n", tag);
|
||||
}
|
||||
|
@ -3512,8 +3594,7 @@ xtermComputeFontInfo(XtermWidget xw,
|
|||
*/
|
||||
if (screen->fnt_boxes) {
|
||||
screen->fnt_boxes = 0;
|
||||
TRACE(("Xft opened - will %suse internal line-drawing characters\n",
|
||||
screen->fnt_boxes ? "not " : ""));
|
||||
TRACE(("Xft opened - will not use internal line-drawing characters\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3813,7 +3894,7 @@ xtermMissingChar(unsigned ch, XTermFonts * font)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if OPT_BOX_CHARS
|
||||
#if OPT_BOX_CHARS || OPT_WIDE_CHARS
|
||||
/*
|
||||
* The grid is arbitrary, enough resolution that nothing's lost in
|
||||
* initialization.
|
||||
|
@ -3987,6 +4068,39 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
SEG( 0, 2*BOX_HIGH/3, CHR_WIDE, 2*BOX_HIGH/3),
|
||||
SEG( 0, MID_HIGH, CHR_WIDE, MID_HIGH),
|
||||
-1
|
||||
}, sigma_1[] =
|
||||
{
|
||||
SEG(BOX_WIDE, MID_HIGH, BOX_WIDE/2, MID_HIGH),
|
||||
SEG(BOX_WIDE/2, MID_HIGH, BOX_WIDE, BOX_HIGH),
|
||||
-1
|
||||
}, sigma_2[] =
|
||||
{
|
||||
SEG(BOX_WIDE, MID_HIGH, BOX_WIDE/2, MID_HIGH),
|
||||
SEG(BOX_WIDE/2, MID_HIGH, BOX_WIDE, 0),
|
||||
-1
|
||||
}, sigma_3[] =
|
||||
{
|
||||
SEG( 0, 0, BOX_WIDE, BOX_HIGH),
|
||||
-1
|
||||
}, sigma_4[] =
|
||||
{
|
||||
SEG( 0, BOX_HIGH, BOX_WIDE, 0),
|
||||
-1
|
||||
}, sigma_5[] =
|
||||
{
|
||||
SEG( 0, MID_HIGH, MID_WIDE, MID_HIGH),
|
||||
SEG(MID_WIDE, MID_HIGH, MID_WIDE, BOX_HIGH),
|
||||
-1
|
||||
}, sigma_6[] =
|
||||
{
|
||||
SEG( 0, MID_HIGH, MID_WIDE, MID_HIGH),
|
||||
SEG(MID_WIDE, MID_HIGH, MID_WIDE, 0),
|
||||
-1
|
||||
}, sigma_7[] =
|
||||
{
|
||||
SEG( 0, 0, MID_WIDE, MID_HIGH),
|
||||
SEG( 0, BOX_HIGH, MID_WIDE, MID_HIGH),
|
||||
-1
|
||||
};
|
||||
|
||||
static const struct {
|
||||
|
@ -4026,6 +4140,14 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
{ 0, not_equal_to }, /* 1D */
|
||||
{ 0, 0 }, /* 1E LB */
|
||||
{ 0, 0 }, /* 1F bullet */
|
||||
{ 0, 0 }, /* 20 space */
|
||||
{ 3, sigma_1 }, /* PUA(0) */
|
||||
{ 3, sigma_2 }, /* PUA(1) */
|
||||
{ 3, sigma_3 }, /* PUA(2) */
|
||||
{ 3, sigma_4 }, /* PUA(3) */
|
||||
{ 3, sigma_5 }, /* PUA(4) */
|
||||
{ 3, sigma_6 }, /* PUA(5) */
|
||||
{ 3, sigma_7 }, /* PUA(6) */
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
|
@ -4037,6 +4159,7 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
* screen->fnt_wide);
|
||||
unsigned font_height = (((params->draw_flags & DOUBLEHFONT) ? 2U : 1U)
|
||||
* screen->fnt_high);
|
||||
unsigned thick;
|
||||
|
||||
if (cells > 1)
|
||||
font_width *= (unsigned) cells;
|
||||
|
@ -4051,11 +4174,11 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
&& !UsingRenderFont(params->xw)
|
||||
#endif
|
||||
&& (ch > 127)
|
||||
&& (ch != UCS_REPL)) {
|
||||
&& !is_UCS_SPECIAL(ch)) {
|
||||
int which = (params->attr_flags & BOLD) ? fBold : fNorm;
|
||||
unsigned n;
|
||||
for (n = 1; n < 32; n++) {
|
||||
if (xtermMissingChar(n, getNormalFont(screen, which)))
|
||||
if (xtermMissingChar(n, XTermFontsRef(screen->fnts, which)))
|
||||
continue;
|
||||
if (dec2ucs(screen, n) != ch)
|
||||
continue;
|
||||
|
@ -4080,7 +4203,7 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
#endif
|
||||
|
||||
/*
|
||||
* Line-drawing characters show use the full (scaled) cellsize, while
|
||||
* Line-drawing characters display using the full (scaled) cellsize, while
|
||||
* other characters should be shifted to center them vertically.
|
||||
*/
|
||||
if (!xftords) {
|
||||
|
@ -4091,6 +4214,11 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
}
|
||||
}
|
||||
|
||||
if (xtermIsDecTechnical(ch)) {
|
||||
ch -= XTERM_PUA;
|
||||
ch += 33;
|
||||
}
|
||||
|
||||
TRACE(("DRAW_BOX(%02X) cell %dx%d at %d,%d%s\n",
|
||||
ch, font_height, font_width, y, x,
|
||||
((ch >= XtNumber(lines))
|
||||
|
@ -4119,19 +4247,18 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
setCgsBack(params->xw, cgsWin, cgsId, getCgsBack(params->xw, cgsWin, gc));
|
||||
gc2 = getCgsGC(params->xw, cgsWin, cgsId);
|
||||
|
||||
XSetLineAttributes(screen->display, gc2,
|
||||
(params->attr_flags & BOLD)
|
||||
? ((font_height > 12)
|
||||
? font_height / 12
|
||||
: 1)
|
||||
: ((font_height > 16)
|
||||
? font_height / 16
|
||||
: 1),
|
||||
LineSolid,
|
||||
CapProjecting,
|
||||
JoinMiter);
|
||||
thick = ((params->attr_flags & BOLD)
|
||||
? (Max((unsigned) screen->fnt_high / 12, 1))
|
||||
: (Max((unsigned) screen->fnt_high / 16, 1)));
|
||||
setXtermLineAttributes(screen->display, gc2,
|
||||
thick,
|
||||
((ch < XtNumber(lines))
|
||||
? LineSolid
|
||||
: LineOnOffDash));
|
||||
|
||||
if (ch == 1) { /* diamond */
|
||||
if (ch == 32) { /* space! */
|
||||
; /* boxing a missing space is pointless */
|
||||
} else if (ch == 1) { /* diamond */
|
||||
XPoint points[5];
|
||||
int npoints = 5, n;
|
||||
|
||||
|
@ -4209,12 +4336,37 @@ xtermDrawBoxChar(XTermDraw * params,
|
|||
}
|
||||
} else if (screen->force_all_chars) {
|
||||
/* bounding rectangle, for debugging */
|
||||
XDrawRectangle(screen->display, VDrawable(screen), gc2, x, y,
|
||||
font_width - 1,
|
||||
font_height - 1);
|
||||
if ((params->draw_flags & DOUBLEHFONT)) {
|
||||
XRectangle clip;
|
||||
|
||||
clip.x = 0;
|
||||
clip.y = 0;
|
||||
clip.width = (unsigned short) ((font_width - 1) + (unsigned) thick);
|
||||
clip.height = (unsigned short) ((unsigned) FontHeight(screen) + thick);
|
||||
|
||||
if ((params->draw_flags & DOUBLEFIRST)) {
|
||||
y -= (2 * FontDescent(screen));
|
||||
clip.height =
|
||||
(unsigned short) (clip.height
|
||||
- ((unsigned short) FontDescent(screen)));
|
||||
} else {
|
||||
y -= FontHeight(screen);
|
||||
y += FontDescent(screen);
|
||||
clip.y = (short) FontHeight(screen);
|
||||
}
|
||||
XSetClipRectangles(screen->display, gc2, x, y, &clip, 1, Unsorted);
|
||||
}
|
||||
XDrawRectangle(screen->display, VDrawable(screen), gc2,
|
||||
x + (int) thick, y + (int) thick,
|
||||
font_width - (2 * thick),
|
||||
font_height - (2 * thick));
|
||||
if ((params->draw_flags & DOUBLEHFONT)) {
|
||||
XSetClipMask(screen->display, gc2, None);
|
||||
}
|
||||
}
|
||||
resetXtermLineAttributes(screen->display, gc2);
|
||||
}
|
||||
#endif /* OPT_BOX_CHARS */
|
||||
#endif /* OPT_BOX_CHARS || OPT_WIDE_CHARS */
|
||||
|
||||
#if OPT_RENDERFONT
|
||||
static int
|
||||
|
@ -4401,7 +4553,7 @@ findXftGlyph(XtermWidget xw, XTermXftFonts *fontData, unsigned wc)
|
|||
}
|
||||
|
||||
/* initialize on the first call */
|
||||
if (fontData->fontset == NULL) {
|
||||
if (fontData->fontset == NULL && fontData->pattern != NULL) {
|
||||
FcFontSet *sortedFonts;
|
||||
FcPattern *myPattern;
|
||||
int j;
|
||||
|
@ -4462,7 +4614,8 @@ findXftGlyph(XtermWidget xw, XTermXftFonts *fontData, unsigned wc)
|
|||
FcPatternDestroy(myPattern);
|
||||
|
||||
fontData->fs_size = Min(MaxXftCache, fontData->fontset->nfont);
|
||||
} {
|
||||
}
|
||||
if (fontData->fontset != NULL && fontData->fs_size > 0) {
|
||||
XftFont *check;
|
||||
int empty = fontData->fs_size;
|
||||
|
||||
|
@ -4542,9 +4695,8 @@ findXftGlyph(XtermWidget xw, XTermXftFonts *fontData, unsigned wc)
|
|||
TRACE_FALLBACK(xw, "new", wc, result, actual);
|
||||
break;
|
||||
} else {
|
||||
Bool ok;
|
||||
if (defer >= 0
|
||||
&& (ok = !slowXftMissing(xw, check, wc))
|
||||
&& !slowXftMissing(xw, check, wc)
|
||||
&& checkXftGlyph(xw, check, wc)) {
|
||||
XTermFontMap *font_map = &(fontData->font_map);
|
||||
TRACE(("checkrecover2 %d\n", n));
|
||||
|
@ -4660,7 +4812,7 @@ ucs2dec(TScreen *screen, unsigned ch)
|
|||
|
||||
(void) screen;
|
||||
if ((ch > 127)
|
||||
&& (ch != UCS_REPL)) {
|
||||
&& !is_UCS_SPECIAL(ch)) {
|
||||
#if OPT_VT52_MODE
|
||||
if (screen != 0 && !(screen->vtXX_level)) {
|
||||
/*
|
||||
|
@ -5776,6 +5928,7 @@ getDoubleXftFont(XTermDraw * params, XTermXftFonts *data, unsigned chrset, unsig
|
|||
(void *) 0);
|
||||
}
|
||||
xtermOpenXft(xw, data, 0, face_name, sub_pattern, category);
|
||||
data->pattern = sub_pattern;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: fontutils.h,v 1.142 2022/10/23 14:47:45 tom Exp $ */
|
||||
/* $XTermId: fontutils.h,v 1.147 2024/07/11 08:16:39 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1998-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1998-2022,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -123,13 +123,21 @@ extern char *xtermSpecialFont (XTermDraw * /* params */);
|
|||
? ((font)->known_missing[(Char)(ch)] > 1) \
|
||||
: ((FontIsIncomplete(font) && xtermMissingChar(ch, font)) \
|
||||
|| ForceBoxChars(screen, ch)))
|
||||
|
||||
extern void xtermDrawBoxChar (XTermDraw * /* params */, unsigned /* ch */, GC /* gc */, int /* x */, int /* y */, int /* cols */, Bool /* xftords */);
|
||||
#else
|
||||
#define IsXtermMissingChar(screen, ch, font) False
|
||||
#endif
|
||||
|
||||
extern void xtermDrawBoxChar (XTermDraw * /* params */, unsigned /* ch */, GC /* gc */, int /* x */, int /* y */, int /* cols */, Bool /* xftords */);
|
||||
|
||||
#if OPT_BOX_CHARS || OPT_REPORT_FONTS
|
||||
#define XTermFontsRef(fontList, which) \
|
||||
(((which) != fNorm && \
|
||||
((fontList)[(which)].fs == NULL || \
|
||||
(fontList)[(which)].fs->per_char == NULL) && \
|
||||
((fontList)[fNorm].fs != NULL && \
|
||||
(fontList)[fNorm].fs->per_char != NULL)) \
|
||||
? &((fontList)[fNorm]) \
|
||||
: &((fontList)[(which)]))
|
||||
extern Bool xtermMissingChar (unsigned /* ch */, XTermFonts */* font */);
|
||||
#endif
|
||||
|
||||
|
@ -142,7 +150,10 @@ extern Bool xtermLoadWideFonts (XtermWidget /* w */, Bool /* nullOk */);
|
|||
extern void xtermSaveVTFonts (XtermWidget /* xw */);
|
||||
#endif
|
||||
|
||||
/* checks for internal charset codes */
|
||||
#define xtermIsDecTechnical(ch) ((ch) >= XTERM_PUA && (ch) <= XTERM_PUA + 6)
|
||||
#define xtermIsDecGraphic(ch) ((ch) > 0 && (ch) < 32)
|
||||
#define xtermIsInternalCs(ch) (xtermIsDecGraphic(ch) || xtermIsDecTechnical(ch))
|
||||
|
||||
#if OPT_RENDERFONT
|
||||
extern Boolean maybeXftCache(XtermWidget /* xw */, XftFont * /* font */);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#! /usr/bin/perl -w
|
||||
# $XTermId: gen-charsets.pl,v 1.2 2018/08/22 22:59:15 tom Exp $
|
||||
#! /usr/bin/env perl
|
||||
# $XTermId: gen-charsets.pl,v 1.37 2024/02/09 01:11:52 tom Exp $
|
||||
# -----------------------------------------------------------------------------
|
||||
# this file is part of xterm
|
||||
#
|
||||
# Copyright 2018 by Thomas E. Dickey
|
||||
# Copyright 2018-2023,2024 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
|
@ -31,32 +31,88 @@
|
|||
# sale, use or other dealings in this Software without prior written
|
||||
# authorization.
|
||||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
# Translate a Unicode mapping, e.g., for one of the ISO-8859-x codepages,
|
||||
# into the form used in charsets.c for converting characters.
|
||||
# Format/maintain xterm's charsets.h header.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Getopt::Std;
|
||||
|
||||
$| = 1;
|
||||
|
||||
sub do_file($) {
|
||||
my $file = shift;
|
||||
my $undef = hex(0x2426);
|
||||
our ( $opt_d, $opt_i, $opt_v, $opt_x );
|
||||
our $undef = hex(0x2426);
|
||||
our $head_file = "charsets.h";
|
||||
our $data_file = "charsets.dat";
|
||||
our @import;
|
||||
|
||||
our %wide_chars = qw(
|
||||
map_DEC_Cyrillic 1
|
||||
map_DEC_Greek_Supp 1
|
||||
map_DEC_Hebrew_Supp 1
|
||||
map_DEC_Technical 1
|
||||
map_DEC_Turkish_Supp 1
|
||||
map_ISO_Greek_Supp 1
|
||||
map_ISO_Hebrew 1
|
||||
map_ISO_Latin_2 1
|
||||
map_ISO_Latin_5 1
|
||||
map_ISO_Latin_Cyrillic 1
|
||||
map_NRCS_Greek 1
|
||||
map_NRCS_Hebrew 1
|
||||
map_NRCS_Turkish 1
|
||||
);
|
||||
|
||||
our $note_1 = "\
|
||||
#ifndef included_charsets_h
|
||||
#define included_charsets_h 1";
|
||||
|
||||
our $note_2 = "\
|
||||
#ifndef PUA
|
||||
#define PUA(n) (0xEEEE + (n))
|
||||
#endif
|
||||
#define UNDEF 0x2426\t\t/* rendered as a backwards \"?\" */";
|
||||
|
||||
our $note_3 = "\
|
||||
#if OPT_WIDE_CHARS
|
||||
#define begin_CODEPAGE(size) \\
|
||||
\tif (!(xw->flags & NATIONAL)) { \\
|
||||
\t screen->utf8_nrc_mode++; \\
|
||||
\t}
|
||||
#define end_CODEPAGE() \\
|
||||
\tif (!(xw->flags & NATIONAL)) { \\
|
||||
\t screen->utf8_nrc_mode--; \\
|
||||
\t}
|
||||
#else
|
||||
#define begin_CODEPAGE(size)\t/* nothing */
|
||||
#define end_CODEPAGE()\t\t/* nothing */
|
||||
#endif";
|
||||
|
||||
sub read_file($) {
|
||||
my $file = shift;
|
||||
open( FP, $file ) || do {
|
||||
print STDERR "Can't open $file: $!\n";
|
||||
return;
|
||||
};
|
||||
my @data = <FP>;
|
||||
close(FP);
|
||||
chomp @data;
|
||||
return @data;
|
||||
}
|
||||
|
||||
# Translate a Unicode mapping, e.g., for one of the ISO-8859-x codepages,
|
||||
# into the form used in charsets.c for converting characters.
|
||||
sub do_import($) {
|
||||
my $file = shift;
|
||||
my @data = &read_file($file);
|
||||
my $name = $file;
|
||||
$name =~ s,^.*/,,;
|
||||
$name =~ s/\..*$//;
|
||||
$name =~ s/^(8859)/ISO-$1/;
|
||||
$name =~ s/-/_/g;
|
||||
printf "#define map_%s(code) \\\n", $name;
|
||||
printf "\tswitch (code) { \\\n";
|
||||
my @target;
|
||||
my @noteof;
|
||||
|
||||
$import[ $#import + 1 ] = sprintf "map_%s", $name;
|
||||
for my $n ( 0 .. $#data ) {
|
||||
chomp $data[$n];
|
||||
$data[$n] =~ s/^\s*//;
|
||||
|
@ -88,18 +144,278 @@ sub do_file($) {
|
|||
my $hi = $target[127] ? 127 : 126;
|
||||
for my $n ( $lo .. $hi ) {
|
||||
if ( defined $target[$n] ) {
|
||||
printf "\t UNI(0x%02x, 0x%04x);\t/* %s */ \\\n", $n,
|
||||
$import[ $#import + 1 ] = sprintf "\t0x%02x\t0x%04x\t\t# %s", $n,
|
||||
$target[$n], $noteof[$n];
|
||||
}
|
||||
else {
|
||||
printf "\t XXX(0x%02x, UNDEF);\t/* undefined */ \\\n", $n;
|
||||
$import[ $#import + 1 ] = sprintf "\t0x%02x\tUNDEF\t\t# undefined",
|
||||
$n;
|
||||
}
|
||||
}
|
||||
if ($opt_v) {
|
||||
for my $n ( 0 .. $#import ) {
|
||||
printf "%s\n", $import[$n];
|
||||
}
|
||||
}
|
||||
printf "\t}\n";
|
||||
}
|
||||
|
||||
while ( $#ARGV >= 0 ) {
|
||||
&do_file( shift @ARGV );
|
||||
sub add_text($$) {
|
||||
my @head = @{ $_[0] };
|
||||
my @note = split /\n/, $_[1];
|
||||
for my $n ( 0 .. $#note ) {
|
||||
$head[ $#head + 1 ] = $note[$n];
|
||||
}
|
||||
return @head;
|
||||
}
|
||||
|
||||
sub end_note($$) {
|
||||
my @head = @{ $_[0] };
|
||||
my $note = $_[1];
|
||||
$head[ $#head + 1 ] = " */";
|
||||
my $notes;
|
||||
if ( $note == 1 ) {
|
||||
$notes = $note_1;
|
||||
}
|
||||
elsif ( $note == 2 ) {
|
||||
$notes = $note_2;
|
||||
}
|
||||
elsif ( $note == 3 ) {
|
||||
$notes = $note_3;
|
||||
}
|
||||
else {
|
||||
$notes = "";
|
||||
}
|
||||
return &add_text( \@head, $notes );
|
||||
}
|
||||
|
||||
sub hex_of($) {
|
||||
my $text = shift;
|
||||
if ($text) {
|
||||
$text =~ s/^(0x|u\+)//i;
|
||||
$text = "0x" . $text if ( $text =~ /^[[:xdigit:]]+$/ );
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
sub add($$) {
|
||||
my @data = @{ $_[0] };
|
||||
my $text = $_[1];
|
||||
$data[ $#data + 1 ] = $text;
|
||||
return @data;
|
||||
}
|
||||
|
||||
sub add_unmap($$) {
|
||||
my @head = @{ $_[0] };
|
||||
my %unmap = %{ $_[1] };
|
||||
my %noted = %{ $_[2] };
|
||||
my $title = $_[3];
|
||||
my $macro = "un$title";
|
||||
$macro .= "(code,dft)" unless ( $macro =~ /\(code/ );
|
||||
$macro =~ s/code\)/code,dft\)/;
|
||||
@head = &add( \@head, "" );
|
||||
|
||||
if (%unmap) {
|
||||
my @codes = sort keys %unmap;
|
||||
|
||||
if ( $#codes > 0 ) {
|
||||
@head = &add( \@head, "#define $macro \\" );
|
||||
@head = &add( \@head, "\tswitch (code) { \\" );
|
||||
for my $code ( sort keys %unmap ) {
|
||||
my $note = $noted{$code};
|
||||
my $pads = " ";
|
||||
if ( $title =~ /_NRCS_/ ) {
|
||||
$pads = sprintf( "%*s", 17 - length($code), " " );
|
||||
$note =~ s/\t/ /;
|
||||
}
|
||||
@head = &add(
|
||||
\@head,
|
||||
sprintf(
|
||||
"\t MAP(%s,%s%s)%s \\",
|
||||
$code, $pads, $unmap{$code}, $note
|
||||
)
|
||||
);
|
||||
}
|
||||
@head = &add( \@head, "\t default: dft; break; \\" );
|
||||
@head = &add( \@head, "\t}" );
|
||||
}
|
||||
else {
|
||||
@head = &add( \@head, "#define $macro /* nothing? */" );
|
||||
}
|
||||
}
|
||||
else {
|
||||
@head = &add( \@head, "#define $macro /* nothing */" );
|
||||
}
|
||||
return @head;
|
||||
}
|
||||
|
||||
# Read the current charsets data file, and format a new charsets.h file.
|
||||
sub do_update($) {
|
||||
my $file = shift;
|
||||
my @data = &read_file($file);
|
||||
return unless ( $#data >= 0 );
|
||||
my @head;
|
||||
my %noted;
|
||||
my %unmap;
|
||||
my $title = "";
|
||||
my $state = 0;
|
||||
my $ended = "";
|
||||
my $extra = "";
|
||||
my $notes = 0;
|
||||
my $codep = 0;
|
||||
|
||||
for my $n ( 0 .. $#data ) {
|
||||
my $data = $data[$n];
|
||||
if ( $data =~ /^\s*#/ ) {
|
||||
@head = &add( \@head, "/*" ) unless ( $state == 1 );
|
||||
$data =~ s/#/ */;
|
||||
@head = &add( \@head, $data );
|
||||
$state = 1;
|
||||
}
|
||||
elsif ( $data =~ /^\s*$/ ) {
|
||||
@head = &end_note( \@head, $notes++ ) if ( $state == 1 );
|
||||
|
||||
if ( $state >= 2 ) {
|
||||
@head = &add( \@head, $ended );
|
||||
@head = &add_unmap( \@head, \%unmap, \%noted, $title );
|
||||
@head = &add( \@head, $extra ) if ( $extra ne "" );
|
||||
}
|
||||
@head = &add( \@head, "" );
|
||||
|
||||
$title = "";
|
||||
%unmap = ();
|
||||
$state = 0;
|
||||
$ended = "";
|
||||
$extra = "";
|
||||
}
|
||||
elsif ( $data =~ /^map_/ ) {
|
||||
$title = $data;
|
||||
@head = &end_note( \@head, $notes++ ) if ( $state == 1 );
|
||||
$state = 2;
|
||||
$codep = 0;
|
||||
$codep = 94 if ( $data =~ /_DEC_/ );
|
||||
$codep = 96 if ( $data =~ /_ISO_/ );
|
||||
|
||||
$data .= "(code)" unless ( $data =~ /\(code/ );
|
||||
|
||||
@head = &add( \@head, sprintf( "#define %s \\", $data ) );
|
||||
@head = &add( \@head, sprintf( "\tbegin_CODEPAGE(%d) \\", $codep ) )
|
||||
if ($codep);
|
||||
@head = &add( \@head, "\tswitch (code) { \\" );
|
||||
|
||||
$ended = $codep ? "\t} \\\n\tend_CODEPAGE()" : "\t}";
|
||||
|
||||
# special case for map_DEC_Supp_Graphic
|
||||
if ( $data =~ /\(code,dft\)/ ) {
|
||||
$ended = "\t default: dft; break; \\\n" . $ended;
|
||||
$extra = "\n#if OPT_WIDE_CHARS";
|
||||
}
|
||||
}
|
||||
elsif (
|
||||
$data =~ /^\s+(0x)?[[:xdigit:]]{2}
|
||||
\s+(BLANK
|
||||
|PUA\(\d\)
|
||||
|UNDEF
|
||||
|XK_\w+
|
||||
|(0x|U\+)?[[:xdigit:]]{1,4})\s*/x
|
||||
)
|
||||
{
|
||||
@head = &add( \@head, " */" ) if ( $state == 1 );
|
||||
$state = 3;
|
||||
my $note = "";
|
||||
if ( $data =~ /#/ ) {
|
||||
$note = $data;
|
||||
$note =~ s/[^#]*#\s*//;
|
||||
$note = "\t/* $note */" if ( $note ne "" );
|
||||
$data =~ s/\s*#.*//;
|
||||
}
|
||||
$data =~ s/\s+/ /g;
|
||||
$data =~ s/^ //;
|
||||
$data =~ s/ $//;
|
||||
my @fields = split /\s/, $data;
|
||||
my $source = &hex_of( $fields[0] );
|
||||
my $target = &hex_of( $fields[1] );
|
||||
my $intern = &hex_of( $fields[2] );
|
||||
my $macros = "UNI";
|
||||
$macros = "MAP" if ( $target =~ /^XK_/ );
|
||||
$macros = "XXX" if ( $target eq "UNDEF" );
|
||||
$macros = "XXX" if ( $target =~ /PUA\(\d\)/ );
|
||||
|
||||
if ( $target ne $source ) {
|
||||
$intern = $source unless ($intern);
|
||||
}
|
||||
my $item = sprintf( " %s(%s, %s)", $macros, $source, $target );
|
||||
|
||||
# fix formatting for the XK_-based VT220 definitions
|
||||
if ( $codep == 0
|
||||
and $title !~ /(Greek|Hebrew|Turkish)/
|
||||
and index( $note, "\t/*" ) == 0 )
|
||||
{
|
||||
my $pads = 24 - length($item);
|
||||
$item .= "\t" if ( $pads > 0 );
|
||||
}
|
||||
@head = &add( \@head, sprintf( "\t%s%s \\", $item, $note ) );
|
||||
|
||||
if ( defined $intern ) {
|
||||
if ( $source ne $intern ) {
|
||||
$unmap{$source} = $intern;
|
||||
$noted{$source} = $note;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf STDERR "? unexpected data:\n\t%s\n", $data;
|
||||
}
|
||||
}
|
||||
if ( $state >= 2 ) {
|
||||
@head = &add( \@head, $ended );
|
||||
@head = &add_unmap( \@head, \%unmap, \%noted, $title );
|
||||
@head = &add( \@head, $extra ) if ( $extra ne "" );
|
||||
}
|
||||
@head = &add( \@head, "#else" );
|
||||
foreach my $key ( sort keys %wide_chars ) {
|
||||
@head =
|
||||
&add( \@head, sprintf( "#define %s(code)\t/* nothing */", $key ) );
|
||||
@head = &add( \@head, sprintf( "#define un%s(code,dft) dft", $key ) );
|
||||
}
|
||||
@head = &add( \@head, "#endif /* OPT_WIDE_CHARS */" );
|
||||
@head = &add( \@head, "" );
|
||||
@head = &add( \@head, "#endif /* included_charsets_h */" );
|
||||
|
||||
my $origin = $file;
|
||||
$origin =~ s/\.dat\b/.h/;
|
||||
my $update = $origin . ".new";
|
||||
unlink $update;
|
||||
open( my $fh, ">", $update )
|
||||
or die "Can't open > $update.txt: $!";
|
||||
for my $n ( 0 .. $#head ) {
|
||||
printf $fh "%s\n", $head[$n];
|
||||
}
|
||||
close $fh;
|
||||
|
||||
system("diff -u $origin $update") if $opt_v;
|
||||
rename $update, $origin if $opt_x;
|
||||
unlink $update;
|
||||
}
|
||||
|
||||
sub main::HELP_MESSAGE() {
|
||||
printf STDERR <<EOF
|
||||
Usage: $0 [options]
|
||||
|
||||
Options:
|
||||
-d debug
|
||||
-i import charset data from Unicode file
|
||||
-v verbose
|
||||
-x update charsets.h from $data_file
|
||||
EOF
|
||||
;
|
||||
exit 1;
|
||||
}
|
||||
|
||||
$Getopt::Std::STANDARD_HELP_VERSION = 1;
|
||||
&getopts('i:vx') || &main::HELP_MESSAGE;
|
||||
$#ARGV >= 0 && &main::HELP_MESSAGE;
|
||||
|
||||
&do_import($opt_i) if ($opt_i);
|
||||
&do_update($data_file);
|
||||
|
||||
1;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/* $XTermId: graphics.c,v 1.118 2022/05/16 23:35:50 tom Exp $ */
|
||||
/* $XTermId: graphics.c,v 1.135 2024/05/11 09:49:08 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2013-2021,2022 by Ross Combs
|
||||
* Copyright 2013-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2013-2023,2024 by Thomas E. Dickey
|
||||
* Copyright 2013-2022,2023 by Ross Combs
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -43,6 +43,12 @@
|
|||
#include <assert.h>
|
||||
#include <graphics.h>
|
||||
|
||||
#define OPT_INHERIT_COLORS 0
|
||||
|
||||
#if OPT_REGIS_GRAPHICS
|
||||
#include <graphics_regis.h>
|
||||
#endif
|
||||
|
||||
#undef DUMP_BITMAP
|
||||
#undef DUMP_COLORS
|
||||
#undef DEBUG_PALETTE
|
||||
|
@ -278,7 +284,7 @@ draw_solid_pixel(Graphic *graphic, int x, int y, unsigned color)
|
|||
y >= 0 && y < graphic->actual_height) {
|
||||
_draw_pixel(graphic, x, y, color);
|
||||
if (color < MAX_COLOR_REGISTERS)
|
||||
graphic->color_registers_used[color] = 1;
|
||||
graphic->color_registers_used[color] = True;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -311,7 +317,7 @@ draw_solid_rectangle(Graphic *graphic, int x1, int y1, int x2, int y2, unsigned
|
|||
y2 = graphic->actual_height - 1;
|
||||
|
||||
if (color < MAX_COLOR_REGISTERS)
|
||||
graphic->color_registers_used[color] = 1;
|
||||
graphic->color_registers_used[color] = True;
|
||||
for (y = y1; y <= y2; y++)
|
||||
for (x = x1; x <= x2; x++)
|
||||
_draw_pixel(graphic, x, y, color);
|
||||
|
@ -377,10 +383,13 @@ copy_overlapping_area(Graphic *graphic, int src_ul_x, int src_ul_y,
|
|||
|
||||
#define set_color_register(color_registers, color, pr, pg, pb) \
|
||||
do { \
|
||||
assert(color <= MAX_COLOR_REGISTERS); \
|
||||
{ \
|
||||
ColorRegister *reg = &color_registers[color]; \
|
||||
reg->r = (short) pr; \
|
||||
reg->g = (short) pg; \
|
||||
reg->b = (short) pb; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Graphics which don't use private colors will act as if they are using a
|
||||
|
@ -412,6 +421,26 @@ set_shared_color_register(unsigned color, int r, int g, int b)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
fetch_color_register(Graphic *graphic,
|
||||
unsigned color,
|
||||
ColorRegister *reg)
|
||||
{
|
||||
assert(color < MAX_COLOR_REGISTERS);
|
||||
|
||||
reg->r = -1;
|
||||
reg->g = -1;
|
||||
reg->b = -1;
|
||||
|
||||
if (graphic->color_registers_used[color]) {
|
||||
if (graphic->private_colors) {
|
||||
*reg = graphic->private_color_registers[color];
|
||||
} else {
|
||||
*reg = getSharedRegisters()[color];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
update_color_register(Graphic *graphic,
|
||||
unsigned color,
|
||||
|
@ -427,7 +456,7 @@ update_color_register(Graphic *graphic,
|
|||
if (graphic->color_registers_used[color]) {
|
||||
graphic->dirty = True;
|
||||
}
|
||||
graphic->color_registers_used[color] = 1;
|
||||
graphic->color_registers_used[color] = True;
|
||||
} else {
|
||||
set_shared_color_register(color, r, g, b);
|
||||
}
|
||||
|
@ -470,17 +499,29 @@ find_color_register(ColorRegister const *color_registers, int r, int g, int b)
|
|||
return (RegisterNum) closest_index;
|
||||
}
|
||||
|
||||
#if OPT_INHERIT_COLORS
|
||||
static void
|
||||
init_color_registers(ColorRegister *color_registers, int graphics_termid)
|
||||
copy_color_registers(Graphic *target, Graphic *source)
|
||||
{
|
||||
TRACE(("setting initial colors for terminal %d\n", graphics_termid));
|
||||
{
|
||||
unsigned i;
|
||||
memcpy(target->color_registers_used,
|
||||
source->color_registers_used,
|
||||
sizeof(Boolean) * MAX_COLOR_REGISTERS);
|
||||
|
||||
for (i = 0U; i < MAX_COLOR_REGISTERS; i++) {
|
||||
set_color_register(color_registers, (RegisterNum) i, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
memcpy(target->private_color_registers,
|
||||
source->color_registers,
|
||||
sizeof(ColorRegister) * MAX_COLOR_REGISTERS);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
init_color_registers(TScreen const *screen, ColorRegister *color_registers)
|
||||
{
|
||||
const int graphics_termid = GraphicsTermId(screen);
|
||||
|
||||
TRACE(("setting initial colors for terminal %d\n", graphics_termid));
|
||||
memset(color_registers,
|
||||
0,
|
||||
sizeof(ColorRegister) * MAX_COLOR_REGISTERS);
|
||||
|
||||
/*
|
||||
* default color registers:
|
||||
|
@ -631,14 +672,14 @@ get_color_register_count(TScreen const *screen)
|
|||
}
|
||||
|
||||
static void
|
||||
init_graphic(Graphic *graphic,
|
||||
init_graphic(TScreen *screen,
|
||||
Graphic *graphic,
|
||||
unsigned type,
|
||||
int graphics_termid,
|
||||
int charrow,
|
||||
int charcol,
|
||||
unsigned num_color_registers,
|
||||
int private_colors)
|
||||
unsigned num_color_registers)
|
||||
{
|
||||
int private_colors = screen->privatecolorregisters;
|
||||
const unsigned max_pixels = (unsigned) (graphic->max_width *
|
||||
graphic->max_height);
|
||||
|
||||
|
@ -647,7 +688,7 @@ init_graphic(Graphic *graphic,
|
|||
graphic->hidden = False;
|
||||
graphic->dirty = True;
|
||||
memset(graphic->pixels, COLOR_HOLE & 0xff, max_pixels * sizeof(RegisterNum));
|
||||
memset(graphic->color_registers_used, 0, sizeof(graphic->color_registers_used));
|
||||
memset(graphic->color_registers_used, False, sizeof(graphic->color_registers_used));
|
||||
|
||||
/*
|
||||
* text and graphics interactions:
|
||||
|
@ -680,8 +721,33 @@ init_graphic(Graphic *graphic,
|
|||
|
||||
graphic->private_colors = private_colors;
|
||||
if (graphic->private_colors) {
|
||||
#if OPT_INHERIT_COLORS
|
||||
unsigned ii;
|
||||
int max_charrow = -1;
|
||||
Graphic *newest = NULL;
|
||||
#endif
|
||||
|
||||
TRACE(("using private color registers\n"));
|
||||
init_color_registers(graphic->private_color_registers, graphics_termid);
|
||||
|
||||
#if OPT_INHERIT_COLORS
|
||||
FOR_EACH_SLOT(ii) {
|
||||
Graphic *check;
|
||||
if (!(check = getActiveSlot(ii)))
|
||||
continue;
|
||||
if (!newest || check->charrow >= max_charrow) {
|
||||
max_charrow = check->charrow;
|
||||
newest = check;
|
||||
}
|
||||
}
|
||||
|
||||
if (newest != NULL && newest != graphic) {
|
||||
copy_color_registers(graphic, newest);
|
||||
} else {
|
||||
init_color_registers(screen, graphic->private_color_registers);
|
||||
}
|
||||
#else
|
||||
init_color_registers(screen, graphic->private_color_registers);
|
||||
#endif
|
||||
graphic->color_registers = graphic->private_color_registers;
|
||||
} else {
|
||||
TRACE(("using shared color registers\n"));
|
||||
|
@ -697,15 +763,17 @@ init_graphic(Graphic *graphic,
|
|||
Graphic *
|
||||
get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type)
|
||||
{
|
||||
TScreen const *screen = TScreenOf(xw);
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
const int bufferid = screen->whichBuf;
|
||||
const int graphics_termid = GraphicsTermId(screen);
|
||||
Graphic *graphic = NULL;
|
||||
unsigned ii;
|
||||
|
||||
TRACE(("get_new_graphic %d,%d type %d\n", charrow, charcol, type));
|
||||
|
||||
FOR_EACH_SLOT(ii) {
|
||||
if ((graphic = getInactiveSlot(screen, ii))) {
|
||||
TRACE(("using fresh graphic index=%u id=%u\n", ii, next_graphic_id));
|
||||
TRACE(("using fresh graphic index %u as id %u\n",
|
||||
ii, next_graphic_id));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -714,16 +782,19 @@ get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type)
|
|||
if (!graphic) {
|
||||
int min_charrow = 0;
|
||||
Graphic *min_graphic = NULL;
|
||||
if_TRACE(unsigned best_ii = (1 + MAX_GRAPHICS));
|
||||
|
||||
FOR_EACH_SLOT(ii) {
|
||||
if (!(graphic = getActiveSlot(ii)))
|
||||
continue;
|
||||
if (!min_graphic || graphic->charrow < min_charrow) {
|
||||
if_TRACE(best_ii = ii);
|
||||
min_charrow = graphic->charrow;
|
||||
min_graphic = graphic;
|
||||
}
|
||||
}
|
||||
TRACE(("recycling old graphic index=%u id=%u\n", ii, next_graphic_id));
|
||||
TRACE(("recycling old graphic index %u as id %u\n",
|
||||
best_ii, next_graphic_id));
|
||||
graphic = min_graphic;
|
||||
}
|
||||
|
||||
|
@ -733,13 +804,12 @@ get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type)
|
|||
graphic->xw = xw;
|
||||
graphic->bufferid = bufferid;
|
||||
graphic->id = next_graphic_id++;
|
||||
init_graphic(graphic,
|
||||
init_graphic(screen,
|
||||
graphic,
|
||||
type,
|
||||
graphics_termid,
|
||||
charrow,
|
||||
charcol,
|
||||
num_color_registers,
|
||||
screen->privatecolorregisters);
|
||||
num_color_registers);
|
||||
}
|
||||
return graphic;
|
||||
}
|
||||
|
@ -944,7 +1014,11 @@ refresh_graphic(TScreen const *screen,
|
|||
holes, total, out_of_range));
|
||||
}
|
||||
|
||||
#define MAX_PCT 100. /* HLS uses this for L, S percentages */
|
||||
#define MAX_RGB 100. /* use this rather than 255 */
|
||||
|
||||
/*
|
||||
* In HLS, H is an angle, in degrees, and L, S are percentages.
|
||||
* Primary color hues:
|
||||
* blue: 0 degrees
|
||||
* red: 120 degrees
|
||||
|
@ -953,12 +1027,19 @@ refresh_graphic(TScreen const *screen,
|
|||
void
|
||||
hls2rgb(int h, int l, int s, short *r, short *g, short *b)
|
||||
{
|
||||
const int hs = ((h + 240) / 60) % 6;
|
||||
const double lv = l / 100.0;
|
||||
const double sv = s / 100.0;
|
||||
int hs;
|
||||
const double lv = l / MAX_PCT;
|
||||
const double sv = s / MAX_PCT;
|
||||
double c, x, m, c2;
|
||||
double r1, g1, b1;
|
||||
|
||||
h = h - 120; /* Rotate so that blue is at 0 degrees */
|
||||
while (h < 0)
|
||||
h += 360; /* Normalize to 0 to 360, */
|
||||
while (h >= 360)
|
||||
h -= 360;
|
||||
hs = ((h + 59) / 60) % 6;
|
||||
|
||||
if (s == 0) {
|
||||
*r = *g = *b = (short) l;
|
||||
return;
|
||||
|
@ -1004,15 +1085,15 @@ hls2rgb(int h, int l, int s, short *r, short *g, short *b)
|
|||
break;
|
||||
default:
|
||||
TRACE(("Bad HLS input: [%d,%d,%d], returning white\n", h, l, s));
|
||||
*r = (short) 100;
|
||||
*g = (short) 100;
|
||||
*b = (short) 100;
|
||||
*r = (short) 360;
|
||||
*g = (short) MAX_PCT;
|
||||
*b = (short) MAX_PCT;
|
||||
return;
|
||||
}
|
||||
|
||||
*r = (short) ((r1 + m) * 100.0 + 0.5);
|
||||
*g = (short) ((g1 + m) * 100.0 + 0.5);
|
||||
*b = (short) ((b1 + m) * 100.0 + 0.5);
|
||||
*r = (short) ((r1 + m) * MAX_PCT + 0.5);
|
||||
*g = (short) ((g1 + m) * MAX_PCT + 0.5);
|
||||
*b = (short) ((b1 + m) * MAX_PCT + 0.5);
|
||||
|
||||
if (*r < 0)
|
||||
*r = 0;
|
||||
|
@ -1028,6 +1109,49 @@ hls2rgb(int h, int l, int s, short *r, short *g, short *b)
|
|||
*b = 100;
|
||||
}
|
||||
|
||||
void
|
||||
rgb2hls(int r, int g, int b, short *h, short *l, short *s)
|
||||
{
|
||||
const double scaled_r = (r / MAX_RGB);
|
||||
const double scaled_g = (g / MAX_RGB);
|
||||
const double scaled_b = (b / MAX_RGB);
|
||||
|
||||
const double min_scale = Min(Min(scaled_r, scaled_g), scaled_b);
|
||||
const double max_scale = Max(Max(scaled_r, scaled_g), scaled_b);
|
||||
const double dif_scale = max_scale - min_scale;
|
||||
|
||||
double h_work = 0.;
|
||||
double s_work = 0.;
|
||||
double l_work = ((max_scale + min_scale) / 2.);
|
||||
|
||||
if (dif_scale != 0.) {
|
||||
if (l_work < 0.5f) {
|
||||
s_work = (dif_scale / (max_scale + min_scale));
|
||||
} else {
|
||||
s_work = (dif_scale / (2. - max_scale - min_scale));
|
||||
}
|
||||
|
||||
if (scaled_r == max_scale) {
|
||||
h_work = (scaled_g - scaled_b) / dif_scale;
|
||||
} else if (scaled_g == max_scale) {
|
||||
h_work = 2. + (scaled_b - scaled_r) / dif_scale;
|
||||
} else if (scaled_b == max_scale) {
|
||||
h_work = 4. + (scaled_r - scaled_g) / dif_scale;
|
||||
}
|
||||
}
|
||||
|
||||
h_work *= 60.;
|
||||
if (h_work < 0)
|
||||
h_work += 360.;
|
||||
|
||||
s_work *= MAX_RGB;
|
||||
l_work *= MAX_RGB;
|
||||
|
||||
*h = (short) h_work;
|
||||
*s = (short) s_work;
|
||||
*l = (short) l_work;
|
||||
}
|
||||
|
||||
void
|
||||
dump_graphic(Graphic const *graphic)
|
||||
{
|
||||
|
@ -1745,7 +1869,7 @@ chararea_clear_displayed_graphics(TScreen const *screen,
|
|||
void
|
||||
reset_displayed_graphics(TScreen const *screen)
|
||||
{
|
||||
init_color_registers(getSharedRegisters(), GraphicsTermId(screen));
|
||||
init_color_registers(screen, getSharedRegisters());
|
||||
|
||||
if (used_graphics) {
|
||||
unsigned ii;
|
||||
|
@ -1754,6 +1878,9 @@ reset_displayed_graphics(TScreen const *screen)
|
|||
FOR_EACH_SLOT(ii) {
|
||||
deactivateSlot(ii);
|
||||
}
|
||||
#if OPT_REGIS_GRAPHICS
|
||||
reset_regis();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/* $XTermId: graphics.h,v 1.29 2022/02/22 23:36:19 tom Exp $ */
|
||||
/* $XTermId: graphics.h,v 1.32 2023/09/28 00:24:13 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2013-2016,2022 by Ross Combs
|
||||
* Copyright 2013-2016,2022 by Thomas E. Dickey
|
||||
* Copyright 2013-2022,2023 by Ross Combs
|
||||
* Copyright 2013-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -66,7 +66,7 @@ typedef struct {
|
|||
RegisterNum *pixels;
|
||||
ColorRegister *private_color_registers;
|
||||
ColorRegister *color_registers;
|
||||
char color_registers_used[MAX_COLOR_REGISTERS];
|
||||
Boolean color_registers_used[MAX_COLOR_REGISTERS];
|
||||
XtermWidget xw;
|
||||
int max_width; /* largest image which can be stored */
|
||||
int max_height; /* largest image which can be stored */
|
||||
|
@ -93,8 +93,10 @@ extern void draw_solid_pixel(Graphic */* graphic */, int /* x */, int /* y */, u
|
|||
extern void draw_solid_rectangle(Graphic */* graphic */, int /* x1 */, int /* y1 */, int /* x2 */, int /* y2 */, unsigned /* color */);
|
||||
extern void copy_overlapping_area(Graphic */* graphic */, int /* src_x */, int /* src_y */, int /* dst_x */, int /* dst_y */, unsigned /* w */, unsigned /* h */, unsigned /* default_color */);
|
||||
extern void hls2rgb(int /* h */, int /* l */, int /* s */, short */* r */, short */* g */, short */* b */);
|
||||
extern void rgb2hls(int /* r */, int /* g */, int /* b */, short */* h */, short */* l */, short */* s */);
|
||||
extern void dump_graphic(Graphic const */* graphic */);
|
||||
extern unsigned get_color_register_count(TScreen const */* screen */);
|
||||
extern void fetch_color_register(Graphic */* graphic */, unsigned /* color */, ColorRegister* /* reg */);
|
||||
extern void update_color_register(Graphic */* graphic */, unsigned /* color */, int /* r */, int /* g */, int /* b */);
|
||||
extern RegisterNum find_color_register(ColorRegister const */* color_registers */, int /* r */, int /* g */, int /* b */);
|
||||
extern void chararea_clear_displayed_graphics(TScreen const */* screen */, int /* leftcol */, int /* toprow */, int /* ncols */, int /* nrows */);
|
||||
|
@ -117,6 +119,7 @@ extern void noleaks_graphics(Display */* dpy */);
|
|||
#define draw_solid_rectangle(graphic, x1, y1, x2, y2, color) /* nothing */
|
||||
#define copy_overlapping_area(graphic, src_x, src_y, dst_x, dst_y, w, h, default_color) /* nothing */
|
||||
#define hls2rgb(h, l, s, r, g, b) /* nothing */
|
||||
#define rgb2hls(r, g, b, h, l, s) /* nothing */
|
||||
#define dump_graphic(graphic) /* nothing */
|
||||
#define get_color_register_count(screen) /* nothing */
|
||||
#define update_color_register(graphic, color, r, g, b) /* nothing */
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/* $XTermId: graphics_regis.c,v 1.130 2022/05/16 23:31:18 tom Exp $ */
|
||||
/* $XTermId: graphics_regis.c,v 1.149 2023/10/08 23:11:35 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2014-2021,2022 by Ross Combs
|
||||
* Copyright 2014-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2014-2022,2023 by Ross Combs
|
||||
* Copyright 2014-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -68,7 +68,7 @@
|
|||
#undef DEBUG_COMPUTED_FONT_METRICS
|
||||
#undef DEBUG_FONT_NAME
|
||||
#undef DEBUG_FONT_SIZE_SEARCH
|
||||
#undef DEBUG_XFT_GLYPH
|
||||
#undef DEBUG_XFT_GLYPH_COPY
|
||||
#undef DEBUG_GLYPH_RETRIEVAL
|
||||
#undef DEBUG_XFT_GLYPH_LOADING
|
||||
#undef DEBUG_LOAD
|
||||
|
@ -119,6 +119,14 @@ typedef struct RegisTextControls {
|
|||
int slant; /* for italic/oblique */
|
||||
} RegisTextControls;
|
||||
|
||||
#define S_QUOTE '\''
|
||||
#define D_QUOTE '"'
|
||||
|
||||
#define isQuote(ch) ((ch) == S_QUOTE || (ch) == D_QUOTE)
|
||||
#define PickQuote(ch) ((ch) == S_QUOTE ? D_QUOTE : S_QUOTE)
|
||||
|
||||
#define isName(c) ((c) == '_' || isalnum(CharOf(c)))
|
||||
|
||||
#define FixedCopy(dst, src, len) strncpy(dst, src, len - 1)[len - 1] = '\0'
|
||||
#define CopyFontname(dst, src) FixedCopy(dst, src, (size_t) REGIS_FONTNAME_LEN)
|
||||
|
||||
|
@ -538,8 +546,8 @@ draw_or_save_patterned_pixel(RegisGraphicsContext *context, int x, int y)
|
|||
static int
|
||||
sort_points(void const *l, void const *r)
|
||||
{
|
||||
RegisPoint const *const lp = (RegisPoint const *)l;
|
||||
RegisPoint const *const rp = (RegisPoint const *)r;
|
||||
RegisPoint const *const lp = (RegisPoint const *) l;
|
||||
RegisPoint const *const rp = (RegisPoint const *) r;
|
||||
|
||||
if (lp->y < rp->y)
|
||||
return -1;
|
||||
|
@ -580,9 +588,6 @@ draw_shaded_polygon(RegisGraphicsContext *context)
|
|||
for (p = 0U; p < context->fill_point_count; p++) {
|
||||
int new_x = context->fill_points[p].x;
|
||||
int new_y = context->fill_points[p].y;
|
||||
#if 0
|
||||
printf("got %d,%d (%d,%d) inside=%d\n", new_x, new_y, old_x, old_y, inside);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* FIXME: This is using pixels to represent lines which loses
|
||||
|
@ -642,9 +647,6 @@ draw_filled_polygon(RegisGraphicsContext *context)
|
|||
for (p = 0U; p < context->fill_point_count; p++) {
|
||||
int new_x = context->fill_points[p].x;
|
||||
int new_y = context->fill_points[p].y;
|
||||
#if 0
|
||||
printf("got %d,%d (%d,%d) inside=%d\n", new_x, new_y, old_x, old_y, inside);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* FIXME: This is using pixels to represent lines which loses
|
||||
|
@ -1826,32 +1828,54 @@ get_xft_glyph_dimensions(XtermWidget xw, XftFont *font, unsigned *w,
|
|||
|
||||
#define FONT_SIZE_CACHE_SIZE 32U
|
||||
|
||||
typedef struct {
|
||||
XftFont *font_data;
|
||||
char fontname[REGIS_FONTNAME_LEN];
|
||||
unsigned maxw, maxh, max_pixels;
|
||||
unsigned targeth;
|
||||
unsigned w, h;
|
||||
unsigned xmin;
|
||||
unsigned ymin;
|
||||
} FONT_CACHE;
|
||||
|
||||
static FONT_CACHE font_cache[FONT_SIZE_CACHE_SIZE];
|
||||
|
||||
static void
|
||||
close_xft_font(XtermWidget xw, XftFont *font)
|
||||
{
|
||||
if (font != NULL) {
|
||||
Display *display = XtDisplay(xw);
|
||||
unsigned ii;
|
||||
for (ii = 0; ii < FONT_SIZE_CACHE_SIZE; ++ii) {
|
||||
if (font == font_cache[ii].font_data) {
|
||||
font_cache[ii].font_data = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
XftFontClose(display, font);
|
||||
}
|
||||
}
|
||||
|
||||
/* Find the font pixel size which returns the font which is closest to the given
|
||||
* maxw and maxh without overstepping either dimension.
|
||||
*/
|
||||
static XftFont *
|
||||
find_best_xft_font_size(XtermWidget xw,
|
||||
char const *fontname,
|
||||
unsigned maxw, unsigned maxh, unsigned max_pixels,
|
||||
unsigned *w, unsigned *h,
|
||||
unsigned *xmin, unsigned *ymin)
|
||||
unsigned maxw,
|
||||
unsigned maxh,
|
||||
unsigned max_pixels,
|
||||
unsigned *w,
|
||||
unsigned *h,
|
||||
unsigned *xmin,
|
||||
unsigned *ymin)
|
||||
{
|
||||
Display *display = XtDisplay(xw);
|
||||
Screen *screen = XtScreen(xw);
|
||||
XftFont *font;
|
||||
unsigned targeth;
|
||||
unsigned ii, cacheindex;
|
||||
/* FIXME: change cache to just cache the final result and put it in a
|
||||
* wrapper function
|
||||
*/
|
||||
static struct {
|
||||
char fontname[REGIS_FONTNAME_LEN];
|
||||
unsigned maxw, maxh, max_pixels;
|
||||
unsigned targeth;
|
||||
unsigned w, h;
|
||||
unsigned xmin;
|
||||
unsigned ymin;
|
||||
} cache[FONT_SIZE_CACHE_SIZE];
|
||||
unsigned ii;
|
||||
FONT_CACHE *cp = NULL;
|
||||
|
||||
assert(display);
|
||||
assert(screen);
|
||||
|
@ -1862,24 +1886,36 @@ find_best_xft_font_size(XtermWidget xw,
|
|||
assert(ymin);
|
||||
|
||||
#ifdef DEBUG_FONT_SIZE_SEARCH
|
||||
TRACE(("determining best size of font '%s' for %ux%u glyph with max_pixels=%u\n",
|
||||
TRACE(("determining best size of font \"%s\" for %ux%u glyph with max_pixels=%u\n",
|
||||
fontname, maxw, maxh, max_pixels));
|
||||
#endif
|
||||
cacheindex = FONT_SIZE_CACHE_SIZE;
|
||||
for (ii = 0U; ii < FONT_SIZE_CACHE_SIZE; ii++) {
|
||||
if (cache[ii].maxw == maxw && cache[ii].maxh == maxh &&
|
||||
cache[ii].max_pixels == max_pixels &&
|
||||
strcmp(cache[ii].fontname, fontname) == 0) {
|
||||
cacheindex = ii;
|
||||
if (font_cache[ii].maxw == maxw &&
|
||||
font_cache[ii].maxh == maxh &&
|
||||
font_cache[ii].max_pixels == max_pixels &&
|
||||
strcmp(font_cache[ii].fontname, fontname) == 0) {
|
||||
cp = &font_cache[ii];
|
||||
if (cp->font_data) {
|
||||
*w = cp->w;
|
||||
*h = cp->h;
|
||||
*xmin = cp->xmin;
|
||||
*ymin = cp->ymin;
|
||||
return cp->font_data;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (cacheindex < FONT_SIZE_CACHE_SIZE) {
|
||||
targeth = cache[cacheindex].targeth;
|
||||
if (cp != NULL) {
|
||||
targeth = cp->targeth;
|
||||
} else {
|
||||
targeth = maxh * 10U + 5U;
|
||||
targeth = maxh * 8U + 5U;
|
||||
}
|
||||
|
||||
#define MAX_TARGETH 720U /* above this level, fontconfig chokes */
|
||||
if (targeth > MAX_TARGETH)
|
||||
targeth = MAX_TARGETH;
|
||||
|
||||
for (;;) {
|
||||
if (targeth <= 5U) {
|
||||
TRACE(("Giving up finding suitable Xft font size for \"%s\" at %ux%u.\n",
|
||||
|
@ -1917,17 +1953,8 @@ find_best_xft_font_size(XtermWidget xw,
|
|||
TRACE(("trying targeth=%g\n", targeth / 10.0));
|
||||
#endif
|
||||
XftPatternBuild(pat,
|
||||
#if 0
|
||||
/* arbitrary value */
|
||||
XFT_SIZE, XftTypeDouble, 12.0,
|
||||
#endif
|
||||
XFT_PIXEL_SIZE, XftTypeDouble, (double)
|
||||
targeth / 10.0,
|
||||
#if 0
|
||||
XFT_CHAR_WIDTH, XftTypeInteger, (int) maxw,
|
||||
XFT_CHAR_HEIGHT, XftTypeInteger, (int)
|
||||
(targeth / 10U),
|
||||
#endif
|
||||
XFT_SPACING, XftTypeInteger, XFT_MONO,
|
||||
XFT_SLANT, XftTypeInteger, 0,
|
||||
XFT_ANTIALIAS, XftTypeBool, False,
|
||||
|
@ -1942,15 +1969,7 @@ find_best_xft_font_size(XtermWidget xw,
|
|||
}
|
||||
}
|
||||
if (!font) {
|
||||
#ifdef DEBUG_FONT_SIZE_SEARCH
|
||||
{
|
||||
char buffer[1024];
|
||||
|
||||
if (XftNameUnparse(font->pattern, buffer, (int) sizeof(buffer)))
|
||||
printf("font name unparsed: \"%s\"\n", buffer);
|
||||
}
|
||||
#endif
|
||||
TRACE(("unable to open a monospaced Xft font matching '%s' with pixelsize %g\n",
|
||||
TRACE(("unable to open a monospaced Xft font matching \"%s\" with pixelsize %g\n",
|
||||
fontname, targeth / 10.0));
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1966,12 +1985,12 @@ find_best_xft_font_size(XtermWidget xw,
|
|||
}
|
||||
#endif
|
||||
|
||||
if (cacheindex < FONT_SIZE_CACHE_SIZE &&
|
||||
targeth == cache[cacheindex].targeth) {
|
||||
*w = cache[cacheindex].w;
|
||||
*h = cache[cacheindex].h;
|
||||
*xmin = cache[cacheindex].xmin;
|
||||
*ymin = cache[cacheindex].ymin;
|
||||
if (cp != NULL &&
|
||||
targeth == cp->targeth) {
|
||||
*w = cp->w;
|
||||
*h = cp->h;
|
||||
*xmin = cp->xmin;
|
||||
*ymin = cp->ymin;
|
||||
} else {
|
||||
get_xft_glyph_dimensions(xw, font, w, h, xmin, ymin);
|
||||
|
||||
|
@ -1990,28 +2009,26 @@ find_best_xft_font_size(XtermWidget xw,
|
|||
#endif
|
||||
|
||||
if (*h > maxh) {
|
||||
float ratio = (float) (*h) / (float) maxh;
|
||||
XftFontClose(display, font);
|
||||
#ifdef DEBUG_FONT_SIZE_SEARCH
|
||||
TRACE(("got %ux%u glyph; too tall; reducing target size\n", *w, *h));
|
||||
#endif
|
||||
if (*h > 2U * maxh) {
|
||||
targeth /= (*h / maxh);
|
||||
} else if (targeth > 10U && *h > maxh + 1U) {
|
||||
targeth -= 10U;
|
||||
if (targeth >= 10U && ratio > 1.1) {
|
||||
targeth = (unsigned) ((float) targeth / ratio);
|
||||
} else {
|
||||
targeth--;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (*w > maxw) {
|
||||
float ratio = (float) (*w) / (float) maxw;
|
||||
XftFontClose(display, font);
|
||||
#ifdef DEBUG_FONT_SIZE_SEARCH
|
||||
TRACE(("got %ux%u glyph; too wide; reducing target size\n", *w, *h));
|
||||
#endif
|
||||
if (*w > 2U * maxw) {
|
||||
targeth /= (*w / maxw);
|
||||
} else if (targeth > 10U && *w > maxw + 1U) {
|
||||
targeth -= 10U;
|
||||
if (targeth >= 10U && ratio > 1.1) {
|
||||
targeth = (unsigned) ((float) targeth / ratio);
|
||||
} else {
|
||||
targeth--;
|
||||
}
|
||||
|
@ -2052,34 +2069,32 @@ find_best_xft_font_size(XtermWidget xw,
|
|||
}
|
||||
#endif
|
||||
|
||||
if (cacheindex == FONT_SIZE_CACHE_SIZE) {
|
||||
if (cp == NULL) {
|
||||
for (ii = 0U; ii < FONT_SIZE_CACHE_SIZE; ii++) {
|
||||
if (cache[ii].maxw == 0U || cache[ii].maxh == 0U ||
|
||||
cache[ii].max_pixels == 0U) {
|
||||
CopyFontname(cache[ii].fontname, fontname);
|
||||
cache[ii].maxw = maxw;
|
||||
cache[ii].maxh = maxh;
|
||||
cache[ii].max_pixels = max_pixels;
|
||||
cache[ii].targeth = targeth;
|
||||
cache[ii].w = *w;
|
||||
cache[ii].h = *h;
|
||||
cache[ii].xmin = *xmin;
|
||||
cache[ii].ymin = *ymin;
|
||||
if (font_cache[ii].maxw == 0U ||
|
||||
font_cache[ii].maxh == 0U ||
|
||||
font_cache[ii].max_pixels == 0U) {
|
||||
cp = &font_cache[ii];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ii == FONT_SIZE_CACHE_SIZE) {
|
||||
if (cp == NULL) {
|
||||
ii = targeth % FONT_SIZE_CACHE_SIZE;
|
||||
CopyFontname(cache[ii].fontname, fontname);
|
||||
cache[ii].maxw = maxw;
|
||||
cache[ii].maxh = maxh;
|
||||
cache[ii].max_pixels = max_pixels;
|
||||
cache[ii].targeth = targeth;
|
||||
cache[ii].w = *w;
|
||||
cache[ii].h = *h;
|
||||
cache[ii].xmin = *xmin;
|
||||
cache[ii].ymin = *ymin;
|
||||
cp = &font_cache[ii];
|
||||
close_xft_font(xw, cp->font_data);
|
||||
}
|
||||
CopyFontname(cp->fontname, fontname);
|
||||
cp->maxw = maxw;
|
||||
cp->maxh = maxh;
|
||||
cp->max_pixels = max_pixels;
|
||||
cp->targeth = targeth;
|
||||
cp->w = *w;
|
||||
cp->h = *h;
|
||||
cp->xmin = *xmin;
|
||||
cp->ymin = *ymin;
|
||||
}
|
||||
if (cp != NULL) {
|
||||
cp->font_data = font;
|
||||
}
|
||||
return font;
|
||||
}
|
||||
|
@ -2102,7 +2117,6 @@ get_xft_bitmap_of_character(RegisGraphicsContext const *context,
|
|||
*/
|
||||
#ifdef XRENDERFONT
|
||||
XtermWidget xw = context->destination_graphic->xw;
|
||||
Display *display = XtDisplay(xw);
|
||||
XftFont *font;
|
||||
unsigned xmin = 0U, ymin = 0U;
|
||||
|
||||
|
@ -2117,17 +2131,16 @@ get_xft_bitmap_of_character(RegisGraphicsContext const *context,
|
|||
|
||||
if (*w == 0U || *h == 0U) {
|
||||
TRACE(("empty glyph found for '%c'\n", ch));
|
||||
XftFontClose(display, font);
|
||||
close_xft_font(xw, font);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!copy_bitmap_from_xft_font(xw, font, CharOf(ch), pixels, *w, *h,
|
||||
xmin, ymin)) {
|
||||
TRACE(("Unable to create bitmap for '%c'\n", ch));
|
||||
XftFontClose(display, font);
|
||||
close_xft_font(xw, font);
|
||||
return 0;
|
||||
}
|
||||
XftFontClose(display, font);
|
||||
# ifdef DEBUG_XFT_GLYPH_LOADING
|
||||
TRACE(("loaded glyph '%c' at max size %dx%d\n", ch, maxw, maxh));
|
||||
# endif
|
||||
|
@ -2365,7 +2378,7 @@ get_bitmap_of_character(RegisGraphicsContext const *context, int ch,
|
|||
|
||||
if (fontname) {
|
||||
#ifdef DEBUG_GLYPH_RETRIEVAL
|
||||
TRACE(("using xft font %s\n", fontname));
|
||||
TRACE(("using xft font \"%s\"\n", fontname));
|
||||
#endif
|
||||
if (get_xft_bitmap_of_character(context, fontname, ch,
|
||||
maxw, maxh, pixels,
|
||||
|
@ -3151,6 +3164,37 @@ extract_regis_command(RegisDataFragment *input, char *command)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check a ReGIS alphabet name before reporting it, to pick an appropriate
|
||||
* delimiter. If the string is empty, or contains nonreportable characters,
|
||||
* just return NUL.
|
||||
*/
|
||||
static int
|
||||
pick_quote(const char *value)
|
||||
{
|
||||
Bool s_quote = False;
|
||||
Bool d_quote = False;
|
||||
|
||||
if (*value != '\0') {
|
||||
while (*value != '\0') {
|
||||
int ch = CharOf(*value++);
|
||||
if (ch == D_QUOTE)
|
||||
d_quote = True;
|
||||
else if (ch == S_QUOTE)
|
||||
s_quote = True;
|
||||
else if (!isName(ch))
|
||||
s_quote = d_quote = True;
|
||||
}
|
||||
} else {
|
||||
s_quote = d_quote = True;
|
||||
}
|
||||
return ((s_quote && d_quote)
|
||||
? 0
|
||||
: (s_quote
|
||||
? D_QUOTE
|
||||
: S_QUOTE));
|
||||
}
|
||||
|
||||
static int
|
||||
extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen)
|
||||
{
|
||||
|
@ -3166,7 +3210,7 @@ extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen)
|
|||
return 0;
|
||||
|
||||
ch = peek_fragment(input);
|
||||
if (ch != '\'' && ch != '"')
|
||||
if (!isQuote(ch))
|
||||
return 0;
|
||||
open_quote_ch = ch;
|
||||
outlen = 0U;
|
||||
|
@ -3246,7 +3290,7 @@ extract_regis_parenthesized_data(RegisDataFragment *input,
|
|||
for (; input->pos < input->len; input->pos++, output->len++) {
|
||||
char prev_ch = ch;
|
||||
ch = input->start[input->pos];
|
||||
if (ch == '\'' || ch == '"') {
|
||||
if (isQuote(ch)) {
|
||||
if (open_quote_ch == '\0') {
|
||||
open_quote_ch = ch;
|
||||
} else {
|
||||
|
@ -3314,7 +3358,7 @@ extract_regis_option(RegisDataFragment *input,
|
|||
if (ch == ';' || ch == ',' ||
|
||||
ch == '(' || ch == ')' ||
|
||||
ch == '[' || ch == ']' ||
|
||||
ch == '"' || ch == '\'' ||
|
||||
isQuote(ch) ||
|
||||
isdigit(CharOf(ch))) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -3330,7 +3374,7 @@ extract_regis_option(RegisDataFragment *input,
|
|||
TRACE(("looking at char '%c' in option '%c'\n", ch, *option));
|
||||
/* FIXME: any special rules for commas? */
|
||||
/* FIXME: handle escaped quotes */
|
||||
if (ch == '\'' || ch == '"') {
|
||||
if (isQuote(ch)) {
|
||||
if (open_quote_ch == ch) {
|
||||
open_quote_ch = '\0';
|
||||
} else {
|
||||
|
@ -3421,33 +3465,56 @@ regis_num_to_int(RegisDataFragment const *input, int *out)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#define spec_H xBIT(0)
|
||||
#define spec_L xBIT(1)
|
||||
#define spec_S xBIT(2)
|
||||
|
||||
#define spec_HLS (spec_H | spec_L | spec_S)
|
||||
|
||||
#define spec_R xBIT(3)
|
||||
#define spec_G xBIT(4)
|
||||
#define spec_B xBIT(5)
|
||||
|
||||
#define spec_RGB (spec_R | spec_G | spec_B)
|
||||
|
||||
static int
|
||||
load_regis_colorspec(RegisGraphicsContext const *context,
|
||||
RegisDataFragment const *input,
|
||||
short *r_out, short *g_out, short *b_out)
|
||||
ColorRegister *colors)
|
||||
{
|
||||
RegisDataFragment colorspec;
|
||||
short r = -1, g = -1, b = -1;
|
||||
short r = colors->r;
|
||||
short g = colors->g;
|
||||
short b = colors->b;
|
||||
short l = -1;
|
||||
int simple;
|
||||
unsigned len;
|
||||
unsigned spec = 0;
|
||||
|
||||
assert(context);
|
||||
assert(input);
|
||||
assert(r_out);
|
||||
assert(g_out);
|
||||
assert(b_out);
|
||||
assert(colors);
|
||||
|
||||
copy_fragment(&colorspec, input);
|
||||
TRACE(("colorspec option: \"%s\"\n", fragment_to_tempstr(&colorspec)));
|
||||
|
||||
skip_regis_whitespace(&colorspec);
|
||||
simple = 0;
|
||||
if (fragment_remaining(&colorspec) == 1U) {
|
||||
if ((len = fragment_remaining(&colorspec)) == 1U) {
|
||||
simple = 1;
|
||||
} else if (fragment_remaining(&colorspec) > 1U) {
|
||||
char after = get_fragment(&colorspec, 1U);
|
||||
if (IsSpace(after))
|
||||
simple = 1;
|
||||
} else if (len > 1U) {
|
||||
unsigned n;
|
||||
for (n = 1; n < len; ++n) {
|
||||
char after = get_fragment(&colorspec, n);
|
||||
/* if no parameters, we might see a right-parenthesis, but on error
|
||||
* we can anything */
|
||||
if (strchr("[(,)]", after) != NULL) {
|
||||
simple = 1;
|
||||
break;
|
||||
} else if (!IsSpace(after)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (simple) {
|
||||
char ch = pop_fragment(&colorspec);
|
||||
|
@ -3576,7 +3643,7 @@ load_regis_colorspec(RegisGraphicsContext const *context,
|
|||
return 0;
|
||||
}
|
||||
if (!regis_num_to_int(&num, &val)) {
|
||||
TRACE(("DATA_ERROR: component value %s is not a number\n",
|
||||
TRACE(("DATA_ERROR: component value \"%s\" is not a number\n",
|
||||
fragment_to_tempstr(&num)));
|
||||
return 0;
|
||||
}
|
||||
|
@ -3589,38 +3656,56 @@ load_regis_colorspec(RegisGraphicsContext const *context,
|
|||
switch (comp) {
|
||||
case 'H':
|
||||
h = (short) val;
|
||||
spec |= spec_H;
|
||||
break;
|
||||
case 'L':
|
||||
l = (short) val;
|
||||
spec |= spec_L;
|
||||
break;
|
||||
case 'S':
|
||||
s = (short) val;
|
||||
spec |= spec_S;
|
||||
break;
|
||||
case 'R':
|
||||
r = (short) val;
|
||||
spec |= spec_R;
|
||||
break;
|
||||
case 'G':
|
||||
g = (short) val;
|
||||
spec |= spec_G;
|
||||
break;
|
||||
case 'B':
|
||||
b = (short) val;
|
||||
spec |= spec_B;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (h >= 0 && l >= 0 && s >= 0 && r < 0 && g < 0 && b < 0) {
|
||||
if ((spec & spec_HLS) && (spec & spec_RGB)) {
|
||||
TRACE(("DATA_ERROR: conflicting colorspec format\n"));
|
||||
return 0;
|
||||
} else if (spec == spec_HLS) {
|
||||
TRACE(("found HLS colorspec to be converted: %hd,%hd,%hd\n",
|
||||
h, l, s));
|
||||
hls2rgb(h, l, s, &r, &g, &b);
|
||||
TRACE(("converted to RGB: %hd,%hd,%hd\n", r, g, b));
|
||||
} else if (h < 0 && l < 0 && s < 0 && r >= 0 && g >= 0 && b >= 0) {
|
||||
} else if (spec == spec_RGB) {
|
||||
TRACE(("found RGB colorspec: %hd,%hd,%hd\n", r, g, b));
|
||||
l = (short) ((MIN3(r, g, b) + MAX3(r, g, b)) / 2);
|
||||
TRACE(("calculated L: %d\n", l));
|
||||
} else if (h < 0 && l >= 0 && s < 0 && r < 0 && g < 0 && b < 0) {
|
||||
TRACE(("found L colorspec to be converted: %hd,%hd,%hd\n",
|
||||
} else if ((spec & spec_HLS)) {
|
||||
short old_h, old_l, old_s;
|
||||
TRACE(("using partial HLS %hd,%hd,%hd\n", h, l, s));
|
||||
rgb2hls(r, g, b, &old_h, &old_l, &old_s);
|
||||
if (h < 0)
|
||||
h = old_h;
|
||||
if (l < 0)
|
||||
l = old_l;
|
||||
if (s < 0)
|
||||
s = old_s;
|
||||
TRACE(("resulting HLS colorspec to convert: %hd,%hd,%hd\n",
|
||||
h, l, s));
|
||||
hls2rgb(0, l, 0, &r, &g, &b);
|
||||
hls2rgb(h, l, s, &r, &g, &b);
|
||||
TRACE(("converted to RGB: %hd,%hd,%hd\n", r, g, b));
|
||||
} else {
|
||||
TRACE(("DATA_ERROR: unrecognized colorspec format\n"));
|
||||
|
@ -3636,9 +3721,9 @@ load_regis_colorspec(RegisGraphicsContext const *context,
|
|||
TRACE(("converted to grayscale: %hd,%hd,%hd\n", r, g, b));
|
||||
}
|
||||
|
||||
*r_out = r;
|
||||
*g_out = g;
|
||||
*b_out = b;
|
||||
colors->r = r;
|
||||
colors->g = g;
|
||||
colors->b = b;
|
||||
|
||||
skip_regis_whitespace(&colorspec);
|
||||
if (!fragment_consumed(&colorspec)) {
|
||||
|
@ -3671,7 +3756,7 @@ load_regis_regnum_or_colorspec(RegisGraphicsContext const *context,
|
|||
|
||||
if (extract_regis_num(&colorspec, &num)) {
|
||||
if (!regis_num_to_int(&num, &val)) {
|
||||
TRACE(("DATA_ERROR: colorspec value %s is not a valid register\n",
|
||||
TRACE(("DATA_ERROR: colorspec value \"%s\" is not a valid register\n",
|
||||
fragment_to_tempstr(&num)));
|
||||
return 0;
|
||||
}
|
||||
|
@ -3705,15 +3790,16 @@ load_regis_regnum_or_colorspec(RegisGraphicsContext const *context,
|
|||
}
|
||||
|
||||
if (extract_regis_parenthesized_data(&colorspec, &coloroption)) {
|
||||
short r, g, b;
|
||||
ColorRegister find_reg =
|
||||
{-1, -1, -1};
|
||||
|
||||
if (!load_regis_colorspec(context, &coloroption, &r, &g, &b)) {
|
||||
if (!load_regis_colorspec(context, &coloroption, &find_reg)) {
|
||||
TRACE(("unable to parse colorspec\n"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
*out = find_color_register(context->destination_graphic->color_registers,
|
||||
r, g, b);
|
||||
find_reg.r, find_reg.g, find_reg.b);
|
||||
TRACE(("colorspec maps to closest register %u\n", *out));
|
||||
|
||||
return 1;
|
||||
|
@ -3847,11 +3933,11 @@ load_regis_mult_extent(char const *extent, int *w, int *h)
|
|||
int px, py;
|
||||
|
||||
if (!load_regis_raw_extent(extent, &relx, &rely, &px, &py, 1)) {
|
||||
TRACE(("invalid coordinates in extent %s\n", extent));
|
||||
TRACE(("invalid coordinates in extent \"%s\"\n", extent));
|
||||
return 0;
|
||||
}
|
||||
if (relx | rely) {
|
||||
TRACE(("invalid relative value in multiplier extent %s\n", extent));
|
||||
TRACE(("invalid relative value in multiplier extent \"%s\"\n", extent));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3869,7 +3955,7 @@ load_regis_pixel_extent(char const *extent, int origx, int origy,
|
|||
int px, py;
|
||||
|
||||
if (!load_regis_raw_extent(extent, &relx, &rely, &px, &py, 1)) {
|
||||
TRACE(("invalid coordinates in extent %s\n", extent));
|
||||
TRACE(("invalid coordinates in extent \"%s\"\n", extent));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3894,7 +3980,7 @@ load_regis_coord_extent(RegisGraphicsContext const *context, char const *extent,
|
|||
int ux, uy;
|
||||
|
||||
if (!load_regis_raw_extent(extent, &relx, &rely, &ux, &uy, COORD_SCALE)) {
|
||||
TRACE(("invalid coordinates in extent %s\n", extent));
|
||||
TRACE(("invalid coordinates in extent \"%s\"\n", extent));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -5008,6 +5094,7 @@ parse_regis_command(RegisParseState *state)
|
|||
static int
|
||||
parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
||||
{
|
||||
XtermWidget xw = context->display_graphic->xw;
|
||||
RegisDataFragment optionarg;
|
||||
|
||||
if (!extract_regis_option(&state->input, &state->option, &optionarg))
|
||||
|
@ -5586,13 +5673,18 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
state->option, fragment_to_tempstr(&optionarg)));
|
||||
break;
|
||||
} {
|
||||
char reply[64];
|
||||
unsigned err_code = 0U;
|
||||
unsigned err_char = 0U;
|
||||
|
||||
TRACE(("got report last error condition\n"));
|
||||
/* FIXME: implement after adding error tracking */
|
||||
sprintf(reply, "\"%u,%u\"\r", 0U, 0U);
|
||||
unparseputs(context->display_graphic->xw, reply);
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputc(xw, D_QUOTE);
|
||||
unparseputn(xw, err_code);
|
||||
unparseputc(xw, ',');
|
||||
unparseputn(xw, err_char);
|
||||
unparseputc(xw, D_QUOTE);
|
||||
unparseputc(xw, '\r');
|
||||
unparse_end(xw);
|
||||
}
|
||||
break;
|
||||
case 'I':
|
||||
|
@ -5639,8 +5731,8 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
/* FIXME: implement arrow key movement */
|
||||
/* FIXME: implement button/key collection */
|
||||
|
||||
unparseputs(context->display_graphic->xw, "\r");
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputc(xw, '\r');
|
||||
unparse_end(xw);
|
||||
|
||||
skip_regis_whitespace(&optionarg);
|
||||
if (!fragment_consumed(&optionarg)) {
|
||||
|
@ -5657,25 +5749,22 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
if (!fragment_consumed(&optionarg)) {
|
||||
TRACE(("DATA_ERROR: unexpected arguments to ReGIS report command option '%c' arg \"%s\"\n",
|
||||
state->option, fragment_to_tempstr(&optionarg)));
|
||||
break;
|
||||
} {
|
||||
char buffer[32];
|
||||
|
||||
if (state->load_index == MAX_REGIS_ALPHABETS) {
|
||||
/* If this happens something went wrong elsewhere. */
|
||||
TRACE(("DATA_ERROR: unable to report current load alphabet\n"));
|
||||
unparseputs(context->display_graphic->xw, "A0\"\"\r");
|
||||
unparse_end(context->display_graphic->xw);
|
||||
break;
|
||||
} else if (state->load_index == MAX_REGIS_ALPHABETS) {
|
||||
/* If this happens something went wrong elsewhere. */
|
||||
TRACE(("DATA_ERROR: unable to report current load alphabet\n"));
|
||||
unparseputs(xw, "A0\"\"\r");
|
||||
unparse_end(xw);
|
||||
} else {
|
||||
int delim = pick_quote(state->load_name);
|
||||
if (delim != '\0') {
|
||||
unparseputs(xw, "A");
|
||||
unparseputn(xw, state->load_alphabet);
|
||||
unparseputc(xw, delim);
|
||||
unparseputs(xw, state->load_name);
|
||||
unparseputc(xw, delim);
|
||||
}
|
||||
|
||||
unparseputs(context->display_graphic->xw, "A");
|
||||
sprintf(buffer, "%u", state->load_alphabet);
|
||||
unparseputs(context->display_graphic->xw, buffer);
|
||||
unparseputs(context->display_graphic->xw, "\"");
|
||||
unparseputs(context->display_graphic->xw, state->load_name);
|
||||
unparseputs(context->display_graphic->xw, "\"\r");
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputc(xw, '\r');
|
||||
unparse_end(xw);
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
|
@ -5717,27 +5806,31 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
}
|
||||
|
||||
if (name == '=') {
|
||||
char reply[64];
|
||||
unsigned max_available = 1000U;
|
||||
unsigned cur_available = max_available;
|
||||
|
||||
TRACE(("got report macrograph storage request\n"));
|
||||
/* FIXME: Implement when macrographs are supported. */
|
||||
sprintf(reply, "\"%u,%u\"\r", 1000U, 1000U);
|
||||
unparseputs(context->display_graphic->xw, reply);
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputc(xw, D_QUOTE);
|
||||
unparseputn(xw, cur_available);
|
||||
unparseputc(xw, ',');
|
||||
unparseputn(xw, max_available);
|
||||
unparseputc(xw, D_QUOTE);
|
||||
unparseputc(xw, '\r');
|
||||
unparse_end(xw);
|
||||
} else if (name < 'A' || name > 'Z') {
|
||||
TRACE(("DATA_ERROR: invalid macrograph name: \"%c\"\n", name));
|
||||
/* FIXME: what should happen? */
|
||||
break;
|
||||
} else {
|
||||
char temp[8];
|
||||
|
||||
TRACE(("got report macrograph request for name '%c'\n", name));
|
||||
sprintf(temp, "@=%c", name);
|
||||
unparseputs(context->display_graphic->xw, temp);
|
||||
unparseputs(xw, "@=");
|
||||
unparseputc(xw, name);
|
||||
/* FIXME: Allow this to be disabled for security reasons. */
|
||||
/* FIXME: implement when macrographs are supported. */
|
||||
unparseputs(context->display_graphic->xw, "@;\r");
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputs(xw, "@;");
|
||||
unparseputc(xw, '\r');
|
||||
unparse_end(xw);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -5785,78 +5878,59 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
TRACE(("got report cursor position (output=%d)\n", output));
|
||||
|
||||
/* FIXME: look into supporting ANSI locator reports (DECLRP) */
|
||||
unparseputc(xw, L_BLOK);
|
||||
if (output == 1) {
|
||||
char reply[64];
|
||||
|
||||
/* FIXME: verify in absolute, not user, coordinates */
|
||||
sprintf(reply, "[%d,%d]\r",
|
||||
context->graphics_output_cursor_x,
|
||||
context->graphics_output_cursor_y);
|
||||
unparseputs(context->display_graphic->xw, reply);
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputn(xw, (unsigned) context->graphics_output_cursor_x);
|
||||
unparseputc(xw, ',');
|
||||
unparseputn(xw, (unsigned) context->graphics_output_cursor_y);
|
||||
} else if (context->multi_input_mode) {
|
||||
/* FIXME: track input coordinates */
|
||||
unsigned x = 0, y = 0; /* placeholders */
|
||||
|
||||
/* send CSI240~[x,y]\r with current input cursor location */
|
||||
|
||||
/* FIXME: verify no leading char or button sequence */
|
||||
/* FIXME: should we ever send an eight-bit CSI? */
|
||||
/* FIXME: verify in absolute, not user, coordinates */
|
||||
TRACE(("sending multi-mode input report at %u,%u\n", x, y));
|
||||
unparseputn(xw, x);
|
||||
unparseputc(xw, ',');
|
||||
unparseputn(xw, y);
|
||||
} else {
|
||||
char reply[64];
|
||||
int x, y;
|
||||
char ch = ' '; /* placeholder */
|
||||
unsigned x = 0, y = 0; /* placeholders */
|
||||
|
||||
if (context->multi_input_mode) {
|
||||
/* FIXME: track input coordinates */
|
||||
x = y = 0; /* placeholders */
|
||||
/* FIXME: wait for first non-arrow keypress or mouse click, and don't update graphics while waiting */
|
||||
/* send <key or button>[x,y]\r to report input cursor location */
|
||||
|
||||
/* send CSI240~[x,y]\r with current input cursor location */
|
||||
|
||||
/* FIXME: verify no leading char or button sequence */
|
||||
/* FIXME: should we ever send an eight-bit CSI? */
|
||||
/* FIXME: verify in absolute, not user, coordinates */
|
||||
TRACE(("sending multi-mode input report at %d,%d\n",
|
||||
x, y));
|
||||
sprintf(reply, "[%d,%d]\r", x, y);
|
||||
unparseputs(context->display_graphic->xw, reply);
|
||||
unparse_end(context->display_graphic->xw);
|
||||
break;
|
||||
} else {
|
||||
char ch;
|
||||
|
||||
/* FIXME: wait for first non-arrow keypress or mouse click, and don't update graphics while waiting */
|
||||
ch = ' '; /* placeholder */
|
||||
x = y = 0; /* placeholders */
|
||||
|
||||
/* send <key or button>[x,y]\r to report input cursor location */
|
||||
|
||||
/* null button: CSI240~ */
|
||||
/* left button: CSI241~ */
|
||||
/* middle button: CSI243~ */
|
||||
/* right button: CSI245~ */
|
||||
/* extra button: CSI247~ */
|
||||
/* FIXME: support DECLBD to change button assignments */
|
||||
/* FIXME: verify no leading char or button sequence */
|
||||
TRACE(("sending one-shot input report with %c at %d,%d\n",
|
||||
ch, x, y));
|
||||
#if 0 /* FIXME - dead code */
|
||||
if (ch == '\r') {
|
||||
/* Return only reports the location. */
|
||||
sprintf(reply, "[%d,%d]\r", x, y);
|
||||
} else if (ch == '\177') {
|
||||
/* DEL exits locator mode reporting nothing. */
|
||||
sprintf(reply, "\r");
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
sprintf(reply, "%c[%d,%d]\r", ch, x, y);
|
||||
}
|
||||
unparseputs(context->display_graphic->xw, reply);
|
||||
unparse_end(context->display_graphic->xw);
|
||||
/* FIXME: exit one-shot mode and disable input cursor */
|
||||
break;
|
||||
/* null button: CSI240~ */
|
||||
/* left button: CSI241~ */
|
||||
/* middle button: CSI243~ */
|
||||
/* right button: CSI245~ */
|
||||
/* extra button: CSI247~ */
|
||||
/* FIXME: support DECLBD to change button assignments */
|
||||
/* FIXME: verify no leading char or button sequence */
|
||||
TRACE(("sending one-shot input report with %c at %u,%u\n",
|
||||
ch, x, y));
|
||||
if (ch != '\177') {
|
||||
unparseputn(xw, x);
|
||||
unparseputc(xw, ',');
|
||||
unparseputn(xw, y);
|
||||
}
|
||||
/* FIXME: exit one-shot mode and disable input cursor */
|
||||
}
|
||||
unparseputc(xw, R_BLOK);
|
||||
unparseputc(xw, '\r');
|
||||
unparse_end(xw);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
TRACE(("DATA_ERROR: sending empty report for unknown ReGIS report command option '%c' arg \"%s\"\n",
|
||||
state->option, fragment_to_tempstr(&optionarg)));
|
||||
/* Unknown report request types must receive empty reports. */
|
||||
unparseputs(context->display_graphic->xw, "\r");
|
||||
unparse_end(context->display_graphic->xw);
|
||||
unparseputs(xw, "\r");
|
||||
unparse_end(xw);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -6060,7 +6134,7 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
if (extract_regis_num(&optionarg, ®num)) {
|
||||
int register_num;
|
||||
int color_only;
|
||||
short r, g, b;
|
||||
ColorRegister my_reg;
|
||||
|
||||
if (!regis_num_to_int(®num, ®ister_num)) {
|
||||
TRACE(("DATA_ERROR: unable to parse int in screen color register mapping option: \"%s\"\n",
|
||||
|
@ -6093,10 +6167,17 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
break;
|
||||
}
|
||||
|
||||
TRACE(("mapping register %d to color spec: \"%s\"\n",
|
||||
register_num, fragment_to_tempstr(&colorspec)));
|
||||
if (!load_regis_colorspec(context, &colorspec,
|
||||
&r, &g, &b)) {
|
||||
fetch_color_register(context->destination_graphic,
|
||||
(RegisterNum) register_num,
|
||||
&my_reg);
|
||||
|
||||
TRACE(("mapping register %d %d,%d,%d to color spec: \"%s\"\n",
|
||||
register_num,
|
||||
my_reg.r,
|
||||
my_reg.g,
|
||||
my_reg.b,
|
||||
fragment_to_tempstr(&colorspec)));
|
||||
if (!load_regis_colorspec(context, &colorspec, &my_reg)) {
|
||||
TRACE(("DATA_ERROR: unable to use colorspec for mapping of register %d\n",
|
||||
register_num));
|
||||
return 1;
|
||||
|
@ -6106,13 +6187,13 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
(context->graphics_termid == 240 ||
|
||||
context->graphics_termid == 330)) {
|
||||
TRACE(("NOT setting color register %d to %hd,%hd,%hd\n",
|
||||
register_num, r, g, b));
|
||||
register_num, my_reg.r, my_reg.g, my_reg.b));
|
||||
} else {
|
||||
TRACE(("setting color register %d to %hd,%hd,%hd\n",
|
||||
register_num, r, g, b));
|
||||
register_num, my_reg.r, my_reg.g, my_reg.b));
|
||||
update_color_register(context->destination_graphic,
|
||||
(RegisterNum) register_num,
|
||||
r, g, b);
|
||||
my_reg.r, my_reg.g, my_reg.b);
|
||||
}
|
||||
continue;
|
||||
} {
|
||||
|
@ -6154,7 +6235,7 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
|
|||
|
||||
TRACE(("using display page number: %d\n", page));
|
||||
context->display_page = (unsigned) page;
|
||||
map_regis_graphics_pages(context->display_graphic->xw, context);
|
||||
map_regis_graphics_pages(xw, context);
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
|
@ -7433,12 +7514,6 @@ parse_regis_toplevel(RegisParseState *state, RegisGraphicsContext *context)
|
|||
{
|
||||
RegisDataFragment parenthesized;
|
||||
char ch;
|
||||
#if 0
|
||||
TRACE(("reference line: shading=%d ref=%u loc=%d\n",
|
||||
context->temporary_write_controls.shading_enabled,
|
||||
context->temporary_write_controls.shading_reference_dim,
|
||||
context->temporary_write_controls.shading_reference));
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_PARSING
|
||||
TRACE(("parsing top level: char %u of %u (next char '%c')\n",
|
||||
|
@ -7581,6 +7656,13 @@ parse_regis_toplevel(RegisParseState *state, RegisGraphicsContext *context)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
reset_regis(void)
|
||||
{
|
||||
persistent_context.width = 0;
|
||||
persistent_context.height = 0;
|
||||
}
|
||||
|
||||
void
|
||||
parse_regis(XtermWidget xw, ANSI *params, char const *string)
|
||||
{
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/* $XTermId: graphics_regis.h,v 1.2 2016/05/29 16:34:47 tom Exp $ */
|
||||
/* $XTermId: graphics_regis.h,v 1.3 2023/07/07 20:10:32 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2014,2016 by Ross Combs
|
||||
* Copyright 2014,2016 by Thomas E. Dickey
|
||||
* Copyright 2014-2016,2023 by Ross Combs
|
||||
* Copyright 2014-2016,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -38,8 +38,10 @@
|
|||
#include <ptyx.h>
|
||||
|
||||
#if OPT_REGIS_GRAPHICS
|
||||
extern void reset_regis(void);
|
||||
extern void parse_regis(XtermWidget /* xw */, ANSI */* params */, char const */* string */);
|
||||
#else
|
||||
#define reset_regis() /* nothing */
|
||||
#define parse_regis(xw, params, string) /* nothing */
|
||||
#endif
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,8 @@
|
|||
/* $XTermId: graphics_sixel.h,v 1.4 2016/05/29 16:35:11 tom Exp $ */
|
||||
/* $XTermId: graphics_sixel.h,v 1.9 2024/07/01 21:19:14 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2014-2016,2024 by Thomas E. Dickey
|
||||
* Copyright 2014,2016 by Ross Combs
|
||||
* Copyright 2014,2016 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -38,9 +38,9 @@
|
|||
#include <ptyx.h>
|
||||
|
||||
#if OPT_SIXEL_GRAPHICS
|
||||
extern int parse_sixel(XtermWidget /* xw */, ANSI */* params */, char const */* string */);
|
||||
#else
|
||||
#define parse_sixel(xw, params, string) /* nothing */
|
||||
extern void parse_sixel_init(XtermWidget /* xw */, ANSI * /* params */);
|
||||
extern void parse_sixel_char(char /* cp */);
|
||||
extern void parse_sixel_finished(void);
|
||||
#endif
|
||||
|
||||
/* *INDENT-ON* */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: input.c,v 1.369 2022/11/24 12:48:54 tom Exp $ */
|
||||
/* $XTermId: input.c,v 1.370 2023/05/09 08:14:04 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1999-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -1204,8 +1204,7 @@ Input(XtermWidget xw,
|
|||
reply.a_param[0] = (ParmType) dec_code;
|
||||
reply.a_final = '~';
|
||||
}
|
||||
if (reply.a_final != 0
|
||||
&& (reply.a_nparam == 0 || reply.a_param[0] >= 0))
|
||||
if (reply.a_nparam == 0 || reply.a_param[0] >= 0)
|
||||
unparseseq(xw, &reply);
|
||||
}
|
||||
key = True;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#!/bin/sh
|
||||
# $XTermId: koi8rxterm,v 1.6 2021/01/27 01:35:34 tom Exp $
|
||||
# $XTermId: koi8rxterm,v 1.7 2023/05/03 23:59:22 tom Exp $
|
||||
# -----------------------------------------------------------------------------
|
||||
# this file is part of xterm
|
||||
#
|
||||
# Copyright 2007,2021 by Thomas E. Dickey
|
||||
#
|
||||
# Copyright 2007-2021,2023 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
@ -112,4 +112,4 @@ fi
|
|||
# for testing:
|
||||
#test -f ./xterm && XTERM_PROGRAM=./xterm
|
||||
|
||||
exec "$XTERM_PROGRAM" -class KOI8RXTerm -title "$whoami" -k8 "$@"
|
||||
exec "$XTERM_PROGRAM" -class KOI8RXTerm -k8 "$@"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.\" $XTermId: koi8rxterm.man,v 1.8 2018/06/23 00:19:53 tom Exp $
|
||||
.\" $XTermId: koi8rxterm.man,v 1.9 2024/01/11 21:55:09 tom Exp $
|
||||
.\"
|
||||
.\" Copyright 2007-2012, 2018 Thomas E. Dickey
|
||||
.\" Copyright 2007-2018,2024 Thomas E. Dickey
|
||||
.\" Copyright 2004 Branden Robinson
|
||||
.\"
|
||||
.\" Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
@ -24,16 +24,24 @@
|
|||
.ds N Koi8rxterm
|
||||
.ds n koi8rxterm
|
||||
.\"
|
||||
.ie \n(.g .ds AQ \(aq
|
||||
.el .ds AQ '
|
||||
.ie \n(.g .ds `` \(lq
|
||||
.el .ds `` ``
|
||||
.ie \n(.g .ds '' \(rq
|
||||
.el .ds '' ''
|
||||
.\"
|
||||
.TH KOI8RXTERM 1 "__app_date__" "__app_version__" "X Window System"
|
||||
.\"
|
||||
.ie \n(.g \{\
|
||||
.ds `` \(lq
|
||||
.ds '' \(rq
|
||||
.ds ' \(aq
|
||||
.\}
|
||||
.el \{\
|
||||
.ie t .ds `` ``
|
||||
.el .ds `` ""
|
||||
.ie t .ds '' ''
|
||||
.el .ds '' ""
|
||||
.ie t .ds ' \(aq
|
||||
.el .ds ' '
|
||||
.\}
|
||||
.SH NAME
|
||||
koi8rxterm \- X terminal emulator for KOI8-R environments
|
||||
koi8rxterm \-
|
||||
X terminal emulator for KOI8-R environments
|
||||
.SH SYNOPSIS
|
||||
.B \*n
|
||||
[
|
||||
|
@ -95,7 +103,7 @@ is available for Unicode UTF-8 environments.
|
|||
.B LC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG
|
||||
The values of these variables are checked, in order, to determine the
|
||||
character set used by the current locale.
|
||||
.SH AUTHOR
|
||||
.SH AUTHORS
|
||||
.B \*n
|
||||
was written by Branden Robinson and is very heavily based on
|
||||
.BR uxterm ,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: linedata.c,v 1.102 2022/09/18 21:17:43 tom Exp $ */
|
||||
/* $XTermId: linedata.c,v 1.106 2023/12/31 20:12:06 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2009-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2009-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -91,6 +91,10 @@ copyLineData(LineData *dst, CLineData *src)
|
|||
+ sizeof(dst->charData[0])
|
||||
#if OPT_WIDE_CHARS
|
||||
+ sizeof(dst->combData[0][0]) * dst->combSize
|
||||
#endif
|
||||
#if OPT_DEC_RECTOPS
|
||||
+ sizeof(dst->charSeen[0])
|
||||
+ sizeof(dst->charSets[0])
|
||||
#endif
|
||||
);
|
||||
|
||||
|
@ -110,6 +114,10 @@ copyLineData(LineData *dst, CLineData *src)
|
|||
dst->color[col] = src->color[col];
|
||||
#endif
|
||||
dst->charData[col] = src->charData[col];
|
||||
#if OPT_DEC_RECTOPS
|
||||
dst->charSeen[col] = src->charSeen[col];
|
||||
dst->charSets[col] = src->charSets[col];
|
||||
#endif
|
||||
#if OPT_WIDE_CHARS
|
||||
for (comb = 0; comb < dst->combSize; ++comb) {
|
||||
dst->combData[comb][col] = src->combData[comb][col];
|
||||
|
@ -122,6 +130,10 @@ copyLineData(LineData *dst, CLineData *src)
|
|||
dst->color[col] = initCColor;
|
||||
#endif
|
||||
dst->charData[col] = 0;
|
||||
#if OPT_DEC_RECTOPS
|
||||
dst->charSeen[col] = 0;
|
||||
dst->charSets[col] = 0;
|
||||
#endif
|
||||
#if OPT_WIDE_CHARS
|
||||
for (comb = 0; comb < dst->combSize; ++comb) {
|
||||
dst->combData[comb][col] = 0;
|
||||
|
@ -174,6 +186,10 @@ initLineData(XtermWidget xw)
|
|||
TRACE((" offset(bufHead) %lu\n", (unsigned long) offsetof(LineData, bufHead)));
|
||||
#if OPT_WIDE_CHARS
|
||||
TRACE((" offset(combSize) %lu\n", (unsigned long) offsetof(LineData, combSize)));
|
||||
#endif
|
||||
#if OPT_DEC_RECTOPS
|
||||
TRACE((" offset(*charSeen) %lu\n", (unsigned long) offsetof(LineData, charSeen)));
|
||||
TRACE((" offset(*charSets) %lu\n", (unsigned long) offsetof(LineData, charSets)));
|
||||
#endif
|
||||
TRACE((" offset(*attribs) %lu\n", (unsigned long) offsetof(LineData, attribs)));
|
||||
#if OPT_ISO_COLORS
|
||||
|
@ -190,6 +206,10 @@ initLineData(XtermWidget xw)
|
|||
#if OPT_WIDE_CHARS
|
||||
TRACE((" offset(combSize) %lu\n", (unsigned long) offsetof(CellData, combSize)));
|
||||
#endif
|
||||
#if OPT_DEC_RECTOPS
|
||||
TRACE((" offset(charSeen) %lu\n", (unsigned long) offsetof(CellData, charSeen)));
|
||||
TRACE((" offset(charSets) %lu\n", (unsigned long) offsetof(CellData, charSets)));
|
||||
#endif
|
||||
#if OPT_ISO_COLORS
|
||||
TRACE((" offset(color) %lu\n", (unsigned long) offsetof(CellData, color)));
|
||||
#endif
|
||||
|
@ -234,7 +254,10 @@ saveCellData(TScreen *screen,
|
|||
if_OPT_ISO_COLORS(screen, {
|
||||
item->color = ld->color[column];
|
||||
});
|
||||
item->charData = ld->charData[column];
|
||||
if_OPT_DEC_RECTOPS({
|
||||
item->charSeen = ld->charSeen[column];
|
||||
item->charData = ld->charData[column];
|
||||
});
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
size_t off;
|
||||
Bool blank = (((item->charData == HIDDEN_CHAR)
|
||||
|
@ -245,9 +268,13 @@ saveCellData(TScreen *screen,
|
|||
&& (limits == NULL
|
||||
|| (column + 1) >= limits->right)));
|
||||
if (blank) {
|
||||
if_OPT_DEC_RECTOPS(item->charSeen = ' ');
|
||||
item->charData = (CharData) ' ';
|
||||
}
|
||||
item->combSize = blank ? 0 : ld->combSize;
|
||||
if_OPT_DEC_RECTOPS(item->charSets = (blank
|
||||
? 0
|
||||
: ld->charSets[column]));
|
||||
for_each_combData(off, item) {
|
||||
item->combData[off] = ld->combData[off][column];
|
||||
}
|
||||
|
@ -273,10 +300,15 @@ restoreCellData(TScreen *screen,
|
|||
if_OPT_ISO_COLORS(screen, {
|
||||
ld->color[column] = item->color;
|
||||
});
|
||||
if_OPT_DEC_RECTOPS({
|
||||
ld->charSeen[column] = item->charSeen;
|
||||
ld->charSets[column] = item->charSets;
|
||||
});
|
||||
ld->charData[column] = item->charData;
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
size_t off;
|
||||
ld->combSize = item->combSize;
|
||||
if_OPT_DEC_RECTOPS(ld->charSets[column] = item->charSets);
|
||||
for_each_combData(off, ld) {
|
||||
ld->combData[off][column] = item->combData[off];
|
||||
}
|
||||
|
|
784
app/xterm/main.c
784
app/xterm/main.c
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: main.h,v 1.82 2022/11/21 22:28:35 tom Exp $ */
|
||||
/* $XTermId: main.h,v 1.85 2023/10/22 10:34:12 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2000-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2000-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -132,7 +132,7 @@
|
|||
#endif
|
||||
|
||||
#ifndef DEF_DISALLOWED_PASTE_CONTROLS
|
||||
#define DEF_DISALLOWED_PASTE_CONTROLS "BS,DEL,ENQ,EOT,ESC,NUL"
|
||||
#define DEF_DISALLOWED_PASTE_CONTROLS "BS,DEL,ENQ,EOT,ESC,NUL,STTY"
|
||||
#endif
|
||||
|
||||
#ifndef DEF_DISALLOWED_TCAP
|
||||
|
@ -227,10 +227,26 @@
|
|||
#define DEF_SCROLL_LINES 1
|
||||
#endif
|
||||
|
||||
#ifndef DEF_SL_CLOCK
|
||||
#define DEF_SL_CLOCK 1000
|
||||
#endif
|
||||
|
||||
#ifndef DEF_SL_COORDS
|
||||
#define DEF_SL_COORDS 80
|
||||
#endif
|
||||
|
||||
#ifndef DEF_SL_FORMAT
|
||||
#define DEF_SL_FORMAT "%{version%} %{position%} %{unixtime%}"
|
||||
#endif
|
||||
|
||||
#ifndef DEF_STRINGS_MAX
|
||||
#if OPT_REGIS_GRAPHICS || OPT_SIXEL_GRAPHICS
|
||||
#define DEF_STRINGS_MAX 600000
|
||||
#else
|
||||
#define DEF_STRINGS_MAX 20000
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef DEF_TITLE_MODES
|
||||
#define DEF_TITLE_MODES 0
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: menu.c,v 1.370 2022/10/07 08:00:53 Ben.Wong Exp $ */
|
||||
/* $XTermId: menu.c,v 1.375 2023/12/01 21:39:31 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1999-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -55,6 +55,7 @@
|
|||
|
||||
#include <xterm.h>
|
||||
#include <data.h>
|
||||
#include <error.h>
|
||||
#include <menu.h>
|
||||
#include <fontutils.h>
|
||||
#include <xstrings.h>
|
||||
|
@ -696,7 +697,7 @@ create_menu(Widget w, XtermWidget xw, MenuIndex num)
|
|||
toplevel,
|
||||
NULL, 0);
|
||||
TRACE(("created popupShell(%s) widget %p, window %#lx\n",
|
||||
data->internal_name, list->w, XtWindow(list->w)));
|
||||
data->internal_name, (void *) list->w, XtWindow(list->w)));
|
||||
#endif
|
||||
if (list->w != 0) {
|
||||
Boolean *unused = unusedEntries(xw, num);
|
||||
|
@ -1434,7 +1435,7 @@ do_quit(Widget gw GCC_UNUSED,
|
|||
XtPointer closure GCC_UNUSED,
|
||||
XtPointer data GCC_UNUSED)
|
||||
{
|
||||
Cleanup(SIGHUP);
|
||||
Cleanup(ERROR_MISC);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3754,6 +3755,7 @@ update_titeInhibit(void)
|
|||
void
|
||||
update_activeicon(void)
|
||||
{
|
||||
SetItemSensitivity(vtMenuEntries[vtMenu_activeicon].widget, False);
|
||||
UpdateCheckbox("update_activeicon",
|
||||
vtMenuEntries,
|
||||
vtMenu_activeicon,
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#!/bin/sh
|
||||
# $XTermId: minstall.in,v 1.27 2022/10/02 20:13:11 tom Exp $
|
||||
# $XTermId: minstall.in,v 1.32 2023/10/08 21:11:07 tom Exp $
|
||||
# -----------------------------------------------------------------------------
|
||||
# this file is part of xterm
|
||||
#
|
||||
# Copyright 2001-2021,2022 by Thomas E. Dickey
|
||||
# Copyright 2001-2022,2023 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
|
@ -66,55 +66,23 @@ break
|
|||
fi
|
||||
done
|
||||
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
datarootdir=@datarootdir@
|
||||
datadir=@datadir@
|
||||
|
||||
# get parameters
|
||||
MINSTALL="$1"
|
||||
OLD_FILE="$2"
|
||||
END_FILE="$3"
|
||||
APPS_DIR="$4"
|
||||
APP_TYPE="$5"
|
||||
APP_name="$6"
|
||||
USE_name="$7"
|
||||
XPMS_DIR="$8"
|
||||
APP_name="$4"
|
||||
USE_name="$5"
|
||||
|
||||
suffix=`echo "$END_FILE" | sed -e 's%^.*\.%%'`
|
||||
NEW_FILE=temp$$
|
||||
|
||||
MY_MANSECT=$suffix
|
||||
|
||||
# utmp and wtmp have different pathnames on different systems, but there
|
||||
# are only a few common choices. Note that they may not necessarily appear
|
||||
# in the same directories. Prefer utmpx/wtmpx to utmp/wtmp, since that's
|
||||
# the way the configure script is designed.
|
||||
UTMP_NAME=utmp
|
||||
UTMP_PATH=/etc
|
||||
for name in /etc /var/adm /var/run /var/log
|
||||
do
|
||||
if test -f $name/utmpx ; then
|
||||
UTMP_NAME=utmpx
|
||||
UTMP_PATH=$name
|
||||
break
|
||||
elif test -f $name/utmp ; then
|
||||
UTMP_PATH=$name
|
||||
break
|
||||
fi
|
||||
done
|
||||
UTMP_PATH=$UTMP_PATH/$UTMP_NAME
|
||||
|
||||
WTMP_NAME=wtmp
|
||||
WTMP_PATH=/etc
|
||||
for name in /etc /var/adm /var/run /var/log
|
||||
do
|
||||
if test -f $name/wtmpx ; then
|
||||
WTMP_NAME=wtmpx
|
||||
WTMP_PATH=$name
|
||||
break
|
||||
elif test -f $name/wtmp ; then
|
||||
WTMP_PATH=$name
|
||||
break
|
||||
fi
|
||||
done
|
||||
WTMP_PATH=$WTMP_PATH/$WTMP_NAME
|
||||
|
||||
lower=abcdefghijklmnopqrstuvwxyz
|
||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
|
||||
|
@ -157,15 +125,16 @@ sed -e 's%__vendorversion__%"X Window System"%' \
|
|||
-e "s%__delete_is_del__%@delete_is_del@%" \
|
||||
-e "s%__double_buffer__%@double_buffer@%" \
|
||||
-e "s%__initial_erase__%@initial_erase@%" \
|
||||
-e "s%__default_class__%$APP_TYPE%" \
|
||||
-e "s%__apploaddir__%$APPS_DIR%" \
|
||||
-e "s%__default_class__%@APP_CLASS@%" \
|
||||
-e "s%__apploaddir__%@APPSDIR@%" \
|
||||
-e "s%__mansuffix__%$MY_MANSECT%g" \
|
||||
-e "s%__miscmansuffix__%$X_MANSECT%g" \
|
||||
-e "s%__pixmapsdir__%$XPMS_DIR%" \
|
||||
-e 's%fIutmp\\%fI'$UTMP_NAME'\\%g' \
|
||||
-e "s%/etc/utmp%$UTMP_PATH%g" \
|
||||
-e 's%fIwtmp\\%fI'$WTMP_NAME'\\%g' \
|
||||
-e "s%/etc/wtmp%$WTMP_PATH%g" \
|
||||
-e "s%__pixmapsdir__%@PIXMAPDIR@%" \
|
||||
-e "s%__strings_max__%@STRINGS_MAX@%" \
|
||||
-e "s%__utmp_name__%@UTMP_NAME@%g" \
|
||||
-e "s%__utmp_path__%@UTMP_PATH@%g" \
|
||||
-e "s%__wtmp_name__%@WTMP_NAME@%g" \
|
||||
-e "s%__wtmp_path__%@WTMP_PATH@%g" \
|
||||
-e 's%/\\(\*\*%/*%g' \
|
||||
"$OLD_FILE" >$NEW_FILE
|
||||
# diff -u $OLD_FILE $NEW_FILE
|
||||
|
|
452
app/xterm/misc.c
452
app/xterm/misc.c
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: misc.c,v 1.1044 2023/01/07 01:11:16 tom Exp $ */
|
||||
/* $XTermId: misc.c,v 1.1094 2024/06/26 08:05:39 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2022,2023 by Thomas E. Dickey
|
||||
* Copyright 1999-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -138,8 +138,6 @@
|
|||
static Boolean xtermAllocColor(XtermWidget, XColor *, const char *);
|
||||
static Cursor make_hidden_cursor(XtermWidget);
|
||||
|
||||
static char emptyString[] = "";
|
||||
|
||||
#if OPT_EXEC_XTERM
|
||||
/* Like readlink(2), but returns a malloc()ed buffer, or NULL on
|
||||
error; adapted from libc docs */
|
||||
|
@ -308,14 +306,9 @@ do_xevents(XtermWidget xw)
|
|||
TScreen *screen = TScreenOf(xw);
|
||||
|
||||
if (xtermAppPending()
|
||||
||
|
||||
#if defined(VMS) || defined(__VMS)
|
||||
screen->display->qlen > 0
|
||||
#else
|
||||
GetBytesAvailable(ConnectionNumber(screen->display)) > 0
|
||||
#endif
|
||||
)
|
||||
|| GetBytesAvailable(screen->display) > 0) {
|
||||
xevents(xw);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1346,7 +1339,7 @@ AtomBell(XtermWidget xw, int which)
|
|||
|
||||
for (n = 0; n < XtNumber(table); ++n) {
|
||||
if (table[n].value == which) {
|
||||
result = XInternAtom(XtDisplay(xw), table[n].name, False);
|
||||
result = CachedInternAtom(XtDisplay(xw), table[n].name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1780,10 +1773,11 @@ xtermDeiconify(XtermWidget xw)
|
|||
Display *dpy = screen->display;
|
||||
Window target = VShellWindow(xw);
|
||||
XEvent e;
|
||||
Atom atom_state = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
|
||||
Atom atom_state = CachedInternAtom(dpy, "_NET_ACTIVE_WINDOW");
|
||||
|
||||
if (xtermIsIconified(xw)) {
|
||||
TRACE(("...de-iconify window %#lx\n", target));
|
||||
ResetHiddenHint(xw);
|
||||
XMapWindow(dpy, target);
|
||||
|
||||
memset(&e, 0, sizeof(e));
|
||||
|
@ -1833,8 +1827,8 @@ xtermIsIconified(XtermWidget xw)
|
|||
unsigned char *prop_return = 0;
|
||||
long long_length = 1024;
|
||||
Atom requested_type = XA_ATOM;
|
||||
Atom is_hidden = XInternAtom(dpy, "_NET_WM_STATE_HIDDEN", False);
|
||||
Atom wm_state = XInternAtom(dpy, "_NET_WM_STATE", False);
|
||||
Atom is_hidden = CachedInternAtom(dpy, "_NET_WM_STATE_HIDDEN");
|
||||
Atom wm_state = CachedInternAtom(dpy, "_NET_WM_STATE");
|
||||
|
||||
/* this works with non-EWMH */
|
||||
result = (win_attrs.map_state != IsViewable) ? True : False;
|
||||
|
@ -2484,9 +2478,11 @@ GenerateLogPath(void)
|
|||
}
|
||||
}
|
||||
#else
|
||||
static const char log_def_name[] = "XtermLog.XXXXXX";
|
||||
if ((log_default = x_strdup(log_def_name)) != NULL) {
|
||||
MakeTemp(log_default);
|
||||
{
|
||||
static const char log_def_name[] = "XtermLog.XXXXXX";
|
||||
if ((log_default = x_strdup(log_def_name)) != NULL) {
|
||||
MakeTemp(log_default);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -3482,7 +3478,7 @@ xtermIsPrintable(XtermWidget xw, Char **bufp, Char *last)
|
|||
PtyData data;
|
||||
|
||||
if (decodeUtf8(screen, fakePtyData(&data, cp, last))) {
|
||||
if (data.utf_data != UCS_REPL
|
||||
if (!is_UCS_SPECIAL(data.utf_data)
|
||||
&& (data.utf_data >= 128 ||
|
||||
ansi_table[data.utf_data] == CASE_PRINT)) {
|
||||
next += (data.utf_size - 1);
|
||||
|
@ -4462,7 +4458,7 @@ parse_decudk(XtermWidget xw, const char *cp)
|
|||
* Parse numeric parameters. Normally we use a state machine to simplify
|
||||
* interspersing with control characters, but have the string already.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
parse_ansi_params(ANSI *params, const char **string)
|
||||
{
|
||||
const char *cp = *string;
|
||||
|
@ -4615,7 +4611,6 @@ parse_decdld(ANSI *params, const char *string)
|
|||
#define parse_decdld(p,q) /* nothing */
|
||||
#endif
|
||||
|
||||
#if OPT_DEC_RECTOPS
|
||||
static const char *
|
||||
skip_params(const char *cp)
|
||||
{
|
||||
|
@ -4624,9 +4619,11 @@ skip_params(const char *cp)
|
|||
return cp;
|
||||
}
|
||||
|
||||
#if OPT_MOD_FKEYS || OPT_DEC_RECTOPS || (OPT_VT525_COLORS && OPT_ISO_COLORS)
|
||||
static int
|
||||
parse_int_param(const char **cp)
|
||||
{
|
||||
Boolean found = False;
|
||||
int result = 0;
|
||||
const char *s = *cp;
|
||||
while (*s != '\0') {
|
||||
|
@ -4635,15 +4632,18 @@ parse_int_param(const char **cp)
|
|||
break;
|
||||
} else if (*s >= '0' && *s <= '9') {
|
||||
result = (result * 10) + (*s++ - '0');
|
||||
found = True;
|
||||
} else {
|
||||
s += strlen(s);
|
||||
}
|
||||
}
|
||||
TRACE(("parse-int %s ->%d, %#x->%s\n", *cp, result, result, s));
|
||||
TRACE(("parse-int \"%s\" ->%d, %#x->\"%s\"\n", *cp, result, result, s));
|
||||
*cp = s;
|
||||
return result;
|
||||
return found ? result : -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPT_DEC_RECTOPS
|
||||
static int
|
||||
parse_chr_param(const char **cp)
|
||||
{
|
||||
|
@ -4658,11 +4658,17 @@ parse_chr_param(const char **cp)
|
|||
}
|
||||
}
|
||||
}
|
||||
TRACE(("parse-chr %s ->%d, %#x->%s\n", *cp, result, result, s));
|
||||
TRACE(("parse-chr %s ->%#x, %#x->%s\n", *cp, result, result, s));
|
||||
*cp = s;
|
||||
return result;
|
||||
}
|
||||
|
||||
#if OPT_TRACE
|
||||
#define done_DECCIR() do { TRACE(("...quit DECCIR @%d\n", __LINE__)); return; } while(0)
|
||||
#else
|
||||
#define done_DECCIR() return
|
||||
#endif
|
||||
|
||||
static void
|
||||
restore_DECCIR(XtermWidget xw, const char *cp)
|
||||
{
|
||||
|
@ -4671,22 +4677,33 @@ restore_DECCIR(XtermWidget xw, const char *cp)
|
|||
|
||||
/* row */
|
||||
if ((value = parse_int_param(&cp)) <= 0 || value > MaxRows(screen))
|
||||
return;
|
||||
done_DECCIR();
|
||||
screen->cur_row = (value - 1);
|
||||
|
||||
/* column */
|
||||
if ((value = parse_int_param(&cp)) <= 0 || value > MaxCols(screen))
|
||||
return;
|
||||
done_DECCIR();
|
||||
screen->cur_col = (value - 1);
|
||||
|
||||
/* page */
|
||||
if (parse_int_param(&cp) != 1)
|
||||
return;
|
||||
done_DECCIR();
|
||||
|
||||
/* rendition */
|
||||
if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40)
|
||||
return;
|
||||
if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40) {
|
||||
if (value & 0x10) {
|
||||
/*
|
||||
* VT420 is documented for bit 5 always reset; VT520/VT525 are not
|
||||
* documented, but do use the bit for setting invisible mode.
|
||||
*/
|
||||
if (screen->vtXX_level <= 4)
|
||||
done_DECCIR();
|
||||
} else if (!(value & 0x40)) {
|
||||
done_DECCIR();
|
||||
}
|
||||
}
|
||||
UIntClr(xw->flags, (INVERSE | BLINK | UNDERLINE | BOLD));
|
||||
xw->flags |= (value & 16) ? INVISIBLE : 0;
|
||||
xw->flags |= (value & 8) ? INVERSE : 0;
|
||||
xw->flags |= (value & 4) ? BLINK : 0;
|
||||
xw->flags |= (value & 2) ? UNDERLINE : 0;
|
||||
|
@ -4694,38 +4711,39 @@ restore_DECCIR(XtermWidget xw, const char *cp)
|
|||
|
||||
/* attributes */
|
||||
if (((value = parse_chr_param(&cp)) & 0xfe) != 0x40)
|
||||
return;
|
||||
done_DECCIR();
|
||||
screen->protected_mode &= ~DEC_PROTECT;
|
||||
screen->protected_mode |= (value & 1) ? DEC_PROTECT : 0;
|
||||
|
||||
/* flags */
|
||||
if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40)
|
||||
return;
|
||||
done_DECCIR();
|
||||
screen->do_wrap = (value & 8) ? True : False;
|
||||
screen->curss = (Char) ((value & 4) ? 3 : ((value & 2) ? 2 : 0));
|
||||
UIntClr(xw->flags, ORIGIN);
|
||||
xw->flags |= (value & 1) ? ORIGIN : 0;
|
||||
|
||||
if ((value = (parse_chr_param(&cp) - '0')) < 0 || value >= NUM_GSETS)
|
||||
return;
|
||||
done_DECCIR();
|
||||
screen->curgl = (Char) value;
|
||||
|
||||
if ((value = (parse_chr_param(&cp) - '0')) < 0 || value >= NUM_GSETS)
|
||||
return;
|
||||
done_DECCIR();
|
||||
screen->curgr = (Char) value;
|
||||
|
||||
/* character-set size */
|
||||
if (parse_chr_param(&cp) != 0x4f) /* works for xterm */
|
||||
return;
|
||||
if (parse_chr_param(&cp) == 0xffff) /* FIXME: limit SCS? */
|
||||
done_DECCIR();
|
||||
|
||||
/* SCS designators */
|
||||
for (value = 0; value < NUM_GSETS; ++value) {
|
||||
if (*cp == '%') {
|
||||
xtermDecodeSCS(xw, value, 0, '%', *++cp);
|
||||
} else if (*cp != '\0') {
|
||||
xtermDecodeSCS(xw, value, 0, '\0', *cp);
|
||||
if (*cp == '\0') {
|
||||
done_DECCIR();
|
||||
} else if (strchr("%&\"", *cp) != NULL) {
|
||||
int prefix = *cp++;
|
||||
xtermDecodeSCS(xw, value, 0, prefix, *cp);
|
||||
} else {
|
||||
return;
|
||||
xtermDecodeSCS(xw, value, 0, '\0', *cp);
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
|
@ -4747,10 +4765,8 @@ restore_DECTABSR(XtermWidget xw, const char *cp)
|
|||
--stop;
|
||||
if (OkTAB(stop)) {
|
||||
TabSet(xw->tabs, stop);
|
||||
stop = 0;
|
||||
} else {
|
||||
fail = True;
|
||||
}
|
||||
stop = 0;
|
||||
} else {
|
||||
fail = True;
|
||||
}
|
||||
|
@ -4762,7 +4778,116 @@ restore_DECTABSR(XtermWidget xw, const char *cp)
|
|||
|
||||
TRACE(("...done DECTABSR\n"));
|
||||
}
|
||||
#endif
|
||||
#endif /* OPT_DEC_RECTOPS */
|
||||
|
||||
/*
|
||||
* VT510 and VT520 reference manual have the same explanation for Pn (params),
|
||||
* but it does not agree with the possible values for Dscs because it refers
|
||||
* to "ISO Latin-7" (ISO 8859-13 aka "Baltic Rim"), and omits ISO Greek
|
||||
* (ISO 8859-7):
|
||||
*
|
||||
* ------------------------------------------------------------------------
|
||||
* Pn Meaning
|
||||
* ------------------------------------------------------------------------
|
||||
* 0 DEC, ISO Latin-1, ISO Latin-2
|
||||
* 1 ISO Latin-5, ISO Latin-7, ISO Cyrillic, ISO Hebrew
|
||||
* ------------------------------------------------------------------------
|
||||
*
|
||||
* versus
|
||||
*
|
||||
* ------------------------------------------------------------------------
|
||||
* Dscs Character Set
|
||||
* ------------------------------------------------------------------------
|
||||
* %5 DEC Supplemental
|
||||
* "? DEC Greek
|
||||
* "4 DEC Hebrew
|
||||
* %0 DEC Turkish
|
||||
* &4 DEC Cyrillic
|
||||
* < User-preferred Supplemental
|
||||
* A ISO Latin-1 Supplemental
|
||||
* B ISO Latin-2 Supplemental
|
||||
* F ISO Greek Supplemental
|
||||
* H ISO Hebrew Supplemental
|
||||
* M ISO Latin-5 Supplemental
|
||||
* L ISO Latin-Cyrillic
|
||||
* ------------------------------------------------------------------------
|
||||
*
|
||||
* DEC 070, page 5-123 explains that Pn ("Ps" in the text) selects 94 or 96
|
||||
* character sets (0 or 1, respectively), and on the next page states that
|
||||
* the valid combinations are 0 (DEC Supplemental) and 1 (ISO Latin-1
|
||||
* supplemental). The document comments in regard to LS0 that (applications)
|
||||
* should not assume that they can use 96-character sets for G0, but that it
|
||||
* is possible to do this using UPSS.
|
||||
*
|
||||
* The VT510/VT520 reference manuals under SCS Select Character Set show
|
||||
* a list of 94- and 96-character sets with "DEC" and "NRCS" as 94-characters,
|
||||
* and the "ISO" as 96-characters. A few 94-character sets are added, based
|
||||
* on testing VT520/VT525 that shows that DEC Special Graphics also is allowed.
|
||||
*/
|
||||
static Bool
|
||||
decode_upss(XtermWidget xw, const char *cp, char psarg, DECNRCM_codes * upss)
|
||||
{
|
||||
/* *INDENT-OFF* */
|
||||
static const struct {
|
||||
DECNRCM_codes code;
|
||||
int params; /* 0 for 94-characters, 1 for 96-characters */
|
||||
int prefix;
|
||||
int suffix;
|
||||
int min_level;
|
||||
int max_level;
|
||||
} upss_table[] = {
|
||||
{ DFT_UPSS, 0, '%', '5', 3, 9 },
|
||||
{ nrc_ASCII, 0, 0, 'A', 1, 9 }, /* undocumented */
|
||||
{ nrc_DEC_Spec_Graphic, 0, 0, '0', 1, 9 }, /* undocumented */
|
||||
{ nrc_DEC_Technical, 0, 0, '>', 3, 9 }, /* undocumented */
|
||||
{ nrc_DEC_Greek_Supp, 0, '"', '?', 5, 9 },
|
||||
{ nrc_DEC_Hebrew_Supp, 0, '"', '4', 5, 9 },
|
||||
{ nrc_DEC_Turkish_Supp, 0, '%', '0', 5, 9 },
|
||||
{ nrc_DEC_Cyrillic, 0, '&', '4', 5, 9 },
|
||||
{ ALT_UPSS, 1, 0, 'A', 3, 9 },
|
||||
{ nrc_ISO_Latin_2_Supp, 1, 0, 'B', 5, 9 },
|
||||
{ nrc_ISO_Greek_Supp, 1, 0, 'F', 5, 9 },
|
||||
{ nrc_ISO_Hebrew_Supp, 1, 0, 'H', 5, 9 },
|
||||
{ nrc_ISO_Latin_5_Supp, 1, 0, 'M', 5, 9 },
|
||||
{ nrc_ISO_Latin_Cyrillic, 1, 0, 'L', 5, 9 },
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
Bool result = False;
|
||||
|
||||
*upss = nrc_ASCII;
|
||||
if (screen->vtXX_level >= 3) {
|
||||
Cardinal n;
|
||||
for (n = 0; n < XtNumber(upss_table); ++n) {
|
||||
if (((int) psarg - '0') != upss_table[n].params)
|
||||
continue;
|
||||
|
||||
if (cp[1] == '\0') {
|
||||
if (upss_table[n].suffix != cp[0])
|
||||
continue;
|
||||
} else if (cp[2] == '\0') {
|
||||
if (upss_table[n].prefix != cp[0])
|
||||
continue;
|
||||
if (upss_table[n].suffix != cp[1])
|
||||
continue;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
result = True;
|
||||
*upss = upss_table[n].code;
|
||||
if (*upss == DFT_UPSS) {
|
||||
TRACE(("DECAUPSS (default)\n"));
|
||||
} else if (*upss == ALT_UPSS) {
|
||||
TRACE(("DECAUPSS (alternate)\n"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
TRACE(("DECAUPSS %ssuccessful %s\n",
|
||||
result ? "" : "not ", visibleScsCode(*upss)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
||||
|
@ -4772,8 +4897,12 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
const char *cp = (const char *) dcsbuf;
|
||||
Bool okay;
|
||||
ANSI params;
|
||||
#if OPT_DEC_RECTOPS
|
||||
char psarg = '0';
|
||||
#if OPT_VT525_COLORS && OPT_ISO_COLORS
|
||||
const char *cp2;
|
||||
#endif
|
||||
#if (OPT_VT525_COLORS && OPT_ISO_COLORS) || OPT_MOD_FKEYS
|
||||
int ival;
|
||||
#endif
|
||||
|
||||
TRACE(("do_dcs(%s:%lu)\n", (char *) dcsbuf, (unsigned long) dcslen));
|
||||
|
@ -4863,13 +4992,80 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
screen->status_type,
|
||||
cp);
|
||||
} else
|
||||
#endif
|
||||
#if OPT_DEC_RECTOPS
|
||||
if (!strcmp(cp, "*x")) { /* DECSACE */
|
||||
TRACE(("reply DECSACE\n"));
|
||||
sprintf(reply, "%d%s",
|
||||
screen->cur_decsace,
|
||||
cp);
|
||||
} else
|
||||
#endif
|
||||
if (!strcmp(cp, "*|")) { /* DECSNLS */
|
||||
TRACE(("reply DECSNLS\n"));
|
||||
sprintf(reply, "%d%s",
|
||||
screen->max_row + 1,
|
||||
cp);
|
||||
} else {
|
||||
} else
|
||||
#if OPT_VT525_COLORS && OPT_ISO_COLORS
|
||||
if (screen->terminal_id == 525
|
||||
&& !strcmp((cp2 = skip_params(cp)), ",}")) { /* DECATC */
|
||||
ival = parse_int_param(&cp);
|
||||
TRACE(("reply DECATC:%s\n", cp));
|
||||
if (ival >= 0 && ival < 16 && *cp2 == ',') {
|
||||
sprintf(reply, "%d;%d;%d%s", ival,
|
||||
screen->alt_colors[ival].fg,
|
||||
screen->alt_colors[ival].bg,
|
||||
cp2);
|
||||
} else {
|
||||
okay = False;
|
||||
}
|
||||
} else if (screen->terminal_id == 525
|
||||
&& !strcmp((cp2 = skip_params(cp)), ",|")) { /* DECAC */
|
||||
ival = parse_int_param(&cp);
|
||||
TRACE(("reply DECAC\n"));
|
||||
switch (ival) {
|
||||
case 1: /* normal text */
|
||||
sprintf(reply, "%d,%d%s",
|
||||
screen->assigned_fg,
|
||||
screen->assigned_bg,
|
||||
cp2);
|
||||
break;
|
||||
case 2: /* window frame (not implemented) */
|
||||
/* FALLTHRU */
|
||||
default:
|
||||
okay = False;
|
||||
break;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
#if OPT_MOD_FKEYS
|
||||
if (*cp == '>' && !strcmp(skip_params(1 + cp), "m")) { /* XTQMODKEYS */
|
||||
++cp;
|
||||
okay = True;
|
||||
ival = parse_int_param(&cp);
|
||||
#define GET_MOD_FKEYS(field) xw->keyboard.modify_now.field
|
||||
#define FMT_MOD_FKEYS(field) sprintf(reply, ">%d;%dm", ival, GET_MOD_FKEYS(field))
|
||||
switch (ival) {
|
||||
case 0:
|
||||
FMT_MOD_FKEYS(allow_keys);
|
||||
break;
|
||||
case 1:
|
||||
FMT_MOD_FKEYS(cursor_keys);
|
||||
break;
|
||||
case 2:
|
||||
FMT_MOD_FKEYS(function_keys);
|
||||
break;
|
||||
case 4:
|
||||
FMT_MOD_FKEYS(other_keys);
|
||||
break;
|
||||
default:
|
||||
okay = False;
|
||||
break;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
okay = False;
|
||||
}
|
||||
|
||||
|
@ -4935,7 +5131,7 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
unparseputn(xw, xw->rgb_widths[0]);
|
||||
} else {
|
||||
char temp[1024];
|
||||
sprintf(temp, "%d/%d/%d",
|
||||
sprintf(temp, "%u/%u/%u",
|
||||
xw->rgb_widths[0],
|
||||
xw->rgb_widths[1],
|
||||
xw->rgb_widths[2]);
|
||||
|
@ -4988,6 +5184,7 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
break; /* no data found, error */
|
||||
}
|
||||
if ((cp - parsed) > 1024) {
|
||||
free(name);
|
||||
break; /* ignore improbable resource */
|
||||
}
|
||||
TRACE(("query-feature '%s'\n", name));
|
||||
|
@ -5032,8 +5229,25 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
#endif
|
||||
}
|
||||
break;
|
||||
#if OPT_DEC_RECTOPS
|
||||
case '0':
|
||||
/* FALLTHRU */
|
||||
case '1':
|
||||
if (screen->vtXX_level >= 3 && *skip_params(cp) == '!') {
|
||||
DECNRCM_codes upss;
|
||||
psarg = *cp++;
|
||||
if (*cp++ == '!' && *cp++ == 'u') {
|
||||
#if OPT_WIDE_CHARS
|
||||
if (screen->wide_chars && screen->utf8_mode) {
|
||||
; /* EMPTY */
|
||||
} else
|
||||
#endif
|
||||
if (decode_upss(xw, cp, psarg, &upss)) {
|
||||
screen->gsets_upss = upss;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#if OPT_DEC_RECTOPS
|
||||
/* FALLTHRU */
|
||||
case '2':
|
||||
if (*skip_params(cp) == '$') {
|
||||
|
@ -5058,7 +5272,6 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
/* FALLTHRU */
|
||||
default:
|
||||
if (optRegisGraphics(screen) ||
|
||||
optSixelGraphics(screen) ||
|
||||
screen->vtXX_level >= 2) { /* VT220 */
|
||||
parse_ansi_params(¶ms, &cp);
|
||||
switch (params.a_final) {
|
||||
|
@ -5071,14 +5284,7 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
|
|||
TRACE(("ignoring ReGIS graphic (compilation flag not enabled)\n"));
|
||||
#endif
|
||||
break;
|
||||
case 'q': /* sixel */
|
||||
#if OPT_SIXEL_GRAPHICS
|
||||
if (optSixelGraphics(screen)) {
|
||||
(void) parse_sixel(xw, ¶ms, cp);
|
||||
}
|
||||
#else
|
||||
TRACE(("ignoring sixel graphic (compilation flag not enabled)\n"));
|
||||
#endif
|
||||
case 'q': /* sixel is done in charproc.c */
|
||||
break;
|
||||
case '|': /* DECUDK */
|
||||
if (screen->vtXX_level >= 2) { /* VT220 */
|
||||
|
@ -5304,6 +5510,9 @@ do_dec_rqm(XtermWidget xw, int nparams, int *params)
|
|||
if_PRINT_GRAPHICS2(result = MdBool(screen->graphics_print_color_syntax))
|
||||
result = MdFlag(xw->flags, REVERSEWRAP);
|
||||
break;
|
||||
case srm_REVERSEWRAP2: /* extended reverse wraparound */
|
||||
result = MdFlag(xw->flags, REVERSEWRAP2);
|
||||
break;
|
||||
#if defined(ALLOWLOGGING)
|
||||
case srm_ALLOWLOGGING: /* logging */
|
||||
if_PRINT_GRAPHICS2(result = MdBool(screen->graphics_print_background_mode))
|
||||
|
@ -5429,6 +5638,9 @@ do_dec_rqm(XtermWidget xw, int nparams, int *params)
|
|||
case srm_SAVE_CURSOR:
|
||||
result = MdBool(screen->sc[screen->whichBuf].saved);
|
||||
break;
|
||||
case srm_FAST_SCROLL:
|
||||
result = MdBool(screen->fastscroll);
|
||||
break;
|
||||
#if OPT_TCAP_FKEYS
|
||||
case srm_TCAP_FKEYS:
|
||||
result = MdBool(xw->keyboard.type == keyboardIsTermcap);
|
||||
|
@ -5489,6 +5701,35 @@ do_dec_rqm(XtermWidget xw, int nparams, int *params)
|
|||
result = MdBool(screen->sixel_scrolls_right);
|
||||
break;
|
||||
#endif
|
||||
case srm_DECARSM: /* ignore */
|
||||
case srm_DECATCBM: /* ignore */
|
||||
case srm_DECATCUM: /* ignore */
|
||||
case srm_DECBBSM: /* ignore */
|
||||
case srm_DECCAAM: /* ignore */
|
||||
case srm_DECCANSM: /* ignore */
|
||||
case srm_DECCAPSLK: /* ignore */
|
||||
case srm_DECCRTSM: /* ignore */
|
||||
case srm_DECECM: /* ignore */
|
||||
case srm_DECFWM: /* ignore */
|
||||
case srm_DECHCCM: /* ignore */
|
||||
case srm_DECHDPXM: /* ignore */
|
||||
case srm_DECHEM: /* ignore */
|
||||
case srm_DECHWUM: /* ignore */
|
||||
case srm_DECIPEM: /* ignore */
|
||||
case srm_DECKBUM: /* ignore */
|
||||
case srm_DECKLHIM: /* ignore */
|
||||
case srm_DECKPM: /* ignore */
|
||||
case srm_DECRLM: /* ignore */
|
||||
case srm_DECMCM: /* ignore */
|
||||
case srm_DECNAKB: /* ignore */
|
||||
case srm_DECNULM: /* ignore */
|
||||
case srm_DECNUMLK: /* ignore */
|
||||
case srm_DECOSCNM: /* ignore */
|
||||
case srm_DECPCCM: /* ignore */
|
||||
case srm_DECRLCM: /* ignore */
|
||||
case srm_DECRPL: /* ignore */
|
||||
case srm_DECVCCM: /* ignore */
|
||||
case srm_DECXRLM: /* ignore */
|
||||
default:
|
||||
TRACE(("DATA_ERROR: requested report for unknown private mode %d\n",
|
||||
params[0]));
|
||||
|
@ -5914,7 +6155,9 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value)
|
|||
char *buf = 0;
|
||||
XtSetArg(args[0], my_attr, &buf);
|
||||
XtGetValues(top, args, 1);
|
||||
TRACE(("...comparing{%s}\n", NonNull(buf)));
|
||||
TRACE(("...comparing resource{%s} to new value{%s}\n",
|
||||
NonNull(buf),
|
||||
NonNull(value)));
|
||||
if (buf != 0 && strcmp(value, buf) == 0)
|
||||
changed = False;
|
||||
}
|
||||
|
@ -5932,7 +6175,7 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value)
|
|||
const char *propname = (!strcmp(my_attr, XtNtitle)
|
||||
? "_NET_WM_NAME"
|
||||
: "_NET_WM_ICON_NAME");
|
||||
Atom my_atom = XInternAtom(dpy, propname, False);
|
||||
Atom my_atom = CachedInternAtom(dpy, propname);
|
||||
|
||||
if (my_atom != None) {
|
||||
changed = True;
|
||||
|
@ -5997,9 +6240,6 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value)
|
|||
void
|
||||
ChangeIconName(XtermWidget xw, char *name)
|
||||
{
|
||||
if (name == 0) {
|
||||
name = emptyString;
|
||||
}
|
||||
if (!showZIconBeep(xw, name))
|
||||
ChangeGroup(xw, XtNiconName, name);
|
||||
}
|
||||
|
@ -6023,7 +6263,7 @@ ChangeXprop(char *buf)
|
|||
|
||||
if (pchEndPropName)
|
||||
*pchEndPropName = '\0';
|
||||
aprop = XInternAtom(dpy, buf, False);
|
||||
aprop = CachedInternAtom(dpy, buf);
|
||||
if (pchEndPropName == NULL) {
|
||||
/* no "=value" given, so delete the property */
|
||||
XDeleteProperty(dpy, w, aprop);
|
||||
|
@ -6581,7 +6821,7 @@ xt_error(String message)
|
|||
if (x_getenv("DISPLAY") == 0) {
|
||||
xtermWarning("DISPLAY is not set\n");
|
||||
}
|
||||
exit(1);
|
||||
exit(ERROR_MISC);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -7593,6 +7833,90 @@ xtermSetWinSize(XtermWidget xw)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
xtermInitTitle(TScreen *screen, int which)
|
||||
{
|
||||
TRACE(("xtermInitTitle #%d\n", which));
|
||||
screen->saved_titles.data[which].iconName = NULL;
|
||||
screen->saved_titles.data[which].windowName = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Store/update an item on the title stack.
|
||||
*/
|
||||
void
|
||||
xtermPushTitle(TScreen *screen, int which, SaveTitle * item)
|
||||
{
|
||||
if (which-- <= 0) {
|
||||
which = screen->saved_titles.used++;
|
||||
screen->saved_titles.used %= MAX_SAVED_TITLES;
|
||||
}
|
||||
which %= MAX_SAVED_TITLES;
|
||||
xtermFreeTitle(&screen->saved_titles.data[which]);
|
||||
screen->saved_titles.data[which] = *item;
|
||||
TRACE(("xtermPushTitle #%d: icon='%s', window='%s'\n", which,
|
||||
NonNull(item->iconName),
|
||||
NonNull(item->windowName)));
|
||||
}
|
||||
|
||||
/*
|
||||
* Pop/retrieve an item from the title stack.
|
||||
*/
|
||||
Boolean
|
||||
xtermPopTitle(TScreen *screen, int which, SaveTitle * item)
|
||||
{
|
||||
Boolean result = True;
|
||||
Boolean popped = False;
|
||||
|
||||
if (which-- > 0) {
|
||||
which %= MAX_SAVED_TITLES;
|
||||
} else if (screen->saved_titles.used > 0) {
|
||||
which = ((--(screen->saved_titles.used) + MAX_SAVED_TITLES) % MAX_SAVED_TITLES);
|
||||
popped = True;
|
||||
} else {
|
||||
result = False;
|
||||
}
|
||||
if (result) {
|
||||
*item = screen->saved_titles.data[which];
|
||||
TRACE(("xtermPopTitle #%d: icon='%s', window='%s'\n", which,
|
||||
NonNull(item->iconName),
|
||||
NonNull(item->windowName)));
|
||||
|
||||
/* if the data is incomplete, try to get it from the next levels */
|
||||
#define TryHigher(name) \
|
||||
if (item->name == NULL) { \
|
||||
int n; \
|
||||
for (n = 1; n < MAX_SAVED_TITLES; ++n) { \
|
||||
int nw = ((which - n) + MAX_SAVED_TITLES) % MAX_SAVED_TITLES; \
|
||||
if ((item->name = screen->saved_titles.data[nw].name) != NULL) { \
|
||||
item->name = x_strdup(item->name); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
TryHigher(iconName);
|
||||
TryHigher(windowName);
|
||||
|
||||
if (popped) {
|
||||
xtermInitTitle(screen, which);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Discard data used for pushing or popping title.
|
||||
*/
|
||||
void
|
||||
xtermFreeTitle(SaveTitle * item)
|
||||
{
|
||||
TRACE(("xtermFreeTitle icon='%s', window='%s'\n",
|
||||
NonNull(item->iconName),
|
||||
NonNull(item->windowName)));
|
||||
FreeAndNull(item->iconName);
|
||||
FreeAndNull(item->windowName);
|
||||
}
|
||||
|
||||
#if OPT_XTERM_SGR
|
||||
|
||||
#if OPT_TRACE
|
||||
|
|
|
@ -1,3 +1,93 @@
|
|||
xterm-dev (393) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 25 May 2024 09:03:00 -0400
|
||||
|
||||
xterm-dev (392) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Wed, 15 May 2024 16:52:03 -0400
|
||||
|
||||
xterm-dev (391) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Tue, 16 Apr 2024 03:51:06 -0400
|
||||
|
||||
xterm-dev (390) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Thu, 11 Jan 2024 16:18:30 -0500
|
||||
|
||||
xterm-dev (389) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sun, 12 Nov 2023 16:48:50 -0500
|
||||
|
||||
xterm-dev (388) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Fri, 20 Oct 2023 16:43:09 -0400
|
||||
|
||||
xterm-dev (387) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Tue, 10 Oct 2023 20:02:59 -0400
|
||||
|
||||
xterm-dev (386) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Mon, 02 Oct 2023 17:19:01 -0400
|
||||
|
||||
xterm-dev (385) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Thu, 13 Jul 2023 14:57:11 -0400
|
||||
|
||||
xterm-dev (384) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Thu, 29 Jun 2023 18:22:58 -0400
|
||||
|
||||
xterm-dev (383) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Wed, 31 May 2023 13:04:55 -0400
|
||||
|
||||
xterm-dev (382) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Mon, 29 May 2023 07:15:40 -0400
|
||||
|
||||
xterm-dev (381) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sun, 28 May 2023 04:34:22 -0400
|
||||
|
||||
xterm-dev (380) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sun, 26 Feb 2023 20:00:24 -0500
|
||||
|
||||
xterm-dev (379) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Tue, 24 Jan 2023 20:14:44 -0500
|
||||
|
||||
xterm-dev (378) unstable; urgency=low
|
||||
|
||||
* maintenance updates
|
||||
|
|
|
@ -1 +1 @@
|
|||
10
|
||||
12
|
||||
|
|
|
@ -35,7 +35,7 @@ authorization.
|
|||
Files: * */*
|
||||
License: MIT-X11
|
||||
|
||||
Copyright 1996-2022,2023 by Thomas E. Dickey
|
||||
Copyright 1996-2023,2024 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).
|
||||
|
|
|
@ -109,7 +109,7 @@ install: install-stamp
|
|||
install-stamp: build-stamp
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_prep
|
||||
dh_installdirs
|
||||
|
||||
$(MAKE) install \
|
||||
|
@ -123,8 +123,8 @@ install-indep:
|
|||
install-arch:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_prep -s
|
||||
dh_installdirs -s
|
||||
dh_prep -a
|
||||
dh_installdirs -a
|
||||
|
||||
$(MAKE) install-bin \
|
||||
DESTDIR=$(DSTDIR)
|
||||
|
|
|
@ -4,22 +4,4 @@
|
|||
xterm-dev: command-in-menu-file-and-desktop-file xterm-dev usr/share/menu/xterm-dev:7
|
||||
xterm-dev: command-in-menu-file-and-desktop-file uxterm-dev usr/share/menu/xterm-dev:14
|
||||
|
||||
# The lintian warning is incorrect: there is no portable path for Perl.
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906901
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=904409
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/256colors.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/256colors2.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/88colors.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/88colors2.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/closest-rgb.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/dynamic.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/paste64.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/query-color.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/query-fonts.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/query-status.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/report-sgr.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/resize.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/sgrPushPop.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/tcapquery.pl (#!/usr/bin/env != /usr/bin/perl)
|
||||
|
||||
# vile: confmode
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $XTermId: Makefile,v 1.99 2022/11/26 12:25:02 tom Exp $
|
||||
# $XTermId: Makefile,v 1.114 2024/05/25 13:03:00 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= 378
|
||||
PORTVERSION= 393
|
||||
CATEGORIES= x11
|
||||
MASTER_SITES= ftp://ftp.invisible-island.net/xterm/:src1 \
|
||||
https://invisible-mirror.net/archives/xterm/:src1
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# $NetBSD: Makefile,v 1.117 2018/03/12 11:18:00 wiz Exp $
|
||||
|
||||
DISTNAME= xterm-378
|
||||
DISTNAME= xterm-393
|
||||
PKGREVISION= 1
|
||||
CATEGORIES= x11
|
||||
MASTER_SITES= ftp://ftp.invisible-island.net/xterm/
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# $XTermId: xterm.spec,v 1.156 2022/11/26 12:25:02 tom Exp $
|
||||
# $XTermId: xterm.spec,v 1.172 2024/05/25 13:03:00 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: 378
|
||||
Version: 393
|
||||
Release: 1
|
||||
License: X11
|
||||
Group: User Interface/X
|
||||
Source: xterm-%{version}.tgz
|
||||
Source: https://invisible-island.net/archives/xterm/xterm-%{version}.tgz
|
||||
URL: https://invisible-island.net/xterm/
|
||||
Provides: x-terminal-emulator >= %{version}
|
||||
|
||||
|
@ -209,14 +209,6 @@ if [ -x %{_bindir}/gtk-update-icon-cache ]; then
|
|||
fi
|
||||
%endif
|
||||
|
||||
%clean
|
||||
if rm -rf $RPM_BUILD_ROOT; then
|
||||
echo OK
|
||||
else
|
||||
find $RPM_BUILD_ROOT -type f | grep -F -v /.nfs && exit 1
|
||||
fi
|
||||
exit 0
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%{_bindir}/koi8r%{fullname}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: print.c,v 1.173 2022/09/18 21:00:08 tom Exp $ */
|
||||
/* $XTermId: print.c,v 1.176 2023/11/24 12:16:37 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1997-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -395,6 +395,7 @@ send_SGR(XtermWidget xw, unsigned attr, unsigned fg, unsigned bg)
|
|||
if ((attr & FG_COLOR) && (fg != NO_COLOR)) {
|
||||
if (TScreenOf(xw)->boldColors
|
||||
&& fg > 8
|
||||
&& fg < 16
|
||||
&& (attr & BOLD) != 0)
|
||||
fg -= 8;
|
||||
}
|
||||
|
@ -413,6 +414,17 @@ charToPrinter(XtermWidget xw, unsigned chr)
|
|||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
|
||||
#if OPT_WIDE_CHARS
|
||||
if (screen->wide_chars && screen->utf8_mode) {
|
||||
if (chr == UCS_REPL) {
|
||||
stringToPrinter(xw, screen->default_string);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (is_NON_CHAR(chr))
|
||||
return;
|
||||
|
||||
if (!SPS.isOpen && (SPS.toFile || xtermHasPrinter(xw))) {
|
||||
switch (SPS.toFile) {
|
||||
/*
|
||||
|
@ -453,7 +465,7 @@ charToPrinter(XtermWidget xw, unsigned chr)
|
|||
|
||||
/* don't want privileges! */
|
||||
if (xtermResetIds(screen) < 0)
|
||||
exit(1);
|
||||
exit(ERROR_MISC);
|
||||
|
||||
SPS.fp = popen(SPS.printer_command, "w");
|
||||
if (SPS.fp != 0) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: ptydata.c,v 1.158 2022/10/10 19:27:56 tom Exp $ */
|
||||
/* $XTermId: ptydata.c,v 1.160 2024/05/10 22:54:17 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2020,2022 by Thomas E. Dickey
|
||||
* Copyright 1999-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -98,13 +98,24 @@ decodeUtf8(TScreen *screen, PtyData *data)
|
|||
} else if (c < 0xc0) {
|
||||
/* We received a continuation byte */
|
||||
if (utf_count < 1) {
|
||||
/*
|
||||
* We received a continuation byte before receiving a sequence
|
||||
* state. Or an attempt to use a C1 control string. Either
|
||||
* way, it is mapped to the replacement character, unless
|
||||
* allowed by optional feature.
|
||||
*/
|
||||
data->utf_data = (IChar) (screen->c1_printable ? c : UCS_REPL);
|
||||
if (screen->c1_printable) {
|
||||
data->utf_data = (IChar) c;
|
||||
} else if ((i + 1) < length
|
||||
&& data->next[i + 1] > 0x20
|
||||
&& data->next[i + 1] < 0x80) {
|
||||
/*
|
||||
* Allow for C1 control string if the next byte is
|
||||
* available for inspection.
|
||||
*/
|
||||
data->utf_data = (IChar) c;
|
||||
} else {
|
||||
/*
|
||||
* We received a continuation byte before receiving a
|
||||
* sequence state, or a failed attempt to use a C1 control
|
||||
* string.
|
||||
*/
|
||||
data->utf_data = (IChar) UCS_REPL;
|
||||
}
|
||||
data->utf_size = (i + 1);
|
||||
break;
|
||||
} else if (screen->utf8_weblike
|
||||
|
@ -224,10 +235,10 @@ decodeUtf8(TScreen *screen, PtyData *data)
|
|||
}
|
||||
}
|
||||
#if OPT_TRACE > 1
|
||||
TRACE(("UTF-8 char %04X [%d..%d]\n",
|
||||
TRACE(("UTF-8 char %04X [%lu..%lu]\n",
|
||||
data->utf_data,
|
||||
(size_t) (data->next - data->buffer),
|
||||
(size_t) (data->next - data->buffer + data->utf_size - 1)));
|
||||
(unsigned long) (data->next - data->buffer),
|
||||
(unsigned long) (data->next - data->buffer + data->utf_size - 1)));
|
||||
#endif
|
||||
|
||||
return (data->utf_size != 0);
|
||||
|
@ -889,7 +900,7 @@ do_range(const char *source)
|
|||
data->last = data->buffer + j;
|
||||
while (decodeUtf8(&screen, data)) {
|
||||
total_test++;
|
||||
if (data->utf_data == UCS_REPL)
|
||||
if (is_UCS_SPECIAL(data->utf_data))
|
||||
total_errs++;
|
||||
data->next += data->utf_size;
|
||||
if (message_level > 1) {
|
||||
|
|
280
app/xterm/ptyx.h
280
app/xterm/ptyx.h
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: ptyx.h,v 1.1082 2023/01/02 13:24:41 tom Exp $ */
|
||||
/* $XTermId: ptyx.h,v 1.1124 2024/05/21 23:30:59 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2022,2023 by Thomas E. Dickey
|
||||
* Copyright 1999-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -389,6 +389,7 @@ typedef struct {
|
|||
#define ANSI_OSC 0x9D
|
||||
#define ANSI_PM 0x9E
|
||||
#define ANSI_APC 0x9F
|
||||
#define XTERM_PUA 0xEEEE /* internal mapping for DEC Technical */
|
||||
|
||||
#define BAD_ASCII '?'
|
||||
#define NonLatin1(c) (((c) != ANSI_LF) && \
|
||||
|
@ -397,6 +398,9 @@ typedef struct {
|
|||
((c) >= ANSI_DEL && (c) <= ANSI_APC)))
|
||||
#define OnlyLatin1(c) (NonLatin1(c) ? BAD_ASCII : (c))
|
||||
|
||||
#define L_BLOK '['
|
||||
#define R_BLOK ']'
|
||||
|
||||
#define L_CURL '{'
|
||||
#define R_CURL '}'
|
||||
|
||||
|
@ -445,6 +449,12 @@ typedef struct {
|
|||
typedef short ParmType;
|
||||
typedef unsigned short UParm; /* unparseputn passes ParmType */
|
||||
|
||||
#define MaxSParm 0x7fff /* limit if a signed value is needed */
|
||||
#define MaxUParm 0xffff /* limit if unsigned value is needed */
|
||||
|
||||
#define SParmOf(n) ((int)(ParmType)(n))
|
||||
#define UParmOf(n) ((unsigned)(UParm)(n))
|
||||
|
||||
typedef struct {
|
||||
Char a_type; /* CSI, etc., see unparseq() */
|
||||
Char a_pintro; /* private-mode char, if any */
|
||||
|
@ -485,15 +495,14 @@ typedef struct {
|
|||
int height;
|
||||
} BitmapBits;
|
||||
|
||||
/* bit-assignments for extensions to DECRQCRA */
|
||||
/* bit-assignments for extensions to DECRQCRA, to omit DEC features */
|
||||
typedef enum {
|
||||
csDEC = 0
|
||||
,csPOSITIVE = xBIT(0)
|
||||
,csATTRIBS = xBIT(1)
|
||||
,csNOTRIM = xBIT(2)
|
||||
,csDRAWN = xBIT(3)
|
||||
,csBYTE = xBIT(4)
|
||||
,cs8TH = xBIT(5)
|
||||
,csPOSITIVE = xBIT(0) /* do not negate the result */
|
||||
,csATTRIBS = xBIT(1) /* do not report the VT100 video attributes */
|
||||
,csNOTRIM = xBIT(2) /* do not omit checksum for blanks */
|
||||
,csDRAWN = xBIT(3) /* do not skip uninitialized cells */
|
||||
,csBYTE = xBIT(4) /* do not mask cell value to 8 bits or ignore combining chars */
|
||||
} CSBITS;
|
||||
|
||||
#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp
|
||||
|
@ -830,6 +839,10 @@ typedef enum {
|
|||
#define OPT_WIDE_ATTRS 1 /* true if xterm supports 16-bit attributes */
|
||||
#endif
|
||||
|
||||
#ifndef OPT_VT525_COLORS
|
||||
#define OPT_VT525_COLORS 1 /* true if xterm is configured for VT525 colors */
|
||||
#endif
|
||||
|
||||
#ifndef OPT_WIDE_CHARS
|
||||
#define OPT_WIDE_CHARS 1 /* true if xterm supports 16-bit characters */
|
||||
#endif
|
||||
|
@ -923,7 +936,7 @@ typedef enum {
|
|||
, gcBoldReverse
|
||||
, gcFiller
|
||||
, gcBorder
|
||||
#if OPT_BOX_CHARS
|
||||
#if OPT_BOX_CHARS || OPT_WIDE_CHARS
|
||||
, gcLine
|
||||
, gcDots
|
||||
#endif
|
||||
|
@ -1028,6 +1041,7 @@ typedef enum {
|
|||
,nrc_DEC_Supp /* vt2xx */
|
||||
,nrc_DEC_Supp_Graphic /* vt3xx */
|
||||
,nrc_DEC_Technical /* vt3xx */
|
||||
,nrc_DEC_UPSS /* vt3xx */
|
||||
,nrc_Dutch /* vt2xx */
|
||||
,nrc_Finnish /* vt2xx */
|
||||
,nrc_Finnish2 /* vt2xx */
|
||||
|
@ -1043,7 +1057,7 @@ typedef enum {
|
|||
,nrc_Hebrew /* vt5xx */
|
||||
,nrc_ISO_Hebrew_Supp /* vt5xx */
|
||||
,nrc_Italian /* vt2xx */
|
||||
,nrc_ISO_Latin_1_Supp /* vt5xx */
|
||||
,nrc_ISO_Latin_1_Supp /* vt3xx */
|
||||
,nrc_ISO_Latin_2_Supp /* vt5xx */
|
||||
,nrc_ISO_Latin_5_Supp /* vt5xx */
|
||||
,nrc_ISO_Latin_Cyrillic /* vt5xx */
|
||||
|
@ -1062,19 +1076,26 @@ typedef enum {
|
|||
,nrc_Unknown
|
||||
} DECNRCM_codes;
|
||||
|
||||
/*
|
||||
* Default and alternate codes for user-preferred supplemental set.
|
||||
*/
|
||||
#define DFT_UPSS nrc_DEC_Supp_Graphic
|
||||
#define ALT_UPSS nrc_ISO_Latin_1_Supp
|
||||
#define PreferredUPSS(screen) ((screen)->prefer_latin1 ? ALT_UPSS : DFT_UPSS)
|
||||
|
||||
/*
|
||||
* Use this enumerated type to check consistency among dpmodes(), savemodes()
|
||||
* restoremodes() and do_dec_rqm().
|
||||
*/
|
||||
typedef enum {
|
||||
srm_DECCKM = 1
|
||||
,srm_DECANM = 2
|
||||
,srm_DECCOLM = 3
|
||||
,srm_DECSCLM = 4
|
||||
,srm_DECSCNM = 5
|
||||
,srm_DECOM = 6
|
||||
,srm_DECAWM = 7
|
||||
,srm_DECARM = 8
|
||||
srm_DECCKM = 1 /* Cursor Keys Mode */
|
||||
,srm_DECANM = 2 /* ANSI Mode */
|
||||
,srm_DECCOLM = 3 /* Column Mode */
|
||||
,srm_DECSCLM = 4 /* Scrolling Mode */
|
||||
,srm_DECSCNM = 5 /* Screen Mode */
|
||||
,srm_DECOM = 6 /* Origin Mode */
|
||||
,srm_DECAWM = 7 /* Autowrap Mode */
|
||||
,srm_DECARM = 8 /* Autorepeat Mode */
|
||||
,srm_X10_MOUSE = SET_X10_MOUSE
|
||||
#if OPT_TOOLBAR
|
||||
,srm_RXVT_TOOLBAR = 10
|
||||
|
@ -1084,19 +1105,21 @@ typedef enum {
|
|||
,srm_CURSOR_BLINK_OPS = 13
|
||||
,srm_XOR_CURSOR_BLINKS = 14
|
||||
#endif
|
||||
,srm_DECPFF = 18
|
||||
,srm_DECPEX = 19
|
||||
,srm_DECTCEM = 25
|
||||
,srm_DECPFF = 18 /* Print Form Feed Mode */
|
||||
,srm_DECPEX = 19 /* Printer Extent Mode */
|
||||
,srm_DECTCEM = 25 /* Text Cursor Enable Mode */
|
||||
,srm_RXVT_SCROLLBAR = 30
|
||||
,srm_DECRLM = 34 /* vt510:Cursor Right to Left Mode */
|
||||
#if OPT_SHIFT_FONTS
|
||||
,srm_RXVT_FONTSIZE = 35
|
||||
,srm_RXVT_FONTSIZE = 35 /* also vt520:DECHEBM */
|
||||
#endif
|
||||
,srm_DECHEM = 36 /* vt510:Hebrew Encoding Mode */
|
||||
#if OPT_TEK4014
|
||||
,srm_DECTEK = 38
|
||||
#endif
|
||||
,srm_132COLS = 40
|
||||
,srm_CURSES_HACK = 41
|
||||
,srm_DECNRCM = 42
|
||||
,srm_DECNRCM = 42 /* National Replacement Character Set Mode */
|
||||
#if OPT_PRINT_GRAPHICS
|
||||
,srm_DECGEPM = 43 /* Graphics Expanded Print Mode */
|
||||
#endif
|
||||
|
@ -1108,13 +1131,40 @@ typedef enum {
|
|||
,srm_DECGPBM = 46 /* Graphics Print Background Mode */
|
||||
#endif
|
||||
,srm_ALTBUF = 47 /* also DECGRPM (Graphics Rotated Print Mode) */
|
||||
,srm_DECNKM = 66
|
||||
,srm_DECBKM = 67
|
||||
,srm_DECLRMM = 69
|
||||
,srm_DECNAKB = 57 /* vt510:Greek/N-A Keyboard Mapping */
|
||||
,srm_DECIPEM = 58 /* vt510:IBM ProPrinter Emulation Mode */
|
||||
,srm_DECHCCM = 60 /* vt420:Horizontal Cursor-Coupling Mode */
|
||||
,srm_DECVCCM = 61 /* vt420:Vertical Cursor-Coupling Mode */
|
||||
,srm_DECPCCM = 64 /* vt420:Page Cursor-Coupling Mode */
|
||||
,srm_DECNKM = 66 /* vt420:Numeric Keypad Mode */
|
||||
,srm_DECBKM = 67 /* vt420:Backarrow Key mode */
|
||||
,srm_DECKBUM = 68 /* vt420:Keyboard Usage mode */
|
||||
,srm_DECLRMM = 69 /* vt420:Vertical Split Screen Mode (DECVSSM) */
|
||||
,srm_DECXRLM = 73 /* vt420:Transmit Rate Limiting */
|
||||
#if OPT_SIXEL_GRAPHICS
|
||||
,srm_DECSDM = 80 /* Sixel Display Mode */
|
||||
#endif
|
||||
,srm_DECNCSM = 95
|
||||
,srm_DECKPM = 81 /* vt420:Key Position Mode */
|
||||
,srm_DECNCSM = 95 /* vt510:No Clearing Screen On Column Change */
|
||||
,srm_DECRLCM = 96 /* vt510:Right-to-Left Copy */
|
||||
,srm_DECCRTSM = 97 /* vt510:CRT Save Mode */
|
||||
,srm_DECARSM = 98 /* vt510:Auto Resize Mode */
|
||||
,srm_DECMCM = 99 /* vt510:Modem Control Mode */
|
||||
,srm_DECCAAM = 100 /* vt510:Auto Answerback Mode */
|
||||
,srm_DECCANSM = 101 /* vt510:Conceal Answerback Message Mode */
|
||||
,srm_DECNULM = 102 /* vt510:Ignoring Null Mode */
|
||||
,srm_DECHDPXM = 103 /* vt510:Half-Duplex Mode */
|
||||
,srm_DECOSCNM = 106 /* vt510:Overscan Mode */
|
||||
,srm_DECNUMLK = 108 /* vt510:Num Lock Mode */
|
||||
,srm_DECCAPSLK = 109 /* vt510:Caps Lock Mode */
|
||||
,srm_DECKLHIM = 110 /* vt510:Keyboard LEDs Host Indicator Mode */
|
||||
,srm_DECFWM = 111 /* vt520:Framed Windows Mode */
|
||||
,srm_DECRPL = 112 /* vt520:Review Previous Lines */
|
||||
,srm_DECHWUM = 113 /* vt520:Host Wake-Up */
|
||||
,srm_DECATCUM = 114 /* vt520:Alternate Text Color Underline */
|
||||
,srm_DECATCBM = 115 /* vt520:Alternate Text Color Blink */
|
||||
,srm_DECBBSM = 116 /* vt520:Bold and Blink Style Mode */
|
||||
,srm_DECECM = 117 /* vt520:Erase Color Mode */
|
||||
,srm_VT200_MOUSE = SET_VT200_MOUSE
|
||||
,srm_VT200_HIGHLIGHT_MOUSE = SET_VT200_HIGHLIGHT_MOUSE
|
||||
,srm_BTN_EVENT_MOUSE = SET_BTN_EVENT_MOUSE
|
||||
|
@ -1129,6 +1179,7 @@ typedef enum {
|
|||
,srm_ALTERNATE_SCROLL = SET_ALTERNATE_SCROLL
|
||||
,srm_RXVT_SCROLL_TTY_OUTPUT = 1010
|
||||
,srm_RXVT_SCROLL_TTY_KEYPRESS = 1011
|
||||
,srm_FAST_SCROLL = 1014
|
||||
,srm_EIGHT_BIT_META = 1034
|
||||
#if OPT_NUM_LOCK
|
||||
,srm_REAL_NUMLOCK = 1035
|
||||
|
@ -1143,6 +1194,7 @@ typedef enum {
|
|||
,srm_BELL_IS_URGENT = 1042
|
||||
,srm_POP_ON_BELL = 1043
|
||||
,srm_KEEP_CLIPBOARD = 1044
|
||||
,srm_REVERSEWRAP2 = 1045 /* reverse-wrap without limits */
|
||||
,srm_ALLOW_ALTBUF = 1046
|
||||
,srm_OPT_ALTBUF = 1047
|
||||
,srm_SAVE_CURSOR = 1048
|
||||
|
@ -1295,6 +1347,7 @@ typedef enum {
|
|||
/* aliases */
|
||||
, DATA(C0)
|
||||
, DATA(DEL)
|
||||
, DATA(STTY)
|
||||
#undef DATA
|
||||
, epLAST
|
||||
} PasteControls;
|
||||
|
@ -1531,10 +1584,10 @@ typedef enum {
|
|||
#if OPT_DEC_CHRSET
|
||||
#define if_OPT_DEC_CHRSET(code) code
|
||||
/* Use 2 bits for encoding the double high/wide sense of characters */
|
||||
#define CSET_SWL 0
|
||||
#define CSET_DHL_TOP 1
|
||||
#define CSET_DHL_BOT 2
|
||||
#define CSET_DWL 3
|
||||
#define CSET_SWL 0 /* character set: single-width line */
|
||||
#define CSET_DHL_TOP 1 /* character set: double-height top line */
|
||||
#define CSET_DHL_BOT 2 /* character set: double-height bottom line */
|
||||
#define CSET_DWL 3 /* character set: double-width line */
|
||||
#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */
|
||||
|
||||
/* Use remaining bits for encoding the other character-sets */
|
||||
|
@ -1584,6 +1637,14 @@ typedef enum {
|
|||
|
||||
/***====================================================================***/
|
||||
|
||||
#if OPT_DEC_RECTOPS
|
||||
#define if_OPT_DEC_RECTOPS(stmt) stmt
|
||||
#else
|
||||
#define if_OPT_DEC_RECTOPS(stmt) /* nothing */
|
||||
#endif
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
#if OPT_EBCDIC
|
||||
extern int E2A(int);
|
||||
extern int A2E(int);
|
||||
|
@ -1594,6 +1655,9 @@ extern int A2E(int);
|
|||
|
||||
#define CONTROL(a) (A2E(E2A(a)&037))
|
||||
|
||||
#define XTERM_ERASE A2E(CONTROL('H'))
|
||||
#define XTERM_LNEXT A2E(CONTROL('V'))
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
#if OPT_TEK4014
|
||||
|
@ -1652,15 +1716,24 @@ typedef unsigned char IAttr; /* at least 8 bits */
|
|||
#if OPT_WIDE_CHARS
|
||||
#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
|
||||
#define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow
|
||||
#define NARROW_ICHAR 0xffff
|
||||
#define NARROW_ICHAR 0xffff
|
||||
#if OPT_WIDER_ICHAR
|
||||
#define WIDEST_ICHAR 0x1fffff
|
||||
typedef unsigned IChar; /* for 8-21 bit characters */
|
||||
#define is_NON_CHAR(c) (((c) >= 0xffd0 && (c) <= 0xfdef) || \
|
||||
(((c) & 0xffff) >= 0xfffe))
|
||||
#define is_UCS_SPECIAL(c) ((c) >= 0xfff0 && (c) <= 0xffff)
|
||||
#define WIDEST_ICHAR 0x1fffff
|
||||
typedef unsigned IChar; /* for 8-21 bit characters */
|
||||
#else
|
||||
#define WIDEST_ICHAR NARROW_ICHAR
|
||||
#define is_NON_CHAR(c) (((c) >= 0xffd0 && (c) <= 0xfdef) || \
|
||||
((c) >= 0xfffe && (c) <= 0xffff))
|
||||
#define is_UCS_SPECIAL(c) ((c) >= 0xfff0)
|
||||
#define WIDEST_ICHAR NARROW_ICHAR
|
||||
typedef unsigned short IChar; /* for 8-16 bit characters */
|
||||
#endif
|
||||
#else
|
||||
#else /* !OPT_WIDE_CHARS */
|
||||
#undef OPT_WIDER_ICHAR
|
||||
#define OPT_WIDER_ICHAR 0
|
||||
#define is_NON_CHAR(c) ((c) > 255)
|
||||
#define if_OPT_WIDE_CHARS(screen, code) /* nothing */
|
||||
#define if_WIDE_OR_NARROW(screen, wide, narrow) narrow
|
||||
typedef unsigned char IChar; /* for 8-bit characters */
|
||||
|
@ -1811,16 +1884,20 @@ typedef IChar CharData;
|
|||
*/
|
||||
typedef struct {
|
||||
Dimension lineSize; /* number of columns in this row */
|
||||
RowData bufHead; /* flag for wrapped lines */
|
||||
RowData bufHead; /* flag for wrapped lines */
|
||||
#if OPT_WIDE_CHARS
|
||||
Char combSize; /* number of items in combData[] */
|
||||
Char combSize; /* number of items in combData[] */
|
||||
#endif
|
||||
IAttr *attribs; /* video attributes */
|
||||
#if OPT_DEC_RECTOPS
|
||||
Char *charSets; /* SCS code (DECNRCM_codes) */
|
||||
Char *charSeen; /* pre-SCS value */
|
||||
#endif
|
||||
IAttr *attribs; /* video attributes */
|
||||
#if OPT_ISO_COLORS
|
||||
CellColor *color; /* foreground+background color numbers */
|
||||
#endif
|
||||
CharData *charData; /* cell's base character */
|
||||
CharData *combData[1]; /* first enum past fixed-offsets */
|
||||
CharData *combData[1]; /* first field past fixed-offsets */
|
||||
} LineData;
|
||||
|
||||
typedef const LineData CLineData;
|
||||
|
@ -1830,12 +1907,16 @@ typedef const LineData CLineData;
|
|||
* variable.
|
||||
*/
|
||||
typedef struct {
|
||||
IAttr attribs;
|
||||
IAttr attribs; /* video attributes */
|
||||
#if OPT_WIDE_CHARS
|
||||
Char combSize; /* number of items in combData[] */
|
||||
Char combSize; /* number of items in combData[] */
|
||||
#endif
|
||||
#if OPT_DEC_RECTOPS
|
||||
Char charSets; /* SCS code (DECNRCM_codes) */
|
||||
Char charSeen; /* pre-SCS value */
|
||||
#endif
|
||||
#if OPT_ISO_COLORS
|
||||
CellColor color; /* color-array */
|
||||
CellColor color; /* foreground+background color numbers */
|
||||
#endif
|
||||
CharData charData; /* cell's base character */
|
||||
CharData combData[1]; /* array of combining chars */
|
||||
|
@ -2018,6 +2099,7 @@ typedef enum {
|
|||
DP_DECTCEM,
|
||||
DP_DELETE_IS_DEL,
|
||||
DP_EIGHT_BIT_META,
|
||||
DP_FAST_SCROLL,
|
||||
DP_KEEP_CLIPBOARD,
|
||||
DP_KEEP_SELECTION,
|
||||
DP_KEYBOARD_TYPE,
|
||||
|
@ -2038,6 +2120,7 @@ typedef enum {
|
|||
DP_X_MOUSE,
|
||||
DP_X_NCSM,
|
||||
DP_X_REVWRAP,
|
||||
DP_X_REVWRAP2,
|
||||
DP_X_X10MSE,
|
||||
#if OPT_BLINK_CURS
|
||||
DP_CRS_BLINK,
|
||||
|
@ -2138,6 +2221,10 @@ typedef struct {
|
|||
} ScrnColors;
|
||||
|
||||
#define NUM_GSETS 4
|
||||
#define NUM_GSETS2 (NUM_GSETS + 1) /* include user-preferred */
|
||||
#define gsets_upss gsets[4]
|
||||
|
||||
#define SAVED_CURSORS 2
|
||||
|
||||
typedef struct {
|
||||
Boolean saved;
|
||||
|
@ -2146,7 +2233,7 @@ typedef struct {
|
|||
IFlags flags; /* VTxxx saves graphics rendition */
|
||||
Char curgl;
|
||||
Char curgr;
|
||||
DECNRCM_codes gsets[NUM_GSETS];
|
||||
DECNRCM_codes gsets[NUM_GSETS2];
|
||||
Boolean wrap_flag;
|
||||
#if OPT_ISO_COLORS
|
||||
int cur_foreground; /* current foreground color */
|
||||
|
@ -2163,7 +2250,12 @@ typedef struct _SaveTitle {
|
|||
char *windowName;
|
||||
} SaveTitle;
|
||||
|
||||
#define SAVED_CURSORS 2
|
||||
#define MAX_SAVED_TITLES 10
|
||||
|
||||
typedef struct {
|
||||
int used; /* index to current item */
|
||||
SaveTitle data[MAX_SAVED_TITLES];
|
||||
} SavedTitles;
|
||||
|
||||
typedef struct {
|
||||
int width; /* if > 0, width of scrollbar, */
|
||||
|
@ -2330,6 +2422,7 @@ typedef struct {
|
|||
IChar *unparse_bfr;
|
||||
unsigned unparse_len;
|
||||
unsigned unparse_max; /* limitResponse resource */
|
||||
unsigned strings_max; /* maxStringParse resource */
|
||||
|
||||
#if OPT_TCAP_QUERY
|
||||
int tc_query_code;
|
||||
|
@ -2365,6 +2458,14 @@ typedef struct {
|
|||
#if OPT_WIDE_ATTRS && OPT_SGR2_HASH
|
||||
Boolean faint_relative; /* faint is relative? */
|
||||
#endif
|
||||
#if OPT_VT525_COLORS
|
||||
int assigned_fg; /* DECAC */
|
||||
int assigned_bg;
|
||||
struct {
|
||||
int fg; /* 0..15 */
|
||||
int bg; /* 0..15 */
|
||||
} alt_colors[16]; /* DECATC if DECSTGLT is 1 or 2 */
|
||||
#endif
|
||||
#endif /* OPT_ISO_COLORS */
|
||||
#if OPT_DEC_CHRSET
|
||||
Boolean font_doublesize;/* enable font-scaling */
|
||||
|
@ -2404,9 +2505,10 @@ typedef struct {
|
|||
Boolean char_was_written;
|
||||
int last_written_col;
|
||||
int last_written_row;
|
||||
TypedBuffer(XChar2b);
|
||||
TypedBuffer(char);
|
||||
#endif
|
||||
TypedBuffer(IChar);
|
||||
TypedBuffer(Char);
|
||||
TypedBuffer(XChar2b);
|
||||
#if OPT_BROKEN_OSC
|
||||
Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */
|
||||
#endif
|
||||
|
@ -2533,7 +2635,8 @@ typedef struct {
|
|||
Cursor pointer_cursor; /* current pointer cursor */
|
||||
Cursor hidden_cursor; /* hidden cursor in window */
|
||||
|
||||
String answer_back; /* response to ENQ */
|
||||
String answer_back; /* response to ENQ */
|
||||
Boolean prefer_latin1; /* preference for UPSS */
|
||||
|
||||
PrinterState printer_state; /* actual printer state */
|
||||
PrinterFlags printer_flags; /* working copy of printer flags */
|
||||
|
@ -2547,10 +2650,13 @@ typedef struct {
|
|||
#if OPT_BOX_CHARS
|
||||
Boolean force_box_chars;/* true if we assume no boxchars */
|
||||
Boolean broken_box_chars;/* true if broken boxchars */
|
||||
Boolean force_all_chars;/* true to outline missing chars */
|
||||
Boolean assume_all_chars;/* true to allow missing chars */
|
||||
Boolean allow_packing; /* true to allow packed-fonts */
|
||||
#endif
|
||||
#if OPT_BOX_CHARS || OPT_WIDE_CHARS
|
||||
Boolean force_all_chars;/* true to outline missing chars */
|
||||
#endif
|
||||
|
||||
Dimension fnt_wide;
|
||||
Dimension fnt_high;
|
||||
float scale_height; /* scaling for font-height */
|
||||
|
@ -2572,6 +2678,7 @@ typedef struct {
|
|||
int cursor_state; /* ON, OFF, or BLINKED_OFF */
|
||||
int cursor_busy; /* do not redraw... */
|
||||
Boolean cursor_underline; /* true if cursor is in underline mode */
|
||||
Boolean cursor_bar; /* true if cursor is in bar mode */
|
||||
XtCursorShape cursor_shape;
|
||||
#if OPT_BLINK_CURS
|
||||
BlinkOps cursor_blink; /* cursor blink enable */
|
||||
|
@ -2685,16 +2792,17 @@ typedef struct {
|
|||
|
||||
int title_modes; /* control set/get of titles */
|
||||
int title_modes0; /* ...initial value */
|
||||
SaveTitle *save_title;
|
||||
SavedTitles saved_titles;
|
||||
|
||||
/* Improved VT100 emulation stuff. */
|
||||
String keyboard_dialect; /* default keyboard dialect */
|
||||
DECNRCM_codes gsets[NUM_GSETS]; /* G0 through G3. */
|
||||
DECNRCM_codes gsets[NUM_GSETS2]; /* G0 through G3, plus UPSS */
|
||||
Char curgl; /* Current GL setting. */
|
||||
Char curgr; /* Current GR setting. */
|
||||
Char curss; /* Current single shift. */
|
||||
String term_id; /* resource for terminal_id */
|
||||
int terminal_id; /* 100=vt100, 220=vt220, etc. */
|
||||
int display_da1; /* 100=vt100, 220=vt220, etc. */
|
||||
int vtXX_level; /* 0=vt52, 1,2,3 = vt100 ... vt320 */
|
||||
int ansi_level; /* dpANSI levels 1,2,3 */
|
||||
int protected_mode; /* 0=off, 1=DEC, 2=ISO */
|
||||
|
@ -2743,11 +2851,14 @@ typedef struct {
|
|||
#if OPT_SIXEL_GRAPHICS
|
||||
Boolean sixel_scrolling; /* sixel scrolling */
|
||||
Boolean sixel_scrolls_right; /* sixel scrolling moves cursor to right */
|
||||
Boolean sixel_scrolls_right0; /* initial sixelScrolling mode */
|
||||
#endif
|
||||
|
||||
#if OPT_GRAPHICS
|
||||
int numcolorregisters; /* number of supported color registers */
|
||||
Boolean privatecolorregisters; /* private color registers for each graphic */
|
||||
Boolean privatecolorregisters0; /* initial privateColorRegisters */
|
||||
Boolean incremental_graphics; /* draw graphics incrementally */
|
||||
#endif
|
||||
|
||||
/* Graphics Printing */
|
||||
|
@ -2782,10 +2893,10 @@ typedef struct {
|
|||
if (IsStatusShown(screen) && (screen)->status_active) stmt
|
||||
|
||||
Boolean status_timeout; /* status timeout needs service */
|
||||
Boolean status_active; /* DECSASD */
|
||||
int status_active; /* DECSASD */
|
||||
int status_type; /* DECSSDT */
|
||||
int status_shown; /* last-displayed type */
|
||||
SavedCursor status_data[2];
|
||||
SavedCursor status_data[2]; /* main- and status-cursors */
|
||||
char * status_fmt; /* format for indicator-status */
|
||||
|
||||
#else /* !OPT_STATUS_LINE */
|
||||
|
@ -2804,7 +2915,7 @@ typedef struct {
|
|||
Char vt52_save_curgl;
|
||||
Char vt52_save_curgr;
|
||||
Char vt52_save_curss;
|
||||
DECNRCM_codes vt52_save_gsets[NUM_GSETS];
|
||||
DECNRCM_codes vt52_save_gsets[NUM_GSETS2];
|
||||
#endif
|
||||
/* Testing */
|
||||
#if OPT_XMC_GLITCH
|
||||
|
@ -3230,6 +3341,7 @@ typedef struct _Misc {
|
|||
float face_size[NMENUFONTS];
|
||||
char *render_font_s;
|
||||
int limit_fontsets;
|
||||
int limit_fontheight;
|
||||
int limit_fontwidth;
|
||||
#endif
|
||||
} Misc;
|
||||
|
@ -3286,6 +3398,14 @@ typedef struct _Work {
|
|||
ScrnColors *oldColors;
|
||||
Boolean palette_changed;
|
||||
Boolean broken_box_chars;
|
||||
/* data write dotext/WriteText */
|
||||
IChar *write_text; /* points to print_area */
|
||||
#if OPT_DEC_RECTOPS
|
||||
Char *write_sums; /* if non-null, points to buffer_sums */
|
||||
Char *buffer_sums; /* data for ->charSeen[] */
|
||||
Char *buffer_sets; /* data for ->charSets[] */
|
||||
size_t sizeof_sums; /* allocated size of buffer_sums */
|
||||
#endif
|
||||
} Work;
|
||||
|
||||
typedef struct {int foo;} XtermClassPart, TekClassPart;
|
||||
|
@ -3326,7 +3446,7 @@ extern WidgetClass tekWidgetClass;
|
|||
#define TAB_ARRAY_SIZE (1024 / TAB_BITS_WIDTH)
|
||||
#define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
|
||||
|
||||
#define OkTAB(c) ((c) >= 0 && (c) < MAX_TABS)
|
||||
#define OkTAB(c) ((c) > 0 && (c) < MAX_TABS)
|
||||
|
||||
typedef unsigned Tabs [TAB_ARRAY_SIZE];
|
||||
|
||||
|
@ -3429,45 +3549,57 @@ typedef struct _TekWidgetRec {
|
|||
the screen. Used to distinguish
|
||||
blanks from empty parts of the
|
||||
screen when selecting */
|
||||
/*
|
||||
* This does not fit in a byte with the other (more important) attributes, but
|
||||
* if wide-attributes are configured, it is possible to maintain it there.
|
||||
*/
|
||||
#define INVISIBLE AttrBIT(8) /* true if writing invisible text */
|
||||
|
||||
#if OPT_WIDE_ATTRS
|
||||
#define ATR_FAINT AttrBIT(8)
|
||||
#define ATR_ITALIC AttrBIT(9)
|
||||
#define ATR_STRIKEOUT AttrBIT(10)
|
||||
#define ATR_DBL_UNDER AttrBIT(11)
|
||||
#define ATR_DIRECT_FG AttrBIT(12)
|
||||
#define ATR_DIRECT_BG AttrBIT(13)
|
||||
#define ATR_FAINT AttrBIT(9)
|
||||
#define ATR_ITALIC AttrBIT(10)
|
||||
#define ATR_STRIKEOUT AttrBIT(11)
|
||||
#define ATR_DBL_UNDER AttrBIT(12)
|
||||
#define ATR_DIRECT_FG AttrBIT(13)
|
||||
#define ATR_DIRECT_BG AttrBIT(14)
|
||||
#define SGR_MASK2 (ATR_FAINT | ATR_ITALIC | ATR_STRIKEOUT | ATR_DBL_UNDER | ATR_DIRECT_FG | ATR_DIRECT_BG)
|
||||
#define AttrEND 15
|
||||
#else
|
||||
#define SGR_MASK2 0
|
||||
#define AttrEND 9
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Other flags
|
||||
*/
|
||||
#define WRAPAROUND MiscBIT(0) /* true if auto wraparound mode */
|
||||
#define REVERSEWRAP MiscBIT(1) /* true if reverse wraparound mode */
|
||||
#define REVERSE_VIDEO MiscBIT(2) /* true if screen white on black */
|
||||
#define LINEFEED MiscBIT(3) /* true if in auto linefeed mode */
|
||||
#define ORIGIN MiscBIT(4) /* true if in origin mode */
|
||||
#define INSERT MiscBIT(5) /* true if in insert mode */
|
||||
#define SMOOTHSCROLL MiscBIT(6) /* true if in smooth scroll mode */
|
||||
#define IN132COLUMNS MiscBIT(7) /* true if in 132 column mode */
|
||||
#define INVISIBLE MiscBIT(8) /* true if writing invisible text */
|
||||
#define REVERSE_VIDEO MiscBIT(0) /* true if screen white on black */
|
||||
#define WRAPAROUND MiscBIT(1) /* true if auto wraparound mode */
|
||||
#define REVERSEWRAP MiscBIT(2) /* true if reverse wraparound mode */
|
||||
#define REVERSEWRAP2 MiscBIT(3) /* true if extended reverse wraparound */
|
||||
#define LINEFEED MiscBIT(4) /* true if in auto linefeed mode */
|
||||
#define ORIGIN MiscBIT(5) /* true if in origin mode */
|
||||
#define INSERT MiscBIT(6) /* true if in insert mode */
|
||||
#define SMOOTHSCROLL MiscBIT(7) /* true if in smooth scroll mode */
|
||||
#define IN132COLUMNS MiscBIT(8) /* true if in 132 column mode */
|
||||
#define NATIONAL MiscBIT(9) /* true if writing national charset */
|
||||
#define LEFT_RIGHT MiscBIT(10) /* true if left/right margin mode */
|
||||
#define NOCLEAR_COLM MiscBIT(11) /* true if no clear on DECCOLM change */
|
||||
|
||||
#define DrawBIT(n) xBIT(n + 8) /* XTermDraw.draw_flags */
|
||||
/*
|
||||
* Drawing-bits start after the video/color attributes, and are independent
|
||||
* of the miscellaneous flags.
|
||||
*/
|
||||
#define DrawBIT(n) xBIT(n + AttrEND) /* XTermDraw.draw_flags */
|
||||
/* The following attributes are used in the argument of drawXtermText() */
|
||||
#define NOBACKGROUND DrawBIT(0) /* Used for overstrike */
|
||||
#define NOTRANSLATION DrawBIT(1) /* No scan for chars missing in font */
|
||||
#define DOUBLEWFONT DrawBIT(2) /* The actual X-font is double-width */
|
||||
#define DOUBLEHFONT DrawBIT(3) /* The actual X-font is double-height */
|
||||
#define CHARBYCHAR DrawBIT(4) /* Draw chars one-by-one */
|
||||
#define DOUBLEFIRST DrawBIT(4) /* Draw chars one-by-one */
|
||||
#define CHARBYCHAR DrawBIT(5) /* Draw chars one-by-one */
|
||||
|
||||
/* The following attribute is used in the argument of xtermSpecialFont etc */
|
||||
#define NORESOLUTION DrawBIT(5) /* find the font without resolution */
|
||||
#define NORESOLUTION DrawBIT(6) /* find the font without resolution */
|
||||
|
||||
/*
|
||||
* Groups of attributes
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: resize.c,v 1.148 2022/02/18 20:32:48 tom Exp $ */
|
||||
/* $XTermId: resize.c,v 1.150 2023/03/31 23:09:38 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2003-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2003-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -98,7 +98,7 @@ int ignore_unused;
|
|||
#define SUN 1
|
||||
#define VT100 0
|
||||
|
||||
#define TIMEOUT 10
|
||||
#define TIMEOUT 3
|
||||
|
||||
#define SHELL_UNKNOWN 0
|
||||
#define SHELL_C 1
|
||||
|
@ -133,6 +133,11 @@ static const char *const emuname[EMULATIONS] =
|
|||
};
|
||||
static char *myname;
|
||||
static int shell_type = SHELL_UNKNOWN;
|
||||
static const char *const getattr[EMULATIONS] =
|
||||
{
|
||||
ESCAPE("[c"),
|
||||
NULL,
|
||||
};
|
||||
static const char *const getsize[EMULATIONS] =
|
||||
{
|
||||
ESCAPE("7") ESCAPE("[r") ESCAPE("[9999;9999H") ESCAPE("[6n"),
|
||||
|
@ -164,7 +169,12 @@ static struct termios tioorig;
|
|||
static struct sgttyb sgorig;
|
||||
#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
|
||||
|
||||
static const char *const size[EMULATIONS] =
|
||||
static const char *const reply_attr[EMULATIONS] =
|
||||
{
|
||||
ESCAPE("[?%d;%dc"),
|
||||
NULL,
|
||||
};
|
||||
static const char *const reply_size[EMULATIONS] =
|
||||
{
|
||||
ESCAPE("[%d;%dR"),
|
||||
ESCAPE("[8;%d;%dt"),
|
||||
|
@ -211,10 +221,12 @@ onintr(int sig GCC_UNUSED)
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
const char *timeout_message = "?";
|
||||
|
||||
static void
|
||||
resize_timeout(int sig)
|
||||
{
|
||||
fprintf(stderr, "\n%s: Time out occurred\r\n", myname);
|
||||
fprintf(stderr, "\n%s: %s\r\n", myname, timeout_message);
|
||||
onintr(sig);
|
||||
}
|
||||
|
||||
|
@ -267,7 +279,9 @@ checkdigits(char *str)
|
|||
static void
|
||||
unexpected_char(int c)
|
||||
{
|
||||
fprintf(stderr, "%s: unknown character %#x, exiting.\r\n", myname, c);
|
||||
fprintf(stderr,
|
||||
"%s: unknown character %#x, exiting.\r\n",
|
||||
myname, (unsigned) c);
|
||||
onintr(0);
|
||||
}
|
||||
|
||||
|
@ -275,19 +289,18 @@ static void
|
|||
readstring(FILE *fp, char *buf, const char *str)
|
||||
{
|
||||
int last, c;
|
||||
#if !defined(USG) && !defined(__minix)
|
||||
/* What is the advantage of setitimer() over alarm()? */
|
||||
#if HAVE_SETITIMER
|
||||
struct itimerval it;
|
||||
#endif
|
||||
int limit = (BUFSIZ - 3);
|
||||
|
||||
signal(SIGALRM, resize_timeout);
|
||||
#if defined(USG) || defined(__minix)
|
||||
alarm(TIMEOUT);
|
||||
#else
|
||||
#if HAVE_SETITIMER
|
||||
memset((char *) &it, 0, sizeof(struct itimerval));
|
||||
it.it_value.tv_sec = TIMEOUT;
|
||||
setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);
|
||||
#else
|
||||
alarm(TIMEOUT);
|
||||
#endif
|
||||
if ((c = getc(fp)) == 0233) { /* meta-escape, CSI */
|
||||
c = ESCAPE("")[0];
|
||||
|
@ -312,11 +325,11 @@ readstring(FILE *fp, char *buf, const char *str)
|
|||
if (c == last)
|
||||
break;
|
||||
}
|
||||
#if defined(USG) || defined(__minix)
|
||||
alarm(0);
|
||||
#else
|
||||
#if HAVE_SETITIMER
|
||||
memset((char *) &it, 0, sizeof(struct itimerval));
|
||||
setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);
|
||||
#else
|
||||
alarm(0);
|
||||
#endif
|
||||
*buf = 0;
|
||||
}
|
||||
|
@ -513,9 +526,15 @@ main(int argc, char **argv ENVP_ARG)
|
|||
free(tmpbuf);
|
||||
}
|
||||
}
|
||||
if (getattr[emu]) {
|
||||
timeout_message = "Terminal is not VT100-compatible";
|
||||
IGNORE_RC(write(tty, getattr[emu], strlen(getattr[emu])));
|
||||
readstring(ttyfp, buf, reply_attr[emu]);
|
||||
}
|
||||
timeout_message = "Time out occurred";
|
||||
IGNORE_RC(write(tty, getsize[emu], strlen(getsize[emu])));
|
||||
readstring(ttyfp, buf, size[emu]);
|
||||
if (sscanf(buf, size[emu], &rows, &cols) != 2) {
|
||||
readstring(ttyfp, buf, reply_size[emu]);
|
||||
if (sscanf(buf, reply_size[emu], &rows, &cols) != 2) {
|
||||
fprintf(stderr, "%s: Can't get rows and columns\r\n", myname);
|
||||
onintr(0);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.\" $XTermId: resize.man,v 1.37 2019/02/07 00:16:12 tom Exp $
|
||||
.\" $XTermId: resize.man,v 1.40 2024/01/11 22:06:30 tom Exp $
|
||||
.\"
|
||||
.\" Copyright 1998-2017,2019 by Thomas E. Dickey
|
||||
.\" Copyright 1998-2023,2024 by Thomas E. Dickey
|
||||
.\"
|
||||
.\" All Rights Reserved
|
||||
.\"
|
||||
|
@ -32,22 +32,49 @@
|
|||
.\"
|
||||
.ds N Resize
|
||||
.ds n resize
|
||||
.
|
||||
.TH RESIZE 1 "__app_date__" "__app_version__" "X Window System"
|
||||
.\"
|
||||
.\" Bulleted paragraph
|
||||
.ie n .ds CW R
|
||||
.el \{
|
||||
.ie \n(.g .ds CW CR
|
||||
.el .ds CW CW
|
||||
.\}
|
||||
.
|
||||
.ie \n(.g \{\
|
||||
.ds `` \(lq
|
||||
.ds '' \(rq
|
||||
.ds ' \(aq
|
||||
.\}
|
||||
.el \{\
|
||||
.ie t .ds `` ``
|
||||
.el .ds `` ""
|
||||
.ie t .ds '' ''
|
||||
.el .ds '' ""
|
||||
.ie t .ds ' \(aq
|
||||
.el .ds ' '
|
||||
.\}
|
||||
.de bP
|
||||
.ie n .IP \(bu 4
|
||||
.el .IP \(bu 2
|
||||
..
|
||||
.\" Escape single quotes in literal strings from groff's Unicode transform.
|
||||
.ie \n(.g .ds AQ \(aq
|
||||
.el .ds AQ '
|
||||
.ie \n(.g .ds `` \(lq
|
||||
.el .ds `` ``
|
||||
.ie \n(.g .ds '' \(rq
|
||||
.el .ds '' ''
|
||||
.TH RESIZE 1 "__app_date__" "__app_version__" "X Window System"
|
||||
.de NE
|
||||
.fi
|
||||
.ft R
|
||||
.ie n .in -4
|
||||
.el .in -2
|
||||
..
|
||||
.de NS
|
||||
.ie n .sp
|
||||
.el .sp .5
|
||||
.ie n .in +4
|
||||
.el .in +2
|
||||
.nf
|
||||
.ft \*(CW
|
||||
..
|
||||
.SH NAME
|
||||
resize \- set environment and terminal settings to current xterm window size
|
||||
resize \-
|
||||
set environment and terminal settings to current xterm window size
|
||||
.SH SYNOPSIS
|
||||
.B \*n
|
||||
[ \fB\-v\fP | \fB\-u\fP | \fB\-c\fP ] [ \fB\-s\fP [ \fIrow col\fP ] ]
|
||||
|
@ -98,34 +125,6 @@ This affects the values shown by \fIstty\fP.
|
|||
finally, \fI\*n\fP generates shell commands for setting the
|
||||
environment variables,
|
||||
and writes that to the standard output.
|
||||
.SH EXAMPLES
|
||||
For \fI\*n\fP's output to take effect,
|
||||
\fI\*n\fP must either be evaluated
|
||||
as part of the command line (usually done with a shell alias or function) or
|
||||
else redirected to a file which can then be read in.
|
||||
From the C shell (usually
|
||||
known as \fI/bin/csh\fP), the following alias could be defined in the
|
||||
user's \fI.cshrc\fP:
|
||||
.sp
|
||||
.nf
|
||||
% alias rs \*(AQset noglob; eval \fC\`\fP\*n\fC\`\fP\*(AQ
|
||||
.fi
|
||||
.sp
|
||||
After resizing the window, the user would type:
|
||||
.sp
|
||||
.nf
|
||||
% rs
|
||||
.fi
|
||||
.sp
|
||||
Users of versions of the Bourne shell (usually known as \fI/bin/sh\fP) that
|
||||
don't have command
|
||||
functions will need to send the output to a temporary file and then read it back
|
||||
in with the \*(``.\*('' command:
|
||||
.sp
|
||||
.nf
|
||||
$ \*n > /tmp/out
|
||||
$ .\0/tmp/out
|
||||
.fi
|
||||
.SH OPTIONS
|
||||
The following options may be used with \fI\*n\fP:
|
||||
.TP 8
|
||||
|
@ -167,13 +166,6 @@ which causes makes it assume the \fB\-s\fP option.
|
|||
The \fIrows\fP and
|
||||
\fIcolumns\fP arguments must appear last; though they are normally
|
||||
associated with the \fB\-s\fP option, they are parsed separately.
|
||||
.SH FILES
|
||||
.TP 15
|
||||
/etc/termcap
|
||||
for the base termcap entry to modify.
|
||||
.TP 15
|
||||
~/.cshrc
|
||||
user's alias for the command.
|
||||
.SH ENVIRONMENT
|
||||
.TP 15
|
||||
SHELL
|
||||
|
@ -217,12 +209,38 @@ generated shell command
|
|||
sets these variables on systems using terminfo.
|
||||
Many applications (including the curses library)
|
||||
use those variables when set to override their screensize.
|
||||
.SH "SEE ALSO"
|
||||
use_env(3x)
|
||||
.br
|
||||
csh(1), stty(1), tset(1)
|
||||
.br
|
||||
xterm(__mansuffix__)
|
||||
.SH FILES
|
||||
.TP 15
|
||||
/etc/termcap
|
||||
for the base termcap entry to modify.
|
||||
.TP 15
|
||||
~/.cshrc
|
||||
user's alias for the command.
|
||||
.SH EXAMPLES
|
||||
For \fI\*n\fP's output to take effect,
|
||||
\fI\*n\fP must either be evaluated
|
||||
as part of the command line (usually done with a shell alias or function) or
|
||||
else redirected to a file which can then be read in.
|
||||
From the C shell (usually
|
||||
known as \fI/bin/csh\fP), the following alias could be defined in the
|
||||
user's \fI.cshrc\fP:
|
||||
.NS
|
||||
% alias rs \*'set noglob; eval \`\*n\`\*'
|
||||
.NE
|
||||
.PP
|
||||
After resizing the window, the user would type:
|
||||
.NS
|
||||
% rs
|
||||
.NE
|
||||
.PP
|
||||
Users of versions of the Bourne shell (usually known as \fI/bin/sh\fP) that
|
||||
don't have command
|
||||
functions will need to send the output to a temporary file and then read it back
|
||||
in with the \*(``.\*('' command:
|
||||
.NS
|
||||
$ \*n > /tmp/out
|
||||
$ .\0/tmp/out
|
||||
.NE
|
||||
.SH AUTHORS
|
||||
Mark Vandevoorde (MIT-Athena), Edward Moy (Berkeley)
|
||||
.br
|
||||
|
@ -233,3 +251,9 @@ Copyright (c) 1984, 1985 by X Consortium
|
|||
See
|
||||
.IR X (__miscmansuffix__)
|
||||
for a complete copyright notice.
|
||||
.SH "SEE ALSO"
|
||||
use_env(3x)
|
||||
.br
|
||||
csh(1), stty(1), tset(1)
|
||||
.br
|
||||
xterm(__mansuffix__)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: screen.c,v 1.627 2022/10/23 22:57:40 tom Exp $ */
|
||||
/* $XTermId: screen.c,v 1.651 2024/02/13 22:10:51 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1999-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -193,6 +193,9 @@ setupLineData(TScreen *screen,
|
|||
/* these names are based on types */
|
||||
unsigned skipNcolIAttr;
|
||||
unsigned skipNcolCharData;
|
||||
#if OPT_DEC_RECTOPS
|
||||
unsigned skipNcolChar;
|
||||
#endif
|
||||
#if OPT_ISO_COLORS
|
||||
unsigned skipNcolCellColor;
|
||||
#endif
|
||||
|
@ -207,8 +210,12 @@ setupLineData(TScreen *screen,
|
|||
}
|
||||
#endif
|
||||
|
||||
skipNcolIAttr = (ncol * SizeofScrnPtr(attribs));
|
||||
skipNcolCharData = (ncol * SizeofScrnPtr(charData));
|
||||
/* *INDENT-EQLS* */
|
||||
skipNcolIAttr = (ncol * SizeofScrnPtr(attribs));
|
||||
skipNcolCharData = (ncol * SizeofScrnPtr(charData));
|
||||
#if OPT_DEC_RECTOPS
|
||||
skipNcolChar = (ncol * SizeofScrnPtr(charSeen)); /* = charSets */
|
||||
#endif
|
||||
#if OPT_ISO_COLORS
|
||||
skipNcolCellColor = (ncol * SizeofScrnPtr(color));
|
||||
#endif
|
||||
|
@ -226,6 +233,10 @@ setupLineData(TScreen *screen,
|
|||
SetupScrnPtr(ptr->color, data, CellColor);
|
||||
#endif
|
||||
SetupScrnPtr(ptr->charData, data, CharData);
|
||||
#if OPT_DEC_RECTOPS
|
||||
SetupScrnPtr(ptr->charSeen, data, Char);
|
||||
SetupScrnPtr(ptr->charSets, data, Char);
|
||||
#endif
|
||||
#if OPT_WIDE_CHARS
|
||||
if (screen->wide_chars) {
|
||||
unsigned extra = (unsigned) screen->max_combining;
|
||||
|
@ -302,9 +313,16 @@ sizeofScrnRow(TScreen *screen, unsigned ncol)
|
|||
|
||||
(void) screen;
|
||||
|
||||
result = (ncol * (unsigned) sizeof(CharData));
|
||||
result = (ncol * (unsigned) sizeof(CharData)); /* ->charData */
|
||||
AlignValue(result);
|
||||
|
||||
#if OPT_DEC_RECTOPS
|
||||
result += (ncol * (unsigned) sizeof(Char)); /* ->charSeen */
|
||||
AlignValue(result);
|
||||
result += (ncol * (unsigned) sizeof(Char)); /* ->charSets */
|
||||
AlignValue(result);
|
||||
#endif
|
||||
|
||||
#if OPT_WIDE_CHARS
|
||||
if (screen->wide_chars) {
|
||||
result *= (unsigned) (1 + screen->max_combining);
|
||||
|
@ -800,6 +818,7 @@ ClearCells(XtermWidget xw, int flags, unsigned len, int row, int col)
|
|||
flags = (int) ((unsigned) flags | TERM_COLOR_FLAGS(xw));
|
||||
|
||||
for (n = 0; n < len; ++n) {
|
||||
if_OPT_DEC_RECTOPS(ld->charSeen[(unsigned) col + n] = ' ');
|
||||
ld->charData[(unsigned) col + n] = (CharData) ' ';
|
||||
}
|
||||
|
||||
|
@ -867,16 +886,20 @@ ScrnDisownSelection(XtermWidget xw)
|
|||
*/
|
||||
void
|
||||
ScrnWriteText(XtermWidget xw,
|
||||
IChar *str,
|
||||
Cardinal offset,
|
||||
Cardinal length,
|
||||
unsigned flags,
|
||||
CellColor cur_fg_bg,
|
||||
unsigned length)
|
||||
CellColor cur_fg_bg)
|
||||
{
|
||||
IChar *str = xw->work.write_text + offset;
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
LineData *ld;
|
||||
IAttr *attrs;
|
||||
int avail = MaxCols(screen) - screen->cur_col;
|
||||
IChar *chars;
|
||||
#if OPT_DEC_RECTOPS
|
||||
Char *seens;
|
||||
#endif
|
||||
#if OPT_WIDE_CHARS
|
||||
IChar starcol1;
|
||||
#endif
|
||||
|
@ -898,6 +921,7 @@ ScrnWriteText(XtermWidget xw,
|
|||
|
||||
ld = getLineData(screen, screen->cur_row);
|
||||
|
||||
if_OPT_DEC_RECTOPS(seens = ld->charSeen + screen->cur_col);
|
||||
chars = ld->charData + screen->cur_col;
|
||||
attrs = ld->attribs + screen->cur_col;
|
||||
|
||||
|
@ -905,12 +929,26 @@ ScrnWriteText(XtermWidget xw,
|
|||
starcol1 = *chars;
|
||||
#endif
|
||||
|
||||
/* write blanks if we're writing invisible text */
|
||||
/*
|
||||
* Copy the string onto the line,
|
||||
* writing blanks if we're writing invisible text.
|
||||
*/
|
||||
for (n = 0; n < length; ++n) {
|
||||
if ((flags & INVISIBLE))
|
||||
chars[n] = ' ';
|
||||
else
|
||||
chars[n] = str[n];
|
||||
#if OPT_DEC_RECTOPS
|
||||
if (xw->work.write_sums != NULL) {
|
||||
ld->charSeen[screen->cur_col + (int) n] = xw->work.buffer_sums[n];
|
||||
ld->charSets[screen->cur_col + (int) n] = xw->work.buffer_sets[n];
|
||||
} else {
|
||||
seens[n] = (str[n] < 32
|
||||
#if OPT_WIDE_CHARS
|
||||
|| str[n] > 255
|
||||
#endif
|
||||
)
|
||||
? ANSI_ESC
|
||||
: (Char) str[n];
|
||||
}
|
||||
#endif /* OPT_DEC_RECTOPS */
|
||||
chars[n] = str[n];
|
||||
}
|
||||
|
||||
#if OPT_BLINK_TEXT
|
||||
|
@ -1049,6 +1087,10 @@ ScrnClearLines(XtermWidget xw, ScrnBuf sb, int where, unsigned n, unsigned size)
|
|||
memset(work->color, 0, size * sizeof(work->color[0]));
|
||||
#endif
|
||||
}
|
||||
if_OPT_DEC_RECTOPS({
|
||||
memset(work->charSeen, 0, size * sizeof(Char));
|
||||
memset(work->charSets, 0, size * sizeof(work->charSets[0]));
|
||||
});
|
||||
#if OPT_WIDE_CHARS
|
||||
if (screen->wide_chars) {
|
||||
size_t off;
|
||||
|
@ -1636,7 +1678,6 @@ ScrnRefresh(XtermWidget xw,
|
|||
fg = extract_fg(xw, fg_bg, flags);
|
||||
bg = extract_bg(xw, fg_bg, flags);
|
||||
});
|
||||
|
||||
#if OPT_WIDE_ATTRS
|
||||
old_attrs = xtermUpdateItalics(xw, flags, old_attrs);
|
||||
#endif
|
||||
|
@ -1896,7 +1937,7 @@ freeLineData(TScreen *screen, LineData *source)
|
|||
|
||||
#define ALLOC_IT(field) \
|
||||
if (result != NULL) { \
|
||||
if ((result->field = calloc(ncol, sizeof(*result->field))) == NULL) { \
|
||||
if ((result->field = calloc((size_t) ncol, sizeof(*result->field))) == NULL) { \
|
||||
result = freeLineData(screen, result); \
|
||||
} \
|
||||
}
|
||||
|
@ -1913,14 +1954,18 @@ allocLineData(TScreen *screen, LineData *source)
|
|||
#if OPT_WIDE_CHARS
|
||||
size += source->combSize * sizeof(result->combData[0]);
|
||||
#endif
|
||||
if ((result = calloc(1, size)) != NULL) {
|
||||
if ((result = calloc((size_t) 1, size)) != NULL) {
|
||||
result->lineSize = ncol;
|
||||
ALLOC_IT(attribs);
|
||||
#if OPT_ISO_COLORS
|
||||
ALLOC_IT(color);
|
||||
#endif
|
||||
#if OPT_DEC_RECTOPS
|
||||
ALLOC_IT(charSeen);
|
||||
ALLOC_IT(charData);
|
||||
#endif
|
||||
#if OPT_WIDE_CHARS
|
||||
ALLOC_IT(charSets);
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
size_t off;
|
||||
for_each_combData(off, source) {
|
||||
|
@ -2603,11 +2648,6 @@ ScrnCopyRectangle(XtermWidget xw, XTermRect *source, int nparam, int *params)
|
|||
/*
|
||||
* Modifies the video-attributes only - so selection (not a video attribute) is
|
||||
* unaffected. Colors and double-size flags are unaffected as well.
|
||||
*
|
||||
* FIXME: our representation for "invisible" does not work with this operation,
|
||||
* since the attribute byte is fully-allocated for other flags. The logic
|
||||
* is shown for INVISIBLE because it's harmless, and useful in case the
|
||||
* CHARDRAWN or PROTECTED flags are reassigned.
|
||||
*/
|
||||
void
|
||||
ScrnMarkRectangle(XtermWidget xw,
|
||||
|
@ -2812,14 +2852,13 @@ xtermCheckRect(XtermWidget xw,
|
|||
int trimmed = 0;
|
||||
int mode = screen->checksum_ext;
|
||||
|
||||
TRACE(("xtermCheckRect: %s%s%s%s%s%s%s\n",
|
||||
TRACE(("xtermCheckRect: %s%s%s%s%s%s\n",
|
||||
(mode == csDEC) ? "DEC" : "checksumExtension",
|
||||
(mode & csPOSITIVE) ? " !negative" : "",
|
||||
(mode & csATTRIBS) ? " !attribs" : "",
|
||||
(mode & csNOTRIM) ? " !trimmed" : "",
|
||||
(mode & csDRAWN) ? " !drawn" : "",
|
||||
(mode & csBYTE) ? " !byte" : "",
|
||||
(mode & cs8TH) ? " !7bit" : ""));
|
||||
(mode & csBYTE) ? " !byte" : ""));
|
||||
|
||||
if (nparam > 2) {
|
||||
nparam -= 2;
|
||||
|
@ -2832,29 +2871,62 @@ xtermCheckRect(XtermWidget xw,
|
|||
int row, col;
|
||||
Boolean first = True;
|
||||
int embedded = 0;
|
||||
DECNRCM_codes my_GR = screen->gsets[(int) screen->curgr];
|
||||
|
||||
for (row = top; row <= bottom; ++row) {
|
||||
int left = (target.left - 1);
|
||||
int right = (target.right - 1);
|
||||
int ch;
|
||||
|
||||
ld = getLineData(screen, row);
|
||||
if (ld == 0)
|
||||
continue;
|
||||
for (col = left; col <= right && col < (int) ld->lineSize; ++col) {
|
||||
int ch = ((ld->attribs[col] & CHARDRAWN)
|
||||
? (int) ld->charData[col]
|
||||
: ' ');
|
||||
if (!(mode & csBYTE)) {
|
||||
unsigned c2 = (unsigned) ch;
|
||||
if (c2 > 0x7f && my_GR != nrc_ASCII) {
|
||||
c2 = xtermCharSetIn(xw, c2, my_GR);
|
||||
if (!(mode & cs8TH) && (c2 < 0x80))
|
||||
c2 |= 0x80;
|
||||
}
|
||||
ch = (c2 & 0xff);
|
||||
if (!(ld->attribs[col] & CHARDRAWN)) {
|
||||
if (!(mode & (csNOTRIM | csDRAWN)))
|
||||
continue;
|
||||
ch = ' ';
|
||||
} else if (!(mode & csBYTE)) {
|
||||
ch = xtermCharSetDec(xw,
|
||||
ld->charSeen[col],
|
||||
ld->charSets[col]);
|
||||
} else {
|
||||
ch = (int) ld->charData[col];
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
if (is_UCS_SPECIAL(ch))
|
||||
continue;
|
||||
});
|
||||
}
|
||||
if (!(mode & csATTRIBS)) {
|
||||
#if OPT_ISO_COLORS && OPT_VT525_COLORS
|
||||
if (screen->terminal_id == 525) {
|
||||
IAttr flags = ld->attribs[col];
|
||||
CellColor fg_bg = ld->color[col];
|
||||
int fg = (int) extract_fg(xw, fg_bg, flags);
|
||||
int bg = (int) extract_bg(xw, fg_bg, flags);
|
||||
Boolean dft_bg = (bg < 0);
|
||||
Boolean dft_fg = (fg < 0);
|
||||
|
||||
if (dft_bg)
|
||||
bg = screen->assigned_bg;
|
||||
if (bg >= 0 && bg < 16)
|
||||
ch += bg;
|
||||
|
||||
if (dft_fg)
|
||||
fg = screen->assigned_fg;
|
||||
if (fg >= 0 && fg < 16)
|
||||
ch += (fg << 4);
|
||||
|
||||
/* special case to match VT525 behavior */
|
||||
if (dft_bg && !dft_fg && (ld->attribs[col] & BOLD))
|
||||
ch -= 0x80;
|
||||
}
|
||||
#endif
|
||||
if (ld->attribs[col] & PROTECTED)
|
||||
ch += 0x4;
|
||||
#if OPT_WIDE_ATTRS
|
||||
if (ld->attribs[col] & INVISIBLE)
|
||||
ch += 0x8;
|
||||
#endif
|
||||
if (ld->attribs[col] & UNDERLINE)
|
||||
ch += 0x10;
|
||||
if (ld->attribs[col] & INVERSE)
|
||||
|
@ -2871,20 +2943,16 @@ xtermCheckRect(XtermWidget xw,
|
|||
if ((mode & csNOTRIM))
|
||||
embedded += ch;
|
||||
}
|
||||
if ((ld->attribs[col] & CHARDRAWN)) {
|
||||
total += ch;
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
/* FIXME - not counted if trimming blanks */
|
||||
if (!(mode & csBYTE)) {
|
||||
size_t off;
|
||||
for_each_combData(off, ld) {
|
||||
total += (int) ld->combData[off][col];
|
||||
}
|
||||
total += ch;
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
/* FIXME - not counted if trimming blanks */
|
||||
if (!(mode & csBYTE)) {
|
||||
size_t off;
|
||||
for_each_combData(off, ld) {
|
||||
total += (int) ld->combData[off][col];
|
||||
}
|
||||
})
|
||||
} else if (!(mode & csDRAWN)) {
|
||||
total += ch;
|
||||
}
|
||||
}
|
||||
});
|
||||
first = ((mode & csNOTRIM) != 0) ? True : False;
|
||||
}
|
||||
if (!(mode & csNOTRIM)) {
|
||||
|
@ -2901,6 +2969,55 @@ xtermCheckRect(XtermWidget xw,
|
|||
}
|
||||
#endif /* OPT_DEC_RECTOPS */
|
||||
|
||||
static void
|
||||
set_ewmh_hint(XtermWidget xw, int operation, _Xconst char *prop)
|
||||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
Display *dpy = screen->display;
|
||||
Window window;
|
||||
XEvent e;
|
||||
Atom atom_fullscreen = CachedInternAtom(dpy, prop);
|
||||
Atom atom_state = CachedInternAtom(dpy, "_NET_WM_STATE");
|
||||
|
||||
#if OPT_TRACE
|
||||
const char *what = "?";
|
||||
switch (operation) {
|
||||
case _NET_WM_STATE_ADD:
|
||||
what = "adding";
|
||||
break;
|
||||
case _NET_WM_STATE_REMOVE:
|
||||
what = "removing";
|
||||
break;
|
||||
}
|
||||
TRACE(("set_ewmh_hint %s %s\n", what, prop));
|
||||
#endif
|
||||
|
||||
#if OPT_TEK4014
|
||||
if (TEK4014_ACTIVE(xw)) {
|
||||
window = TShellWindow;
|
||||
} else
|
||||
#endif
|
||||
window = VShellWindow(xw);
|
||||
|
||||
memset(&e, 0, sizeof(e));
|
||||
e.xclient.type = ClientMessage;
|
||||
e.xclient.message_type = atom_state;
|
||||
e.xclient.display = dpy;
|
||||
e.xclient.window = window;
|
||||
e.xclient.format = 32;
|
||||
e.xclient.data.l[0] = operation;
|
||||
e.xclient.data.l[1] = (long) atom_fullscreen;
|
||||
|
||||
XSendEvent(dpy, DefaultRootWindow(dpy), False,
|
||||
SubstructureRedirectMask, &e);
|
||||
}
|
||||
|
||||
void
|
||||
ResetHiddenHint(XtermWidget xw)
|
||||
{
|
||||
set_ewmh_hint(xw, _NET_WM_STATE_REMOVE, "_NET_WM_STATE_HIDDEN");
|
||||
}
|
||||
|
||||
#if OPT_MAXIMIZE
|
||||
|
||||
static _Xconst char *
|
||||
|
@ -2982,39 +3099,6 @@ unset_resize_increments(XtermWidget xw)
|
|||
XFlush(XtDisplay(xw));
|
||||
}
|
||||
|
||||
static void
|
||||
set_ewmh_hint(Display *dpy, Window window, int operation, _Xconst char *prop)
|
||||
{
|
||||
XEvent e;
|
||||
Atom atom_fullscreen = XInternAtom(dpy, prop, False);
|
||||
Atom atom_state = XInternAtom(dpy, "_NET_WM_STATE", False);
|
||||
|
||||
#if OPT_TRACE
|
||||
const char *what = "?";
|
||||
switch (operation) {
|
||||
case _NET_WM_STATE_ADD:
|
||||
what = "adding";
|
||||
break;
|
||||
case _NET_WM_STATE_REMOVE:
|
||||
what = "removing";
|
||||
break;
|
||||
}
|
||||
TRACE(("set_ewmh_hint %s %s\n", what, prop));
|
||||
#endif
|
||||
|
||||
memset(&e, 0, sizeof(e));
|
||||
e.xclient.type = ClientMessage;
|
||||
e.xclient.message_type = atom_state;
|
||||
e.xclient.display = dpy;
|
||||
e.xclient.window = window;
|
||||
e.xclient.format = 32;
|
||||
e.xclient.data.l[0] = operation;
|
||||
e.xclient.data.l[1] = (long) atom_fullscreen;
|
||||
|
||||
XSendEvent(dpy, DefaultRootWindow(dpy), False,
|
||||
SubstructureRedirectMask, &e);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if the given property is supported on the root window.
|
||||
*
|
||||
|
@ -3029,8 +3113,8 @@ set_ewmh_hint(Display *dpy, Window window, int operation, _Xconst char *prop)
|
|||
static Boolean
|
||||
probe_netwm(Display *dpy, _Xconst char *propname)
|
||||
{
|
||||
Atom atom_fullscreen = XInternAtom(dpy, propname, False);
|
||||
Atom atom_supported = XInternAtom(dpy, "_NET_SUPPORTED", False);
|
||||
Atom atom_fullscreen = CachedInternAtom(dpy, propname);
|
||||
Atom atom_supported = CachedInternAtom(dpy, "_NET_SUPPORTED");
|
||||
Atom actual_type;
|
||||
int actual_format;
|
||||
long long_offset = 0;
|
||||
|
@ -3107,15 +3191,10 @@ FullScreen(XtermWidget xw, int new_ewmh_mode)
|
|||
_Xconst char *newprop;
|
||||
|
||||
int which = 0;
|
||||
Window window;
|
||||
|
||||
#if OPT_TEK4014
|
||||
if (TEK4014_ACTIVE(xw)) {
|
||||
if (TEK4014_ACTIVE(xw))
|
||||
which = 1;
|
||||
window = TShellWindow;
|
||||
} else
|
||||
#endif
|
||||
window = VShellWindow(xw);
|
||||
|
||||
old_ewmh_mode = xw->work.ewmh[which].mode;
|
||||
oldprop = ewmhProperty(old_ewmh_mode);
|
||||
|
@ -3146,15 +3225,15 @@ FullScreen(XtermWidget xw, int new_ewmh_mode)
|
|||
TRACE(("...new EWMH mode is allowed\n"));
|
||||
if (new_ewmh_mode && !xw->work.ewmh[which].mode) {
|
||||
unset_resize_increments(xw);
|
||||
set_ewmh_hint(dpy, window, _NET_WM_STATE_ADD, newprop);
|
||||
set_ewmh_hint(xw, _NET_WM_STATE_ADD, newprop);
|
||||
} else if (xw->work.ewmh[which].mode && !new_ewmh_mode) {
|
||||
if (!xw->misc.resizeByPixel) {
|
||||
set_resize_increments(xw);
|
||||
}
|
||||
set_ewmh_hint(dpy, window, _NET_WM_STATE_REMOVE, oldprop);
|
||||
set_ewmh_hint(xw, _NET_WM_STATE_REMOVE, oldprop);
|
||||
} else {
|
||||
set_ewmh_hint(dpy, window, _NET_WM_STATE_REMOVE, oldprop);
|
||||
set_ewmh_hint(dpy, window, _NET_WM_STATE_ADD, newprop);
|
||||
set_ewmh_hint(xw, _NET_WM_STATE_REMOVE, oldprop);
|
||||
set_ewmh_hint(xw, _NET_WM_STATE_ADD, newprop);
|
||||
}
|
||||
xw->work.ewmh[which].mode = new_ewmh_mode;
|
||||
update_fullscreen();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: scrollbar.c,v 1.214 2021/12/31 23:35:02 tom Exp $ */
|
||||
/* $XTermId: scrollbar.c,v 1.215 2023/11/12 22:08:19 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2000-2020,2021 by Thomas E. Dickey
|
||||
* Copyright 2000-2021,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -862,7 +862,7 @@ getXkbLED(Display *dpy, const char *name, Boolean *result)
|
|||
Bool state;
|
||||
|
||||
if (have_xkb(dpy)) {
|
||||
my_atom = XInternAtom(dpy, name, False);
|
||||
my_atom = CachedInternAtom(dpy, name);
|
||||
if ((my_atom != None) &&
|
||||
XkbGetNamedIndicator(dpy, my_atom, NULL, &state, NULL, NULL)) {
|
||||
*result = (Boolean) state;
|
||||
|
@ -883,7 +883,7 @@ showXkbLED(Display *dpy, const char *name, Bool enable)
|
|||
Boolean result = False;
|
||||
|
||||
if (have_xkb(dpy)) {
|
||||
my_atom = XInternAtom(dpy, name, False);
|
||||
my_atom = CachedInternAtom(dpy, name);
|
||||
if ((my_atom != None) &&
|
||||
XkbGetNamedIndicator(dpy, my_atom, NULL, NULL, NULL, NULL) &&
|
||||
XkbSetNamedIndicator(dpy, my_atom, True, enable, False, NULL)) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: svg.c,v 1.21 2021/09/19 18:22:57 tom Exp $ */
|
||||
/* $XTermId: svg.c,v 1.23 2023/03/31 23:08:13 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2017-2020,2021 Thomas E. Dickey
|
||||
* Copyright 2017-2021,2023 Thomas E. Dickey
|
||||
* Copyright 2015-2016,2017 Jens Schweikhardt
|
||||
*
|
||||
* All Rights Reserved
|
||||
|
@ -105,11 +105,12 @@ dumpSvgScreen(XtermWidget xw, FILE *fp)
|
|||
int row;
|
||||
|
||||
fprintf(fp, " <rect x='0' y='0' width='%u' height='%u' fill='%s'/>\n",
|
||||
cols * CELLW + 2 * (bw + ib), rows * CELLH + 2 * (bw + ib),
|
||||
(unsigned) (cols * CELLW + 2 * (bw + ib)),
|
||||
(unsigned) (rows * CELLH + 2 * (bw + ib)),
|
||||
PixelToCSSColor(xw, xw->core.border_pixel));
|
||||
fprintf(fp, " <rect x='%u' y='%u' width='%u' height='%u' fill='%s'/>\n",
|
||||
bw, bw,
|
||||
MaxCols(s) * CELLW + 2 * ib,
|
||||
(unsigned) (MaxCols(s) * CELLW + 2 * ib),
|
||||
(unsigned) (rows * CELLH + 2 * ib),
|
||||
PixelToCSSColor(xw, xw->old_background));
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# $XTermId: terminfo,v 1.206 2023/01/08 10:51:12 tom Exp $
|
||||
# $XTermId: terminfo,v 1.209 2024/02/11 23:35:48 tom Exp $
|
||||
#
|
||||
# Updates/notes/new entries (e.g., xterm-8bit, xterm-16color, xterm-256color)
|
||||
# - Thomas E. Dickey
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
# Copyright 1996-2022,2023 by Thomas E. Dickey
|
||||
# Copyright 1996-2023,2024 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
|
@ -130,11 +130,6 @@
|
|||
# respectively.
|
||||
#
|
||||
xterm-new|modern xterm terminal emulator,
|
||||
npc,
|
||||
indn=\E[%p1%dS,
|
||||
kcbt=\E[Z,
|
||||
kent=\EOM,
|
||||
nel=\EE,
|
||||
use=dec+sl,
|
||||
use=ecma+index,
|
||||
use=xterm+keypad,
|
||||
|
@ -147,6 +142,7 @@ xterm-new|modern xterm terminal emulator,
|
|||
use=xterm+nofkeys,
|
||||
use=bracketed+paste,
|
||||
use=report+version,
|
||||
use=xterm+focus,
|
||||
|
||||
# Left/right margins are supported in xterm since patch #279 (2012/05/10)
|
||||
vt420+lrmm|VT420 left/right margins,
|
||||
|
@ -155,9 +151,23 @@ vt420+lrmm|VT420 left/right margins,
|
|||
smglr=\E[?69h\E[%i%p1%d;%p2%ds,
|
||||
smgrp=\E[?69h\E[%i;%p1%ds,
|
||||
|
||||
# These "ansi+XXX" blocks were added in ncurses 5.0:
|
||||
ansi+rep,
|
||||
rep=%p1%c\E[%p2%{1}%-%db,
|
||||
# These "ansi+XXX" blocks were added in ncurses 5.0 or 5.1:
|
||||
ansi+arrows|ANSI normal-mode home and cursor-keys,
|
||||
kbs=^H,
|
||||
kcub1=\E[D,
|
||||
kcud1=\E[B,
|
||||
kcuf1=\E[C,
|
||||
kcuu1=\E[A,
|
||||
khome=\E[H,
|
||||
|
||||
ansi+csr|ANSI scroll-region plus cursor save & restore,
|
||||
csr=\E[%i%p1%d;%p2%dr,
|
||||
rc=\E8,
|
||||
sc=\E7,
|
||||
|
||||
ansi+cup|ANSI absolute cursor-addressing,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
home=\E[H,
|
||||
|
||||
ansi+enq|ncurses extension for ANSI ENQ,
|
||||
u6=\E[%i%d;%dR,
|
||||
|
@ -165,6 +175,172 @@ ansi+enq|ncurses extension for ANSI ENQ,
|
|||
u8=\E[?%[;0123456789]c,
|
||||
u9=\E[c,
|
||||
|
||||
ansi+erase|ANSI clear screen/line,
|
||||
clear=\E[H\E[J,
|
||||
ed=\E[J,
|
||||
el=\E[K,
|
||||
|
||||
ansi+idc1|ANSI insert/delete one character,
|
||||
dch1=\E[P,
|
||||
ich1=\E[@,
|
||||
rmir=\E[4l,
|
||||
smir=\E[4h,
|
||||
|
||||
ansi+idc|ANSI insert/delete characters,
|
||||
dch=\E[%p1%dP,
|
||||
ich=\E[%p1%d@,
|
||||
use=ansi+idc1,
|
||||
|
||||
ansi+idl1|ANSI insert/delete one line,
|
||||
dl1=\E[M,
|
||||
il1=\E[L,
|
||||
|
||||
ansi+idl|ANSI insert/delete lines,
|
||||
dl=\E[%p1%dM,
|
||||
il=\E[%p1%dL,
|
||||
use=ansi+idl1,
|
||||
|
||||
ansi+inittabs|ANSI initial tab-stops,
|
||||
it#8,
|
||||
use=ansi+tabs,
|
||||
|
||||
ansi+local1|ANSI normal-mode cursor-keys,
|
||||
cub1=\E[D,
|
||||
cud1=\E[B,
|
||||
cuf1=\E[C,
|
||||
cuu1=\E[A,
|
||||
|
||||
ansi+local|ANSI normal-mode parameterized cursor-keys,
|
||||
cub=\E[%p1%dD,
|
||||
cud=\E[%p1%dB,
|
||||
cuf=\E[%p1%dC,
|
||||
cuu=\E[%p1%dA,
|
||||
use=ansi+local1,
|
||||
|
||||
ansi+pp|ANSI printer port,
|
||||
mc5i,
|
||||
mc0=\E[i,
|
||||
mc4=\E[4i,
|
||||
mc5=\E[5i,
|
||||
|
||||
ansi+rep|ANSI repeat-character,
|
||||
rep=%p1%c\E[%p2%{1}%-%db,
|
||||
|
||||
ansi+sgr|ANSI graphic renditions,
|
||||
blink=\E[5m,
|
||||
invis=\E[8m,
|
||||
rev=\E[7m,
|
||||
sgr=\E[0
|
||||
%?
|
||||
%p3
|
||||
%t;7
|
||||
%;
|
||||
%?
|
||||
%p4
|
||||
%t;5
|
||||
%;
|
||||
%?
|
||||
%p7
|
||||
%t;8
|
||||
%;
|
||||
m,
|
||||
sgr0=\E[0m,
|
||||
|
||||
ansi+sgrso|ANSI standout only,
|
||||
rmso=\E[m,
|
||||
smso=\E[7m,
|
||||
|
||||
ansi+sgrul|ANSI underline only,
|
||||
rmul=\E[m,
|
||||
smul=\E[4m,
|
||||
|
||||
ansi+sgrbold|ANSI graphic renditions; assuming terminal has bold; not dim,
|
||||
bold=\E[1m,
|
||||
sgr=\E[
|
||||
%?
|
||||
%p1
|
||||
%t7;
|
||||
%;
|
||||
%?
|
||||
%p2
|
||||
%t4;
|
||||
%;
|
||||
%?
|
||||
%p3
|
||||
%t7;
|
||||
%;
|
||||
%?
|
||||
%p4
|
||||
%t5;
|
||||
%;
|
||||
%?
|
||||
%p6
|
||||
%t1;
|
||||
%;
|
||||
%?
|
||||
%p7
|
||||
%t8;
|
||||
%;
|
||||
m,
|
||||
use=ansi+sgr,
|
||||
use=ansi+sgrso,
|
||||
use=ansi+sgrul,
|
||||
|
||||
ansi+sgrdim|ANSI graphic renditions; assuming terminal has dim; not bold,
|
||||
dim=\E[2m,
|
||||
sgr=\E[
|
||||
%?
|
||||
%p1
|
||||
%t7;
|
||||
%;
|
||||
%?
|
||||
%p2
|
||||
%t4;
|
||||
%;
|
||||
%?
|
||||
%p3
|
||||
%t7;
|
||||
%;
|
||||
%?
|
||||
%p4
|
||||
%t5;
|
||||
%;
|
||||
%?
|
||||
%p5
|
||||
%t2;
|
||||
%;
|
||||
%?
|
||||
%p7
|
||||
%t8;
|
||||
%;
|
||||
m,
|
||||
use=ansi+sgr,
|
||||
use=ansi+sgrso,
|
||||
use=ansi+sgrul,
|
||||
|
||||
ansi+tabs|ANSI tab-stops,
|
||||
cbt=\E[Z,
|
||||
ht=^I,
|
||||
hts=\EH,
|
||||
tbc=\E[3g,
|
||||
|
||||
# These were added after ncurses 6.0:
|
||||
ansi+apparrows|ANSI application-mode home and cursor-keys,
|
||||
kcub1=\EOD,
|
||||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
khome=\EOH,
|
||||
use=ansi+arrows,
|
||||
|
||||
ansi+cpr|ncurses extension for ANSI CPR,
|
||||
u6=\E[%i%d;%dR,
|
||||
u7=\E[6n,
|
||||
|
||||
ansi+rca2|ANSI relative cursor-addressing,
|
||||
hpa=\E[%i%p1%dG,
|
||||
vpa=\E[%i%p1%dd,
|
||||
|
||||
# Encode modifiers using parameters (see "Xterm Control Sequences" ctlseqs.ms).
|
||||
# Note that this is unrelated to PCTERM.
|
||||
#
|
||||
|
@ -908,7 +1084,7 @@ xterm+pce0|fragment with modifyCursorKeys:0,
|
|||
kPRV5=\E[5;5~,
|
||||
kPRV6=\E[5;6~,
|
||||
kPRV7=\E[5;7~,
|
||||
use=xterm+edit,
|
||||
use=vt220+pcedit,
|
||||
|
||||
ecma+italics|ECMA-48 italics,
|
||||
ritm=\E[23m,
|
||||
|
@ -968,6 +1144,16 @@ xterm+x11mouse|X11 xterm mouse protocol,
|
|||
%p2%'!'%+%c
|
||||
%p1%'!'%+%c,
|
||||
|
||||
# xterm patch #224 2007/2/11 added private mode 1004, for enabling/disabling
|
||||
# focus in/out event reporting. The 1004 is normally part of XM in a different
|
||||
# building-block, e.g., for reporting any events.
|
||||
xterm+focus|xterm focus-in/out event "keys",
|
||||
XF,
|
||||
fd=\E[?1004l,
|
||||
fe=\E[?1004h,
|
||||
kxIN=\E[I,
|
||||
kxOUT=\E[O,
|
||||
|
||||
# https://invisible-island.net/xterm/xterm-paste64.html
|
||||
#
|
||||
# Bracketed paste was introduced by xterm patch #203 in May 2005, as part of a
|
||||
|
@ -988,7 +1174,21 @@ bracketed+paste|xterm bracketed paste,
|
|||
# For example:
|
||||
# ^[P>|XTerm(354)^[\
|
||||
report+version|Report xterm name and version (XTVERSION).,
|
||||
RV=\E[>0q,
|
||||
XR=\E[>0q,
|
||||
xr=\EP>\\|XTerm\\([1-9][0-9]+\\)
|
||||
\E\\\\,
|
||||
use=report+da2,
|
||||
|
||||
# Vim uses RV to denote the secondary device attributes. Xterm documents the
|
||||
# - first parameter as the terminal type (extending it to VT100),
|
||||
# - the second as the patch number for xterm, and
|
||||
# - the third parameter as zero.
|
||||
# Other terminals may provide useful responses, though few are documented.
|
||||
#
|
||||
# Since patch #280 2012/06/24, xterm by default reports itself as a VT420.
|
||||
report+da2|report secondary device attributes (DA2),
|
||||
RV=\E[>c,
|
||||
rv=\E\\[41;[1-6][0-9][0-9];0c,
|
||||
|
||||
# This chunk is used for building the VT220/Sun/PC keyboard variants.
|
||||
xterm-basic|modern xterm terminal emulator - common,
|
||||
|
@ -996,7 +1196,6 @@ xterm-basic|modern xterm terminal emulator - common,
|
|||
am,
|
||||
bce,
|
||||
km,
|
||||
mc5i,
|
||||
mir,
|
||||
msgr,
|
||||
xenl,
|
||||
|
@ -1004,59 +1203,34 @@ xterm-basic|modern xterm terminal emulator - common,
|
|||
XT,
|
||||
colors#8,
|
||||
cols#80,
|
||||
it#8,
|
||||
lines#24,
|
||||
pairs#64,
|
||||
acsc=``aaffggiijjkkllmmnnooppqqr
|
||||
rssttuuvvwwxxyyzz{{||}}~~,
|
||||
bel=^G,
|
||||
blink=\E[5m,
|
||||
bold=\E[1m,
|
||||
cbt=\E[Z,
|
||||
civis=\E[?25l,
|
||||
clear=\E[H\E[2J,
|
||||
cnorm=\E[?12l\E[?25h,
|
||||
cr=\r,
|
||||
csr=\E[%i%p1%d;%p2%dr,
|
||||
cub=\E[%p1%dD,
|
||||
cub1=^H,
|
||||
cud=\E[%p1%dB,
|
||||
cud1=\n,
|
||||
cuf=\E[%p1%dC,
|
||||
cuf1=\E[C,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
cuu=\E[%p1%dA,
|
||||
cuu1=\E[A,
|
||||
cvvis=\E[?12;25h,
|
||||
dch=\E[%p1%dP,
|
||||
dch1=\E[P,
|
||||
dim=\E[2m,
|
||||
dl=\E[%p1%dM,
|
||||
dl1=\E[M,
|
||||
ech=\E[%p1%dX,
|
||||
ed=\E[J,
|
||||
el=\E[K,
|
||||
el1=\E[1K,
|
||||
flash=\E[?5h$<100/>\E[?5l,
|
||||
home=\E[H,
|
||||
hpa=\E[%i%p1%dG,
|
||||
ht=^I,
|
||||
hts=\EH,
|
||||
ich=\E[%p1%d@,
|
||||
il=\E[%p1%dL,
|
||||
il1=\E[L,
|
||||
ind=\n,
|
||||
invis=\E[8m,
|
||||
is2=\E[!p\E[?3;4l\E[4l\E>,
|
||||
kmous=\E[M,
|
||||
mc0=\E[i,
|
||||
mc4=\E[4i,
|
||||
mc5=\E[5i,
|
||||
meml=\El,
|
||||
memu=\Em,
|
||||
op=\E[39;49m,
|
||||
rc=\E8,
|
||||
rev=\E[7m,
|
||||
ri=\EM,
|
||||
rmacs=\E(B,
|
||||
rmam=\E[?7l,
|
||||
|
@ -1067,7 +1241,6 @@ xterm-basic|modern xterm terminal emulator - common,
|
|||
rmul=\E[24m,
|
||||
rs1=\Ec,
|
||||
rs2=\E[!p\E[?3;4l\E[4l\E>,
|
||||
sc=\E7,
|
||||
setab=\E[4%p1%dm,
|
||||
setaf=\E[3%p1%dm,
|
||||
setb=\E[4
|
||||
|
@ -1144,12 +1317,16 @@ xterm-basic|modern xterm terminal emulator - common,
|
|||
smir=\E[4h,
|
||||
smkx=\E[?1h\E=,
|
||||
smm=\E[?1034h,
|
||||
smso=\E[7m,
|
||||
smul=\E[4m,
|
||||
tbc=\E[3g,
|
||||
vpa=\E[%i%p1%dd,
|
||||
E3=\E[3J,
|
||||
use=ansi+csr,
|
||||
use=ansi+enq,
|
||||
use=ansi+idl,
|
||||
use=ansi+inittabs,
|
||||
use=ansi+local,
|
||||
use=ansi+pp,
|
||||
use=ansi+rca2,
|
||||
use=ansi+sgrbold,
|
||||
use=ansi+sgrdim,
|
||||
use=xterm+alt+title,
|
||||
use=xterm+kbs,
|
||||
|
||||
|
@ -1164,6 +1341,7 @@ xterm+nofkeys|building block for xterm fkey-variants,
|
|||
use=vt420+lrmm,
|
||||
use=xterm+sm+1006,
|
||||
use=xterm+tmux,
|
||||
use=xterm+focus,
|
||||
use=ecma+italics,
|
||||
use=xterm+keypad,
|
||||
use=xterm-basic,
|
||||
|
@ -1184,12 +1362,7 @@ xterm+nofkeys|building block for xterm fkey-variants,
|
|||
xterm-vt220|xterm emulating vt220,
|
||||
npc,
|
||||
kcbt=\E[Z,
|
||||
kcub1=\EOD,
|
||||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
kend=\E[4~,
|
||||
kent=\EOM,
|
||||
kf10=\E[21~,
|
||||
kf11=\E[23~,
|
||||
kf12=\E[24~,
|
||||
|
@ -1207,18 +1380,16 @@ xterm-vt220|xterm emulating vt220,
|
|||
kf8=\E[19~,
|
||||
kf9=\E[20~,
|
||||
khome=\E[1~,
|
||||
kich1=\E[2~,
|
||||
kmous=\E[M,
|
||||
knp=\E[6~,
|
||||
kpp=\E[5~,
|
||||
nel=\EE,
|
||||
use=xterm+app,
|
||||
use=xterm+edit,
|
||||
use=vt220+keypad,
|
||||
use=vt220+pcedit,
|
||||
use=ecma+italics,
|
||||
use=ecma+index,
|
||||
use=ansi+rep,
|
||||
use=ecma+strikeout,
|
||||
use=xterm+focus,
|
||||
use=xterm+sm+1006,
|
||||
use=xterm+tmux,
|
||||
use=xterm+keypad,
|
||||
|
@ -1333,13 +1504,8 @@ vt52+keypad|DECScope auxiliary keypad,
|
|||
xterm-sun|xterm with sun function keys,
|
||||
kb2=\E[218z,
|
||||
kcpy=\E[197z,
|
||||
kcub1=\EOD,
|
||||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
kdch1=\E[3z,
|
||||
kend=\E[220z,
|
||||
kent=\EOM,
|
||||
kf1=\E[224z,
|
||||
kf10=\E[233z,
|
||||
kf11=\E[192z,
|
||||
|
@ -1379,6 +1545,8 @@ xterm-sun|xterm with sun function keys,
|
|||
knp=\E[222z,
|
||||
kpp=\E[216z,
|
||||
kund=\E[195z,
|
||||
use=xterm+kbs,
|
||||
use=ansi+apparrows,
|
||||
use=xterm+nopcfkeys,
|
||||
use=xterm+nofkeys,
|
||||
|
||||
|
@ -1491,7 +1659,7 @@ xterm-sco|xterm with SCO function keys,
|
|||
kmous=\E[>M,
|
||||
knp=\E[G,
|
||||
kpp=\E[I,
|
||||
use=xterm+noapp,
|
||||
use=vt100+noapp,
|
||||
use=xterm+nofkeys,
|
||||
#
|
||||
# Other variants (these are all very old entries, from X11R5):
|
||||
|
@ -1569,15 +1737,22 @@ xterm-noapp|xterm with cursor keys in normal mode,
|
|||
rmkx=\E>,
|
||||
smcup@,
|
||||
smkx=\E=,
|
||||
use=xterm+noapp,
|
||||
use=vt100+noapp,
|
||||
use=xterm,
|
||||
|
||||
xterm+noapp|fragment with cursor keys in normal mode,
|
||||
vt100+noapp|fragment with cursor keys in normal mode,
|
||||
kcub1=\E[D,
|
||||
kcud1=\E[B,
|
||||
kcuf1=\E[C,
|
||||
kcuu1=\E[A,
|
||||
use=xterm+noapp+pc,
|
||||
use=vt100+noapp+pc,
|
||||
|
||||
xterm+acs|ISO-2022 alternate character-switching for xterm,
|
||||
acsc=``aaffggiijjkkllmmnnooppqqr
|
||||
rssttuuvvwwxxyyzz{{||}}~~,
|
||||
enacs@,
|
||||
rmacs=\E(B,
|
||||
smacs=\E(0,
|
||||
|
||||
xterm+app|fragment with cursor keys in application mode,
|
||||
kcub1=\EOD,
|
||||
|
@ -1586,7 +1761,7 @@ xterm+app|fragment with cursor keys in application mode,
|
|||
kcuu1=\EOA,
|
||||
use=xterm+app+pc,
|
||||
|
||||
xterm+noapp+pc|fragment for noapp pc-style home/end,
|
||||
vt100+noapp+pc|fragment for noapp pc-style home/end,
|
||||
kend=\E[F,
|
||||
khome=\E[H,
|
||||
|
||||
|
@ -1594,7 +1769,7 @@ xterm+app+pc|fragment for app pc-style home/end,
|
|||
kend=\EOF,
|
||||
khome=\EOH,
|
||||
|
||||
xterm+edit|fragment for 6-key editing-keypad,
|
||||
vt220+pcedit|fragment for 6-key editing-keypad,
|
||||
kdch1=\E[3~,
|
||||
kich1=\E[2~,
|
||||
knp=\E[6~,
|
||||
|
@ -1616,10 +1791,6 @@ xterm+vt+edit|fragment for vt220-style editing keypad,
|
|||
kfnd=\E[1~,
|
||||
kslt=\E[4~,
|
||||
|
||||
xterm+noalt|xterm without altscreen,
|
||||
rmcup@,
|
||||
smcup@,
|
||||
|
||||
xterm+alt1049|xterm 90 feature,
|
||||
rmcup=\E[?1049l,
|
||||
smcup=\E[?1049h,
|
||||
|
@ -2066,8 +2237,6 @@ xterm+256color2|xterm 256-color feature,
|
|||
%p1%d
|
||||
%;
|
||||
m,
|
||||
setb@,
|
||||
setf@,
|
||||
use=xterm+256color,
|
||||
xterm-256color|xterm with 256 colors,
|
||||
use=xterm+256color2,
|
||||
|
@ -2150,8 +2319,6 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
|
|||
it#8,
|
||||
lines#24,
|
||||
pairs#64,
|
||||
acsc=``aaffggiijjkkllmmnnooppqqr
|
||||
rssttuuvvwwxxyyzz{{||}}~~,
|
||||
bel=^G,
|
||||
blink=\2335m,
|
||||
bold=\2331m,
|
||||
|
@ -2240,7 +2407,6 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
|
|||
rc=\E8,
|
||||
rev=\2337m,
|
||||
ri=\215,
|
||||
rmacs=\E(B,
|
||||
rmam=\233?7l,
|
||||
rmcup=\233?1049l,
|
||||
rmir=\2334l,
|
||||
|
@ -2318,7 +2484,6 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
|
|||
\E(B
|
||||
%;,
|
||||
sgr0=\2330m\E(B,
|
||||
smacs=\E(0,
|
||||
smam=\233?7h,
|
||||
smcup=\233?1049h,
|
||||
smir=\2334h,
|
||||
|
@ -2331,6 +2496,7 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
|
|||
u8=\233[?%[;0123456789]c,
|
||||
u9=\E[c,
|
||||
vpa=\233%i%p1%dd,
|
||||
use=xterm+acs,
|
||||
use=xterm+kbs,
|
||||
#
|
||||
xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
||||
|
@ -2338,7 +2504,6 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
|||
am,
|
||||
bce,
|
||||
km,
|
||||
mc5i,
|
||||
mir,
|
||||
msgr,
|
||||
npc,
|
||||
|
@ -2347,50 +2512,30 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
|||
XT,
|
||||
colors#8,
|
||||
cols#80,
|
||||
it#8,
|
||||
lines#24,
|
||||
pairs#64,
|
||||
acsc=``aaffggiijjkkllmmnnooppqqr
|
||||
rssttuuvvwwxxyyzz{{||}}~~,
|
||||
bel=^G,
|
||||
blink=\E[5m,
|
||||
bold=\E[1m,
|
||||
cbt=\E[Z,
|
||||
civis=\E[?25l,
|
||||
clear=\E[H\E[2J,
|
||||
cnorm=\E[?12l\E[?25h,
|
||||
cr=\r,
|
||||
csr=\E[%i%p1%d;%p2%dr,
|
||||
cub=\E[%p1%dD,
|
||||
cub1=^H,
|
||||
cud=\E[%p1%dB,
|
||||
cud1=\n,
|
||||
cuf=\E[%p1%dC,
|
||||
cuf1=\E[C,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
cuu=\E[%p1%dA,
|
||||
cuu1=\E[A,
|
||||
cvvis=\E[?12;25h,
|
||||
dch=\E[%p1%dP,
|
||||
dch1=\E[P,
|
||||
dl=\E[%p1%dM,
|
||||
dl1=\E[M,
|
||||
ech=\E[%p1%dX,
|
||||
ed=\E[J,
|
||||
el=\E[K,
|
||||
el1=\E[1K,
|
||||
enacs=\E(B\E)0,
|
||||
flash=\E[?5h$<100/>\E[?5l,
|
||||
home=\E[H,
|
||||
hpa=\E[%i%p1%dG,
|
||||
ht=^I,
|
||||
hts=\EH,
|
||||
ich=\E[%p1%d@,
|
||||
il=\E[%p1%dL,
|
||||
il1=\E[L,
|
||||
ind=\n,
|
||||
indn=\E[%p1%dS,
|
||||
invis=\E[8m,
|
||||
is2=\E[!p\E[?3;4l\E[4l\E>,
|
||||
kDC=\E[3;2~,
|
||||
kEND=\E[1;2F,
|
||||
|
@ -2402,10 +2547,6 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
|||
kRIT=\E[1;2C,
|
||||
kb2=\EOE,
|
||||
kcbt=\E[Z,
|
||||
kcub1=\EOD,
|
||||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
kdch1=\E[3~,
|
||||
kend=\EOF,
|
||||
kent=\EOM,
|
||||
|
@ -2457,19 +2598,13 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
|||
kf7=\E[18~,
|
||||
kf8=\E[19~,
|
||||
kf9=\E[20~,
|
||||
khome=\EOH,
|
||||
kich1=\E[2~,
|
||||
kmous=\E[M,
|
||||
knp=\E[6~,
|
||||
kpp=\E[5~,
|
||||
mc0=\E[i,
|
||||
mc4=\E[4i,
|
||||
mc5=\E[5i,
|
||||
meml=\El,
|
||||
memu=\Em,
|
||||
op=\E[39;49m,
|
||||
rc=\E8,
|
||||
rev=\E[7m,
|
||||
ri=\EM,
|
||||
rin=\E[%p1%dT,
|
||||
rmacs=^O,
|
||||
|
@ -2480,7 +2615,6 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
|||
rmul=\E[24m,
|
||||
rs1=\Ec,
|
||||
rs2=\E[!p\E[?3;4l\E[4l\E>,
|
||||
sc=\E7,
|
||||
setab=\E[4%p1%dm,
|
||||
setaf=\E[3%p1%dm,
|
||||
setb=\E[4
|
||||
|
@ -2551,20 +2685,24 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
|||
smam=\E[?7h,
|
||||
smir=\E[4h,
|
||||
smkx=\E[?1h\E=,
|
||||
smso=\E[7m,
|
||||
smul=\E[4m,
|
||||
tbc=\E[3g,
|
||||
u6=\E[%i%d;%dR,
|
||||
u7=\E[6n,
|
||||
u8=\E[?1;2c,
|
||||
u9=\E[c,
|
||||
vpa=\E[%i%p1%dd,
|
||||
ka2=\EOx,
|
||||
kb1=\EOt,
|
||||
kb3=\EOv,
|
||||
kc2=\EOr,
|
||||
use=xterm+alt1049,
|
||||
use=xterm+kbs,
|
||||
use=ansi+apparrows,
|
||||
use=ansi+csr,
|
||||
use=ansi+cup,
|
||||
use=ansi+enq,
|
||||
use=ansi+idl,
|
||||
use=ansi+inittabs,
|
||||
use=ansi+local,
|
||||
use=ansi+pp,
|
||||
use=ansi+sgrbold,
|
||||
use=xterm+alt1049,
|
||||
|
||||
xterm-xfree86|xterm terminal emulator (XFree86 4.4 Window System),
|
||||
use=xterm-xf86-v44,
|
||||
#
|
||||
|
@ -2590,24 +2728,19 @@ xterm-r6|xterm X11R6 version,
|
|||
bold=\E[1m,
|
||||
clear=\E[H\E[2J,
|
||||
cr=\r,
|
||||
csr=\E[%i%p1%d;%p2%dr,
|
||||
cub=\E[%p1%dD,
|
||||
cub1=^H,
|
||||
cud=\E[%p1%dB,
|
||||
cud1=\n,
|
||||
cuf=\E[%p1%dC,
|
||||
cuf1=\E[C,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
cuu=\E[%p1%dA,
|
||||
cuu1=\E[A,
|
||||
dch=\E[%p1%dP,
|
||||
dch1=\E[P,
|
||||
dl=\E[%p1%dM,
|
||||
dl1=\E[M,
|
||||
ed=\E[J,
|
||||
el=\E[K,
|
||||
enacs=\E)0,
|
||||
home=\E[H,
|
||||
ht=^I,
|
||||
hts=\EH,
|
||||
il=\E[%p1%dL,
|
||||
|
@ -2619,7 +2752,6 @@ xterm-r6|xterm X11R6 version,
|
|||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
kdch1=\E[3~,
|
||||
kf1=\E[11~,
|
||||
kf10=\E[21~,
|
||||
kf11=\E[23~,
|
||||
|
@ -2643,7 +2775,6 @@ xterm-r6|xterm X11R6 version,
|
|||
kmous=\E[M,
|
||||
meml=\El,
|
||||
memu=\Em,
|
||||
rc=\E8,
|
||||
rev=\E[7m,
|
||||
ri=\EM,
|
||||
rmacs=^O,
|
||||
|
@ -2654,7 +2785,6 @@ xterm-r6|xterm X11R6 version,
|
|||
rmul=\E[m,
|
||||
rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[
|
||||
?1;3;4;6l\E8,
|
||||
sc=\E7,
|
||||
sgr0=\E[m,
|
||||
smacs=^N,
|
||||
smcup=\E7\E[?47h,
|
||||
|
@ -2663,10 +2793,12 @@ xterm-r6|xterm X11R6 version,
|
|||
smso=\E[7m,
|
||||
smul=\E[4m,
|
||||
tbc=\E[3g,
|
||||
u6=\E[%i%d;%dR,
|
||||
u7=\E[6n,
|
||||
u8=\E[?1;2c,
|
||||
u9=\E[c,
|
||||
use=ansi+cpr,
|
||||
use=ansi+csr,
|
||||
use=ansi+cup,
|
||||
use=ansi+erase,
|
||||
use=xterm+kbs,
|
||||
use=xterm+decedit,
|
||||
xterm-old|antique xterm version,
|
||||
|
@ -2697,34 +2829,15 @@ xterm-r5|xterm R5 version,
|
|||
bold=\E[1m,
|
||||
clear=\E[H\E[2J,
|
||||
cr=\r,
|
||||
csr=\E[%i%p1%d;%p2%dr,
|
||||
cub=\E[%p1%dD,
|
||||
cub1=^H,
|
||||
cud=\E[%p1%dB,
|
||||
cud1=\n,
|
||||
cuf=\E[%p1%dC,
|
||||
cuf1=\E[C,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
cuu=\E[%p1%dA,
|
||||
cuu1=\E[A,
|
||||
dch=\E[%p1%dP,
|
||||
dch1=\E[P,
|
||||
dl=\E[%p1%dM,
|
||||
dl1=\E[M,
|
||||
ed=\E[J,
|
||||
el=\E[K,
|
||||
home=\E[H,
|
||||
ht=^I,
|
||||
hts=\EH,
|
||||
ich=\E[%p1%d@,
|
||||
ich1=\E[@,
|
||||
il=\E[%p1%dL,
|
||||
il1=\E[L,
|
||||
ind=\n,
|
||||
kcub1=\EOD,
|
||||
kcud1=\EOB,
|
||||
kcuf1=\EOC,
|
||||
kcuu1=\EOA,
|
||||
kdch1=\E[3~,
|
||||
kdl1=\E[31~,
|
||||
kel=\E[8~,
|
||||
|
@ -2748,16 +2861,12 @@ xterm-r5|xterm R5 version,
|
|||
kmous=\E[M,
|
||||
knp=\E[6~,
|
||||
kpp=\E[5~,
|
||||
rc=\E8,
|
||||
rev=\E[7m,
|
||||
ri=\EM,
|
||||
rmir=\E[4l,
|
||||
rmkx=\E[?1l\E>,
|
||||
rmso=\E[m,
|
||||
rmul=\E[m,
|
||||
rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h
|
||||
\E[m\E[r\E[2J\E[H,
|
||||
sc=\E7,
|
||||
sgr=\E[
|
||||
%?
|
||||
%p1
|
||||
|
@ -2781,16 +2890,18 @@ xterm-r5|xterm R5 version,
|
|||
%;
|
||||
m,
|
||||
sgr0=\E[m,
|
||||
smir=\E[4h,
|
||||
smkx=\E[?1h\E=,
|
||||
smso=\E[7m,
|
||||
smul=\E[4m,
|
||||
tbc=\E[3g,
|
||||
u6=\E[%i%d;%dR,
|
||||
u7=\E[6n,
|
||||
u8=\E[?1;2c,
|
||||
u9=\E[c,
|
||||
use=xterm+kbs,
|
||||
use=ansi+apparrows,
|
||||
use=ansi+csr,
|
||||
use=ansi+enq,
|
||||
use=ansi+idc,
|
||||
use=ansi+idl,
|
||||
use=ansi+local,
|
||||
use=ansi+sgrso,
|
||||
|
||||
# DEC status-line is an extension for VT220, and standard with VT320 and up.
|
||||
dec+sl|DEC VTxx status line,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: trace.c,v 1.239 2022/10/06 20:43:02 tom Exp $ */
|
||||
/* $XTermId: trace.c,v 1.240 2023/10/14 16:52:49 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1997-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -269,6 +269,7 @@ visibleScsCode(DECNRCM_codes chrset)
|
|||
MAP("1", nrc_DEC_Alt_Chars);
|
||||
MAP("2", nrc_DEC_Alt_Graphics);
|
||||
MAP("<", nrc_DEC_Supp);
|
||||
MAP("<", nrc_DEC_UPSS);
|
||||
MAP("%5", nrc_DEC_Supp_Graphic);
|
||||
MAP(">", nrc_DEC_Technical);
|
||||
MAP("4", nrc_Dutch);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: trace.h,v 1.94 2022/10/06 20:40:49 tom Exp $ */
|
||||
/* $XTermId: trace.h,v 1.95 2024/05/15 23:51:40 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1997-2022,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -92,7 +92,7 @@ extern void TraceArgv(const char * /* tag */, char ** /* argv */);
|
|||
|
||||
extern const char *trace_who;
|
||||
#undef TRACE_CHILD
|
||||
#define TRACE_CHILD int tracing_child = (trace_who = "child") != 0; (void) tracing_child;
|
||||
#define TRACE_CHILD int tracing_child = (trace_who = "child") != 0; (void) tracing_child
|
||||
|
||||
extern void TraceEvent(const char *, XEvent *, String *, Cardinal *);
|
||||
#undef TRACE_EVENT
|
||||
|
|
707
app/xterm/util.c
707
app/xterm/util.c
File diff suppressed because it is too large
Load diff
|
@ -1,10 +1,10 @@
|
|||
#!/bin/sh
|
||||
# $XTermId: uxterm,v 1.29 2020/03/07 15:52:31 tom Exp $
|
||||
# $XTermId: uxterm,v 1.30 2023/05/03 23:47:34 tom Exp $
|
||||
# -----------------------------------------------------------------------------
|
||||
# this file is part of xterm
|
||||
#
|
||||
# Copyright 2001-2007,2020 by Thomas E. Dickey
|
||||
#
|
||||
# Copyright 2001-2020,2023 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
@ -83,7 +83,7 @@ done
|
|||
# user's shell does not reset unknown locale specifiers, but not all shells do.
|
||||
if test $found != yes ; then
|
||||
if test -n "$value" ; then
|
||||
value=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8
|
||||
value=`echo "${value}" |sed -e 's/[.@].*//'`.UTF-8
|
||||
else
|
||||
expect=
|
||||
for name in LC_ALL LC_CTYPE LANG
|
||||
|
@ -146,4 +146,4 @@ fi
|
|||
# for testing:
|
||||
#test -f ./xterm && XTERM_PROGRAM=./xterm
|
||||
|
||||
exec "$XTERM_PROGRAM" -class UXTerm -title "$whoami" -u8 "$@"
|
||||
exec "$XTERM_PROGRAM" -class UXTerm -u8 "$@"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.\" $XTermId: uxterm.man,v 1.8 2018/06/23 00:19:44 tom Exp $
|
||||
.\" $XTermId: uxterm.man,v 1.9 2024/01/11 22:10:29 tom Exp $
|
||||
.\"
|
||||
.\" Copyright 2007-2012, 2018 Thomas E. Dickey
|
||||
.\" Copyright 2007-2018,2024 Thomas E. Dickey
|
||||
.\" Copyright 2001, 2004 Branden Robinson
|
||||
.\"
|
||||
.\" Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
@ -23,17 +23,25 @@
|
|||
.\"
|
||||
.ds N Uxterm
|
||||
.ds n uxterm
|
||||
.\" Escape single quotes in literal strings from groff's Unicode transform.
|
||||
.ie \n(.g .ds AQ \(aq
|
||||
.el .ds AQ '
|
||||
.ie \n(.g .ds `` \(lq
|
||||
.el .ds `` ``
|
||||
.ie \n(.g .ds '' \(rq
|
||||
.el .ds '' ''
|
||||
.\"
|
||||
.TH UXTERM 1 "__app_date__" "__app_version__" "X Window System"
|
||||
.
|
||||
.ie \n(.g \{\
|
||||
.ds `` \(lq
|
||||
.ds '' \(rq
|
||||
.ds ' \(aq
|
||||
.\}
|
||||
.el \{\
|
||||
.ie t .ds `` ``
|
||||
.el .ds `` ""
|
||||
.ie t .ds '' ''
|
||||
.el .ds '' ""
|
||||
.ie t .ds ' \(aq
|
||||
.el .ds ' '
|
||||
.\}
|
||||
.
|
||||
.SH NAME
|
||||
uxterm \- X terminal emulator for Unicode (UTF-8) environments
|
||||
uxterm \-
|
||||
X terminal emulator for Unicode (UTF-8) environments
|
||||
.SH SYNOPSIS
|
||||
.B \*n
|
||||
[
|
||||
|
@ -94,7 +102,7 @@ is available for KOI8-R environments.
|
|||
.B LC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG
|
||||
The values of these variables are checked, in order, to determine the
|
||||
character set used by the current locale.
|
||||
.SH AUTHOR
|
||||
.SH AUTHORS
|
||||
Thomas Dickey
|
||||
.SH "SEE ALSO"
|
||||
.B locale(1),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: version.h,v 1.536 2023/01/09 10:29:58 tom Exp $ */
|
||||
/* $XTermId: version.h,v 1.565 2024/07/11 23:38:21 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1998-2022,2023 by Thomas E. Dickey
|
||||
* Copyright 1998-2023,2024 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 378
|
||||
#define XTERM_DATE 2023-01-09
|
||||
#define XTERM_PATCH 393
|
||||
#define XTERM_DATE 2024-07-11
|
||||
|
||||
#ifndef __vendorversion__
|
||||
#define __vendorversion__ "XTerm/SecBSD"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/usr/bin/env perl
|
||||
# $XTermId: vxt-insdelln,v 1.10 2022/10/10 17:05:38 tom Exp $
|
||||
# $XTermId: insdelln.pl,v 1.10 2022/10/10 17:05:38 tom Exp $
|
||||
# -----------------------------------------------------------------------------
|
||||
# this file is part of xterm
|
||||
#
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
/* $XTermId: wcwidth.c,v 1.61 2022/09/24 00:24:57 tom Exp $ */
|
||||
/* $XTermId: wcwidth.c,v 1.73 2024/07/06 00:45:04 tom Exp $ */
|
||||
|
||||
/* $XFree86: xc/programs/xterm/wcwidth.c,v 1.9 2006/06/19 00:36:52 dickey Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2002-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 2002-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -115,16 +115,23 @@
|
|||
*-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <xtermcfg.h>
|
||||
#endif
|
||||
|
||||
#ifdef TEST_DRIVER
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h> /* EXIT_SUCCESS, etc. */
|
||||
#include <unistd.h> /* getopt() */
|
||||
#include <string.h> /* strncmp() */
|
||||
#include <locale.h> /* setlocale() */
|
||||
#include <wchar.h> /* wcwidth() */
|
||||
#include <wctype.h> /* this module */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WCHAR_H
|
||||
#include <wchar.h> /* wcwidth() */
|
||||
#endif
|
||||
|
||||
#include <wcwidth.h>
|
||||
|
||||
struct interval {
|
||||
|
@ -223,7 +230,7 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x0890, 0x0891 }, { 0x08E2, 0x08E2 }, { 0x180E, 0x180E },
|
||||
{ 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 },
|
||||
{ 0x2066, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB },
|
||||
{ 0x110BD, 0x110BD }, { 0x110CD, 0x110CD }, { 0x13430, 0x13438 },
|
||||
{ 0x110BD, 0x110BD }, { 0x110CD, 0x110CD }, { 0x13430, 0x1343F },
|
||||
{ 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 },
|
||||
{ 0xE0020, 0xE007F }
|
||||
};
|
||||
|
@ -267,7 +274,7 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0D81, 0x0D81 },
|
||||
{ 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 },
|
||||
{ 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E },
|
||||
{ 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECD },
|
||||
{ 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECE },
|
||||
{ 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 },
|
||||
{ 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 },
|
||||
{ 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC },
|
||||
|
@ -311,44 +318,48 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 },
|
||||
{ 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A },
|
||||
{ 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x10D24, 0x10D27 },
|
||||
{ 0x10EAB, 0x10EAC }, { 0x10F46, 0x10F50 }, { 0x10F82, 0x10F85 },
|
||||
{ 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11070, 0x11070 },
|
||||
{ 0x11073, 0x11074 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 },
|
||||
{ 0x110B9, 0x110BA }, { 0x110C2, 0x110C2 }, { 0x11100, 0x11102 },
|
||||
{ 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 },
|
||||
{ 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111C9, 0x111CC },
|
||||
{ 0x111CF, 0x111CF }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 },
|
||||
{ 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF },
|
||||
{ 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133B, 0x1133C },
|
||||
{ 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 },
|
||||
{ 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 },
|
||||
{ 0x1145E, 0x1145E }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA },
|
||||
{ 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 },
|
||||
{ 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD },
|
||||
{ 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 },
|
||||
{ 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 },
|
||||
{ 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 },
|
||||
{ 0x11727, 0x1172B }, { 0x1182F, 0x11837 }, { 0x11839, 0x1183A },
|
||||
{ 0x1193B, 0x1193C }, { 0x1193E, 0x1193E }, { 0x11943, 0x11943 },
|
||||
{ 0x119D4, 0x119D7 }, { 0x119DA, 0x119DB }, { 0x119E0, 0x119E0 },
|
||||
{ 0x11A01, 0x11A0A }, { 0x11A33, 0x11A38 }, { 0x11A3B, 0x11A3E },
|
||||
{ 0x11A47, 0x11A47 }, { 0x11A51, 0x11A56 }, { 0x11A59, 0x11A5B },
|
||||
{ 0x11A8A, 0x11A96 }, { 0x11A98, 0x11A99 }, { 0x11C30, 0x11C36 },
|
||||
{ 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 },
|
||||
{ 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 },
|
||||
{ 0x11D31, 0x11D36 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D },
|
||||
{ 0x11D3F, 0x11D45 }, { 0x11D47, 0x11D47 }, { 0x11D90, 0x11D91 },
|
||||
{ 0x11D95, 0x11D95 }, { 0x11D97, 0x11D97 }, { 0x11EF3, 0x11EF4 },
|
||||
{ 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F },
|
||||
{ 0x16F8F, 0x16F92 }, { 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E },
|
||||
{ 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, { 0x1D167, 0x1D169 },
|
||||
{ 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD },
|
||||
{ 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C },
|
||||
{ 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F },
|
||||
{ 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 },
|
||||
{ 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A },
|
||||
{ 0x10EAB, 0x10EAC }, { 0x10EFD, 0x10EFF }, { 0x10F46, 0x10F50 },
|
||||
{ 0x10F82, 0x10F85 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 },
|
||||
{ 0x11070, 0x11070 }, { 0x11073, 0x11074 }, { 0x1107F, 0x11081 },
|
||||
{ 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110C2, 0x110C2 },
|
||||
{ 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 },
|
||||
{ 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE },
|
||||
{ 0x111C9, 0x111CC }, { 0x111CF, 0x111CF }, { 0x1122F, 0x11231 },
|
||||
{ 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E },
|
||||
{ 0x11241, 0x11241 }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA },
|
||||
{ 0x11300, 0x11301 }, { 0x1133B, 0x1133C }, { 0x11340, 0x11340 },
|
||||
{ 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F },
|
||||
{ 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x1145E, 0x1145E },
|
||||
{ 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 },
|
||||
{ 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD },
|
||||
{ 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A },
|
||||
{ 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB },
|
||||
{ 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 },
|
||||
{ 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B },
|
||||
{ 0x1182F, 0x11837 }, { 0x11839, 0x1183A }, { 0x1193B, 0x1193C },
|
||||
{ 0x1193E, 0x1193E }, { 0x11943, 0x11943 }, { 0x119D4, 0x119D7 },
|
||||
{ 0x119DA, 0x119DB }, { 0x119E0, 0x119E0 }, { 0x11A01, 0x11A0A },
|
||||
{ 0x11A33, 0x11A38 }, { 0x11A3B, 0x11A3E }, { 0x11A47, 0x11A47 },
|
||||
{ 0x11A51, 0x11A56 }, { 0x11A59, 0x11A5B }, { 0x11A8A, 0x11A96 },
|
||||
{ 0x11A98, 0x11A99 }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D },
|
||||
{ 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 },
|
||||
{ 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x11D31, 0x11D36 },
|
||||
{ 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, { 0x11D3F, 0x11D45 },
|
||||
{ 0x11D47, 0x11D47 }, { 0x11D90, 0x11D91 }, { 0x11D95, 0x11D95 },
|
||||
{ 0x11D97, 0x11D97 }, { 0x11EF3, 0x11EF4 }, { 0x11F00, 0x11F01 },
|
||||
{ 0x11F36, 0x11F3A }, { 0x11F40, 0x11F40 }, { 0x11F42, 0x11F42 },
|
||||
{ 0x13440, 0x13440 }, { 0x13447, 0x13455 }, { 0x16AF0, 0x16AF4 },
|
||||
{ 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F }, { 0x16F8F, 0x16F92 },
|
||||
{ 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E }, { 0x1CF00, 0x1CF2D },
|
||||
{ 0x1CF30, 0x1CF46 }, { 0x1D167, 0x1D169 }, { 0x1D17B, 0x1D182 },
|
||||
{ 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 },
|
||||
{ 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 },
|
||||
{ 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF },
|
||||
{ 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 },
|
||||
{ 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E08F, 0x1E08F },
|
||||
{ 0x1E130, 0x1E136 }, { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF },
|
||||
{ 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0100, 0xE01EF }
|
||||
{ 0x1E4EC, 0x1E4EF }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A },
|
||||
{ 0xE0100, 0xE01EF }
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
|
@ -399,7 +410,7 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB },
|
||||
{ 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 },
|
||||
{ 0x0CD7, 0x0CDC }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 },
|
||||
{ 0x0CF0, 0x0CF0 }, { 0x0CF3, 0x0CFF }, { 0x0D0D, 0x0D0D },
|
||||
{ 0x0CF0, 0x0CF0 }, { 0x0CF4, 0x0CFF }, { 0x0D0D, 0x0D0D },
|
||||
{ 0x0D11, 0x0D11 }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 },
|
||||
{ 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D80 },
|
||||
{ 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 },
|
||||
|
@ -409,7 +420,7 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x0E3B, 0x0E3E }, { 0x0E5C, 0x0E80 }, { 0x0E83, 0x0E83 },
|
||||
{ 0x0E85, 0x0E85 }, { 0x0E8B, 0x0E8B }, { 0x0EA4, 0x0EA4 },
|
||||
{ 0x0EA6, 0x0EA6 }, { 0x0EBE, 0x0EBF }, { 0x0EC5, 0x0EC5 },
|
||||
{ 0x0EC7, 0x0EC7 }, { 0x0ECE, 0x0ECF }, { 0x0EDA, 0x0EDB },
|
||||
{ 0x0EC7, 0x0EC7 }, { 0x0ECF, 0x0ECF }, { 0x0EDA, 0x0EDB },
|
||||
{ 0x0EE0, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 },
|
||||
{ 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD },
|
||||
{ 0x0FDB, 0x0FFF }, { 0x10C6, 0x10C6 }, { 0x10C8, 0x10CC },
|
||||
|
@ -449,117 +460,120 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF },
|
||||
{ 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E5E, 0x2E7F },
|
||||
{ 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF },
|
||||
{ 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 },
|
||||
{ 0x3100, 0x3104 }, { 0x3130, 0x3130 }, { 0x318F, 0x318F },
|
||||
{ 0x31E4, 0x31EF }, { 0x321F, 0x321F }, { 0x4DB6, 0x4DBF },
|
||||
{ 0x9FD6, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF },
|
||||
{ 0xA62C, 0xA63F }, { 0xA6F8, 0xA6FF }, { 0xA7CB, 0xA7CF },
|
||||
{ 0xA7D2, 0xA7D2 }, { 0xA7D4, 0xA7D4 }, { 0xA7DA, 0xA7F1 },
|
||||
{ 0xA82D, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F },
|
||||
{ 0xA8C6, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA954, 0xA95E },
|
||||
{ 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD },
|
||||
{ 0xA9FF, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F },
|
||||
{ 0xAA5A, 0xAA5B }, { 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 },
|
||||
{ 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F },
|
||||
{ 0xAB27, 0xAB27 }, { 0xAB2F, 0xAB2F }, { 0xAB6C, 0xAB6F },
|
||||
{ 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF },
|
||||
{ 0xD7C7, 0xD7CA }, { 0xD7FC, 0xDFFF }, { 0xFA6E, 0xFA6F },
|
||||
{ 0xFADA, 0xFAFF }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C },
|
||||
{ 0xFB37, 0xFB37 }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F },
|
||||
{ 0xFB42, 0xFB42 }, { 0xFB45, 0xFB45 }, { 0xFBC3, 0xFBD2 },
|
||||
{ 0xFD90, 0xFD91 }, { 0xFDC8, 0xFDCE }, { 0xFDD0, 0xFDEF },
|
||||
{ 0xFE1A, 0xFE1F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 },
|
||||
{ 0xFE6C, 0xFE6F }, { 0xFE75, 0xFE75 }, { 0xFEFD, 0xFEFE },
|
||||
{ 0xFF00, 0xFF00 }, { 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 },
|
||||
{ 0xFFD0, 0xFFD1 }, { 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF },
|
||||
{ 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFF8 }, { 0xFFFE, 0xFFFF },
|
||||
{ 0x1000C, 0x1000C }, { 0x10027, 0x10027 }, { 0x1003B, 0x1003B },
|
||||
{ 0x1003E, 0x1003E }, { 0x1004E, 0x1004F }, { 0x1005E, 0x1007F },
|
||||
{ 0x100FB, 0x100FF }, { 0x10103, 0x10106 }, { 0x10134, 0x10136 },
|
||||
{ 0x1018F, 0x1018F }, { 0x1019D, 0x1019F }, { 0x101A1, 0x101CF },
|
||||
{ 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102DF },
|
||||
{ 0x102FC, 0x102FF }, { 0x10324, 0x1032C }, { 0x1034B, 0x1034F },
|
||||
{ 0x1037B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 },
|
||||
{ 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x104AF },
|
||||
{ 0x104D4, 0x104D7 }, { 0x104FC, 0x104FF }, { 0x10528, 0x1052F },
|
||||
{ 0x10564, 0x1056E }, { 0x1057B, 0x1057B }, { 0x1058B, 0x1058B },
|
||||
{ 0x10593, 0x10593 }, { 0x10596, 0x10596 }, { 0x105A2, 0x105A2 },
|
||||
{ 0x105B2, 0x105B2 }, { 0x105BA, 0x105BA }, { 0x105BD, 0x105FF },
|
||||
{ 0x10737, 0x1073F }, { 0x10756, 0x1075F }, { 0x10768, 0x1077F },
|
||||
{ 0x10786, 0x10786 }, { 0x107B1, 0x107B1 }, { 0x107BB, 0x107FF },
|
||||
{ 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 },
|
||||
{ 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 },
|
||||
{ 0x1089F, 0x108A6 }, { 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 },
|
||||
{ 0x108F6, 0x108FA }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E },
|
||||
{ 0x10940, 0x1097F }, { 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 },
|
||||
{ 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 },
|
||||
{ 0x10A18, 0x10A18 }, { 0x10A36, 0x10A37 }, { 0x10A3B, 0x10A3E },
|
||||
{ 0x10A49, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF },
|
||||
{ 0x10AE7, 0x10AEA }, { 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 },
|
||||
{ 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 },
|
||||
{ 0x10B9D, 0x10BA8 }, { 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F },
|
||||
{ 0x10CB3, 0x10CBF }, { 0x10CF3, 0x10CF9 }, { 0x10D28, 0x10D2F },
|
||||
{ 0x10D3A, 0x10E5F }, { 0x10E7F, 0x10E7F }, { 0x10EAA, 0x10EAA },
|
||||
{ 0x10EAE, 0x10EAF }, { 0x10EB2, 0x10EFF }, { 0x10F28, 0x10F2F },
|
||||
{ 0x10F5A, 0x10F6F }, { 0x10F8A, 0x10FAF }, { 0x10FCC, 0x10FDF },
|
||||
{ 0x10FF7, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11076, 0x1107E },
|
||||
{ 0x110C3, 0x110CC }, { 0x110CE, 0x110CF }, { 0x110E9, 0x110EF },
|
||||
{ 0x110FA, 0x110FF }, { 0x11135, 0x11135 }, { 0x11148, 0x1114F },
|
||||
{ 0x11177, 0x1117F }, { 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF },
|
||||
{ 0x11212, 0x11212 }, { 0x1123F, 0x1127F }, { 0x11287, 0x11287 },
|
||||
{ 0x11289, 0x11289 }, { 0x1128E, 0x1128E }, { 0x1129E, 0x1129E },
|
||||
{ 0x112AA, 0x112AF }, { 0x112EB, 0x112EF }, { 0x112FA, 0x112FF },
|
||||
{ 0x11304, 0x11304 }, { 0x1130D, 0x1130E }, { 0x11311, 0x11312 },
|
||||
{ 0x11329, 0x11329 }, { 0x11331, 0x11331 }, { 0x11334, 0x11334 },
|
||||
{ 0x1133A, 0x1133A }, { 0x11345, 0x11346 }, { 0x11349, 0x1134A },
|
||||
{ 0x1134E, 0x1134F }, { 0x11351, 0x11356 }, { 0x11358, 0x1135C },
|
||||
{ 0x11364, 0x11365 }, { 0x1136D, 0x1136F }, { 0x11375, 0x113FF },
|
||||
{ 0x1145C, 0x1145C }, { 0x11462, 0x1147F }, { 0x114C8, 0x114CF },
|
||||
{ 0x114DA, 0x1157F }, { 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF },
|
||||
{ 0x11645, 0x1164F }, { 0x1165A, 0x1165F }, { 0x1166D, 0x1167F },
|
||||
{ 0x116BA, 0x116BF }, { 0x116CA, 0x116FF }, { 0x1171B, 0x1171C },
|
||||
{ 0x1172C, 0x1172F }, { 0x11747, 0x117FF }, { 0x1183C, 0x1189F },
|
||||
{ 0x118F3, 0x118FE }, { 0x11907, 0x11908 }, { 0x1190A, 0x1190B },
|
||||
{ 0x11914, 0x11914 }, { 0x11917, 0x11917 }, { 0x11936, 0x11936 },
|
||||
{ 0x11939, 0x1193A }, { 0x11947, 0x1194F }, { 0x1195A, 0x1199F },
|
||||
{ 0x119A8, 0x119A9 }, { 0x119D8, 0x119D9 }, { 0x119E5, 0x119FF },
|
||||
{ 0x11A48, 0x11A4F }, { 0x11AA3, 0x11AAF }, { 0x11AF9, 0x11BFF },
|
||||
{ 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 },
|
||||
{ 0x3130, 0x3130 }, { 0x318F, 0x318F }, { 0x31E4, 0x31EE },
|
||||
{ 0x321F, 0x321F }, { 0x4DB6, 0x4DBF }, { 0x9FD6, 0x9FFF },
|
||||
{ 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F },
|
||||
{ 0xA6F8, 0xA6FF }, { 0xA7CB, 0xA7CF }, { 0xA7D2, 0xA7D2 },
|
||||
{ 0xA7D4, 0xA7D4 }, { 0xA7DA, 0xA7F1 }, { 0xA82D, 0xA82F },
|
||||
{ 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C6, 0xA8CD },
|
||||
{ 0xA8DA, 0xA8DF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F },
|
||||
{ 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9FF, 0xA9FF },
|
||||
{ 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B },
|
||||
{ 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 }, { 0xAB07, 0xAB08 },
|
||||
{ 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 },
|
||||
{ 0xAB2F, 0xAB2F }, { 0xAB6C, 0xAB6F }, { 0xABEE, 0xABEF },
|
||||
{ 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA },
|
||||
{ 0xD7FC, 0xDFFF }, { 0xFA6E, 0xFA6F }, { 0xFADA, 0xFAFF },
|
||||
{ 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB37, 0xFB37 },
|
||||
{ 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, { 0xFB42, 0xFB42 },
|
||||
{ 0xFB45, 0xFB45 }, { 0xFBC3, 0xFBD2 }, { 0xFD90, 0xFD91 },
|
||||
{ 0xFDC8, 0xFDCE }, { 0xFDD0, 0xFDEF }, { 0xFE1A, 0xFE1F },
|
||||
{ 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFE6F },
|
||||
{ 0xFE75, 0xFE75 }, { 0xFEFD, 0xFEFE }, { 0xFF00, 0xFF00 },
|
||||
{ 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 }, { 0xFFD0, 0xFFD1 },
|
||||
{ 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF }, { 0xFFE7, 0xFFE7 },
|
||||
{ 0xFFEF, 0xFFF8 }, { 0xFFFE, 0xFFFF }, { 0x1000C, 0x1000C },
|
||||
{ 0x10027, 0x10027 }, { 0x1003B, 0x1003B }, { 0x1003E, 0x1003E },
|
||||
{ 0x1004E, 0x1004F }, { 0x1005E, 0x1007F }, { 0x100FB, 0x100FF },
|
||||
{ 0x10103, 0x10106 }, { 0x10134, 0x10136 }, { 0x1018F, 0x1018F },
|
||||
{ 0x1019D, 0x1019F }, { 0x101A1, 0x101CF }, { 0x101FE, 0x1027F },
|
||||
{ 0x1029D, 0x1029F }, { 0x102D1, 0x102DF }, { 0x102FC, 0x102FF },
|
||||
{ 0x10324, 0x1032C }, { 0x1034B, 0x1034F }, { 0x1037B, 0x1037F },
|
||||
{ 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF },
|
||||
{ 0x1049E, 0x1049F }, { 0x104AA, 0x104AF }, { 0x104D4, 0x104D7 },
|
||||
{ 0x104FC, 0x104FF }, { 0x10528, 0x1052F }, { 0x10564, 0x1056E },
|
||||
{ 0x1057B, 0x1057B }, { 0x1058B, 0x1058B }, { 0x10593, 0x10593 },
|
||||
{ 0x10596, 0x10596 }, { 0x105A2, 0x105A2 }, { 0x105B2, 0x105B2 },
|
||||
{ 0x105BA, 0x105BA }, { 0x105BD, 0x105FF }, { 0x10737, 0x1073F },
|
||||
{ 0x10756, 0x1075F }, { 0x10768, 0x1077F }, { 0x10786, 0x10786 },
|
||||
{ 0x107B1, 0x107B1 }, { 0x107BB, 0x107FF }, { 0x10806, 0x10807 },
|
||||
{ 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B },
|
||||
{ 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x1089F, 0x108A6 },
|
||||
{ 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 }, { 0x108F6, 0x108FA },
|
||||
{ 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x1097F },
|
||||
{ 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 }, { 0x10A04, 0x10A04 },
|
||||
{ 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 },
|
||||
{ 0x10A36, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A49, 0x10A4F },
|
||||
{ 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF }, { 0x10AE7, 0x10AEA },
|
||||
{ 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 },
|
||||
{ 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 }, { 0x10B9D, 0x10BA8 },
|
||||
{ 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F }, { 0x10CB3, 0x10CBF },
|
||||
{ 0x10CF3, 0x10CF9 }, { 0x10D28, 0x10D2F }, { 0x10D3A, 0x10E5F },
|
||||
{ 0x10E7F, 0x10E7F }, { 0x10EAA, 0x10EAA }, { 0x10EAE, 0x10EAF },
|
||||
{ 0x10EB2, 0x10EFC }, { 0x10F28, 0x10F2F }, { 0x10F5A, 0x10F6F },
|
||||
{ 0x10F8A, 0x10FAF }, { 0x10FCC, 0x10FDF }, { 0x10FF7, 0x10FFF },
|
||||
{ 0x1104E, 0x11051 }, { 0x11076, 0x1107E }, { 0x110C3, 0x110CC },
|
||||
{ 0x110CE, 0x110CF }, { 0x110E9, 0x110EF }, { 0x110FA, 0x110FF },
|
||||
{ 0x11135, 0x11135 }, { 0x11148, 0x1114F }, { 0x11177, 0x1117F },
|
||||
{ 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF }, { 0x11212, 0x11212 },
|
||||
{ 0x11242, 0x1127F }, { 0x11287, 0x11287 }, { 0x11289, 0x11289 },
|
||||
{ 0x1128E, 0x1128E }, { 0x1129E, 0x1129E }, { 0x112AA, 0x112AF },
|
||||
{ 0x112EB, 0x112EF }, { 0x112FA, 0x112FF }, { 0x11304, 0x11304 },
|
||||
{ 0x1130D, 0x1130E }, { 0x11311, 0x11312 }, { 0x11329, 0x11329 },
|
||||
{ 0x11331, 0x11331 }, { 0x11334, 0x11334 }, { 0x1133A, 0x1133A },
|
||||
{ 0x11345, 0x11346 }, { 0x11349, 0x1134A }, { 0x1134E, 0x1134F },
|
||||
{ 0x11351, 0x11356 }, { 0x11358, 0x1135C }, { 0x11364, 0x11365 },
|
||||
{ 0x1136D, 0x1136F }, { 0x11375, 0x113FF }, { 0x1145C, 0x1145C },
|
||||
{ 0x11462, 0x1147F }, { 0x114C8, 0x114CF }, { 0x114DA, 0x1157F },
|
||||
{ 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF }, { 0x11645, 0x1164F },
|
||||
{ 0x1165A, 0x1165F }, { 0x1166D, 0x1167F }, { 0x116BA, 0x116BF },
|
||||
{ 0x116CA, 0x116FF }, { 0x1171B, 0x1171C }, { 0x1172C, 0x1172F },
|
||||
{ 0x11747, 0x117FF }, { 0x1183C, 0x1189F }, { 0x118F3, 0x118FE },
|
||||
{ 0x11907, 0x11908 }, { 0x1190A, 0x1190B }, { 0x11914, 0x11914 },
|
||||
{ 0x11917, 0x11917 }, { 0x11936, 0x11936 }, { 0x11939, 0x1193A },
|
||||
{ 0x11947, 0x1194F }, { 0x1195A, 0x1199F }, { 0x119A8, 0x119A9 },
|
||||
{ 0x119D8, 0x119D9 }, { 0x119E5, 0x119FF }, { 0x11A48, 0x11A4F },
|
||||
{ 0x11AA3, 0x11AAF }, { 0x11AF9, 0x11AFF }, { 0x11B0A, 0x11BFF },
|
||||
{ 0x11C09, 0x11C09 }, { 0x11C37, 0x11C37 }, { 0x11C46, 0x11C4F },
|
||||
{ 0x11C6D, 0x11C6F }, { 0x11C90, 0x11C91 }, { 0x11CA8, 0x11CA8 },
|
||||
{ 0x11CB7, 0x11CFF }, { 0x11D07, 0x11D07 }, { 0x11D0A, 0x11D0A },
|
||||
{ 0x11D37, 0x11D39 }, { 0x11D3B, 0x11D3B }, { 0x11D3E, 0x11D3E },
|
||||
{ 0x11D48, 0x11D4F }, { 0x11D5A, 0x11D5F }, { 0x11D66, 0x11D66 },
|
||||
{ 0x11D69, 0x11D69 }, { 0x11D8F, 0x11D8F }, { 0x11D92, 0x11D92 },
|
||||
{ 0x11D99, 0x11D9F }, { 0x11DAA, 0x11EDF }, { 0x11EF9, 0x11FAF },
|
||||
{ 0x11D99, 0x11D9F }, { 0x11DAA, 0x11EDF }, { 0x11EF9, 0x11EFF },
|
||||
{ 0x11F11, 0x11F11 }, { 0x11F3B, 0x11F3D }, { 0x11F5A, 0x11FAF },
|
||||
{ 0x11FB1, 0x11FBF }, { 0x11FF2, 0x11FFE }, { 0x1239A, 0x123FF },
|
||||
{ 0x1246F, 0x1246F }, { 0x12475, 0x1247F }, { 0x12544, 0x12F8F },
|
||||
{ 0x12FF3, 0x12FFF }, { 0x1342F, 0x1342F }, { 0x13439, 0x143FF },
|
||||
{ 0x14647, 0x167FF }, { 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F },
|
||||
{ 0x16A6A, 0x16A6D }, { 0x16ABF, 0x16ABF }, { 0x16ACA, 0x16ACF },
|
||||
{ 0x16AEE, 0x16AEF }, { 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F },
|
||||
{ 0x16B5A, 0x16B5A }, { 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C },
|
||||
{ 0x16B90, 0x16E3F }, { 0x16E9B, 0x16EFF }, { 0x16F4B, 0x16F4E },
|
||||
{ 0x16F88, 0x16F8E }, { 0x16FA0, 0x16FDF }, { 0x16FE5, 0x16FEF },
|
||||
{ 0x16FF2, 0x187FF }, { 0x18CD6, 0x1AFEF }, { 0x1AFF4, 0x1AFF4 },
|
||||
{ 0x1AFFC, 0x1AFFC }, { 0x1AFFF, 0x1AFFF }, { 0x1B123, 0x1B14F },
|
||||
{ 0x1B153, 0x1B163 }, { 0x1B168, 0x1B16F }, { 0x1B2FC, 0x1BBFF },
|
||||
{ 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F }, { 0x1BC89, 0x1BC8F },
|
||||
{ 0x1BC9A, 0x1BC9B }, { 0x1BCA4, 0x1CEFF }, { 0x1CF2E, 0x1CF2F },
|
||||
{ 0x1CF47, 0x1CF4F }, { 0x1CFC4, 0x1CFFF }, { 0x1D0F6, 0x1D0FF },
|
||||
{ 0x1D127, 0x1D128 }, { 0x1D1EB, 0x1D1FF }, { 0x1D246, 0x1D2DF },
|
||||
{ 0x1D2F4, 0x1D2FF }, { 0x1D357, 0x1D35F }, { 0x1D379, 0x1D3FF },
|
||||
{ 0x1D455, 0x1D455 }, { 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 },
|
||||
{ 0x1D4A3, 0x1D4A4 }, { 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD },
|
||||
{ 0x1D4BA, 0x1D4BA }, { 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 },
|
||||
{ 0x1D506, 0x1D506 }, { 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 },
|
||||
{ 0x1D51D, 0x1D51D }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F },
|
||||
{ 0x1D545, 0x1D545 }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 },
|
||||
{ 0x1D6A6, 0x1D6A7 }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A },
|
||||
{ 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DEFF }, { 0x1DF1F, 0x1DFFF },
|
||||
{ 0x12FF3, 0x12FFF }, { 0x13456, 0x143FF }, { 0x14647, 0x167FF },
|
||||
{ 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F }, { 0x16A6A, 0x16A6D },
|
||||
{ 0x16ABF, 0x16ABF }, { 0x16ACA, 0x16ACF }, { 0x16AEE, 0x16AEF },
|
||||
{ 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F }, { 0x16B5A, 0x16B5A },
|
||||
{ 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C }, { 0x16B90, 0x16E3F },
|
||||
{ 0x16E9B, 0x16EFF }, { 0x16F4B, 0x16F4E }, { 0x16F88, 0x16F8E },
|
||||
{ 0x16FA0, 0x16FDF }, { 0x16FE5, 0x16FEF }, { 0x16FF2, 0x187FF },
|
||||
{ 0x18CD6, 0x1AFEF }, { 0x1AFF4, 0x1AFF4 }, { 0x1AFFC, 0x1AFFC },
|
||||
{ 0x1AFFF, 0x1AFFF }, { 0x1B123, 0x1B131 }, { 0x1B133, 0x1B14F },
|
||||
{ 0x1B153, 0x1B154 }, { 0x1B156, 0x1B163 }, { 0x1B168, 0x1B16F },
|
||||
{ 0x1B2FC, 0x1BBFF }, { 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F },
|
||||
{ 0x1BC89, 0x1BC8F }, { 0x1BC9A, 0x1BC9B }, { 0x1BCA4, 0x1CEFF },
|
||||
{ 0x1CF2E, 0x1CF2F }, { 0x1CF47, 0x1CF4F }, { 0x1CFC4, 0x1CFFF },
|
||||
{ 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D1EB, 0x1D1FF },
|
||||
{ 0x1D246, 0x1D2BF }, { 0x1D2D4, 0x1D2DF }, { 0x1D2F4, 0x1D2FF },
|
||||
{ 0x1D357, 0x1D35F }, { 0x1D379, 0x1D3FF }, { 0x1D455, 0x1D455 },
|
||||
{ 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 }, { 0x1D4A3, 0x1D4A4 },
|
||||
{ 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD }, { 0x1D4BA, 0x1D4BA },
|
||||
{ 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 }, { 0x1D506, 0x1D506 },
|
||||
{ 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 }, { 0x1D51D, 0x1D51D },
|
||||
{ 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D545, 0x1D545 },
|
||||
{ 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D6A6, 0x1D6A7 },
|
||||
{ 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, { 0x1DAA0, 0x1DAA0 },
|
||||
{ 0x1DAB0, 0x1DEFF }, { 0x1DF1F, 0x1DF24 }, { 0x1DF2B, 0x1DFFF },
|
||||
{ 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 },
|
||||
{ 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E0FF }, { 0x1E12D, 0x1E12F },
|
||||
{ 0x1E13E, 0x1E13F }, { 0x1E14A, 0x1E14D }, { 0x1E150, 0x1E28F },
|
||||
{ 0x1E2AF, 0x1E2BF }, { 0x1E2FA, 0x1E2FE }, { 0x1E300, 0x1E7DF },
|
||||
{ 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E02F }, { 0x1E06E, 0x1E08E },
|
||||
{ 0x1E090, 0x1E0FF }, { 0x1E12D, 0x1E12F }, { 0x1E13E, 0x1E13F },
|
||||
{ 0x1E14A, 0x1E14D }, { 0x1E150, 0x1E28F }, { 0x1E2AF, 0x1E2BF },
|
||||
{ 0x1E2FA, 0x1E2FE }, { 0x1E300, 0x1E4CF }, { 0x1E4FA, 0x1E7DF },
|
||||
{ 0x1E7E7, 0x1E7E7 }, { 0x1E7EC, 0x1E7EC }, { 0x1E7EF, 0x1E7EF },
|
||||
{ 0x1E7FF, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF },
|
||||
{ 0x1E94C, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EC70 },
|
||||
|
@ -579,17 +593,16 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF },
|
||||
{ 0x1F1AE, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23C, 0x1F23F },
|
||||
{ 0x1F249, 0x1F24F }, { 0x1F252, 0x1F25F }, { 0x1F266, 0x1F2FF },
|
||||
{ 0x1F6D8, 0x1F6DC }, { 0x1F6ED, 0x1F6EF }, { 0x1F6FD, 0x1F6FF },
|
||||
{ 0x1F774, 0x1F77F }, { 0x1F7D9, 0x1F7DF }, { 0x1F7EC, 0x1F7EF },
|
||||
{ 0x1F6D8, 0x1F6DB }, { 0x1F6ED, 0x1F6EF }, { 0x1F6FD, 0x1F6FF },
|
||||
{ 0x1F777, 0x1F77A }, { 0x1F7DA, 0x1F7DF }, { 0x1F7EC, 0x1F7EF },
|
||||
{ 0x1F7F1, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F },
|
||||
{ 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F8AF },
|
||||
{ 0x1F8B2, 0x1F8FF }, { 0x1FA54, 0x1FA5F }, { 0x1FA6E, 0x1FA6F },
|
||||
{ 0x1FA75, 0x1FA77 }, { 0x1FA7D, 0x1FA7F }, { 0x1FA87, 0x1FA8F },
|
||||
{ 0x1FAAD, 0x1FAAF }, { 0x1FABB, 0x1FABF }, { 0x1FAC6, 0x1FACF },
|
||||
{ 0x1FADA, 0x1FADF }, { 0x1FAE8, 0x1FAEF }, { 0x1FAF7, 0x1FAFF },
|
||||
{ 0x1FB93, 0x1FB93 }, { 0x1FBCB, 0x1FBEF }, { 0x1FBFA, 0x1FFFF },
|
||||
{ 0x2A6D7, 0x2F7FF }, { 0x2FA1E, 0xE0000 }, { 0xE0002, 0xE001F },
|
||||
{ 0xE0080, 0xE00FF }, { 0xE01F0, 0x10FFFD }
|
||||
{ 0x1FA7D, 0x1FA7F }, { 0x1FA89, 0x1FA8F }, { 0x1FABE, 0x1FABE },
|
||||
{ 0x1FAC6, 0x1FACD }, { 0x1FADC, 0x1FADF }, { 0x1FAE9, 0x1FAEF },
|
||||
{ 0x1FAF9, 0x1FAFF }, { 0x1FB93, 0x1FB93 }, { 0x1FBCB, 0x1FBEF },
|
||||
{ 0x1FBFA, 0x1FFFF }, { 0x2A6D7, 0x2F7FF }, { 0x2FA1E, 0xE0000 },
|
||||
{ 0xE0002, 0xE001F }, { 0xE0080, 0xE00FF }, { 0xE01F0, 0x10FFFD }
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
|
@ -612,35 +625,37 @@ int mk_wcwidth(wchar_t ucs)
|
|||
{ 0x2753, 0x2755 }, { 0x2757, 0x2757 }, { 0x2795, 0x2797 },
|
||||
{ 0x27B0, 0x27B0 }, { 0x27BF, 0x27BF }, { 0x2B1B, 0x2B1C },
|
||||
{ 0x2B50, 0x2B50 }, { 0x2B55, 0x2B55 }, { 0x2E80, 0x2E99 },
|
||||
{ 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB },
|
||||
{ 0x3000, 0x3029 }, { 0x302E, 0x303E }, { 0x3041, 0x3096 },
|
||||
{ 0x309B, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E },
|
||||
{ 0x3190, 0x31E3 }, { 0x31F0, 0x321E }, { 0x3220, 0x3247 },
|
||||
{ 0x3250, 0x4DBF }, { 0x4E00, 0xA48C }, { 0xA490, 0xA4C6 },
|
||||
{ 0xA960, 0xA97C }, { 0xAC00, 0xD7A3 }, { 0xF900, 0xFAFF },
|
||||
{ 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x3029 },
|
||||
{ 0x302E, 0x303E }, { 0x3041, 0x3096 }, { 0x309B, 0x30FF },
|
||||
{ 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 },
|
||||
{ 0x31EF, 0x321E }, { 0x3220, 0x3247 }, { 0x3250, 0x4DBF },
|
||||
{ 0x4E00, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA960, 0xA97C },
|
||||
{ 0xAC00, 0xD7A3 }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 },
|
||||
{ 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE66 },
|
||||
{ 0xFE68, 0xFE6B }, { 0xFF01, 0xFF60 }, { 0xFFE0, 0xFFE6 },
|
||||
{ 0x16FE0, 0x16FE3 }, { 0x16FF0, 0x16FF1 }, { 0x17000, 0x187F7 },
|
||||
{ 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 },
|
||||
{ 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 },
|
||||
{ 0x1B150, 0x1B152 }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB },
|
||||
{ 0x1F004, 0x1F004 }, { 0x1F0CF, 0x1F0CF }, { 0x1F18E, 0x1F18E },
|
||||
{ 0x1F191, 0x1F19A }, { 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23B },
|
||||
{ 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 },
|
||||
{ 0x1F300, 0x1F320 }, { 0x1F32D, 0x1F335 }, { 0x1F337, 0x1F37C },
|
||||
{ 0x1F37E, 0x1F393 }, { 0x1F3A0, 0x1F3CA }, { 0x1F3CF, 0x1F3D3 },
|
||||
{ 0x1F3E0, 0x1F3F0 }, { 0x1F3F4, 0x1F3F4 }, { 0x1F3F8, 0x1F43E },
|
||||
{ 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4FC }, { 0x1F4FF, 0x1F53D },
|
||||
{ 0x1F54B, 0x1F54E }, { 0x1F550, 0x1F567 }, { 0x1F57A, 0x1F57A },
|
||||
{ 0x1F595, 0x1F596 }, { 0x1F5A4, 0x1F5A4 }, { 0x1F5FB, 0x1F64F },
|
||||
{ 0x1F680, 0x1F6C5 }, { 0x1F6CC, 0x1F6CC }, { 0x1F6D0, 0x1F6D2 },
|
||||
{ 0x1F6D5, 0x1F6D7 }, { 0x1F6DD, 0x1F6DF }, { 0x1F6EB, 0x1F6EC },
|
||||
{ 0x1F6F4, 0x1F6FC }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 },
|
||||
{ 0x1F90C, 0x1F93A }, { 0x1F93C, 0x1F945 }, { 0x1F947, 0x1F9FF },
|
||||
{ 0x1FA70, 0x1FA74 }, { 0x1FA78, 0x1FA7C }, { 0x1FA80, 0x1FA86 },
|
||||
{ 0x1FA90, 0x1FAAC }, { 0x1FAB0, 0x1FABA }, { 0x1FAC0, 0x1FAC5 },
|
||||
{ 0x1FAD0, 0x1FAD9 }, { 0x1FAE0, 0x1FAE7 }, { 0x1FAF0, 0x1FAF6 },
|
||||
{ 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD }
|
||||
{ 0x1B132, 0x1B132 }, { 0x1B150, 0x1B152 }, { 0x1B155, 0x1B155 },
|
||||
{ 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1F004, 0x1F004 },
|
||||
{ 0x1F0CF, 0x1F0CF }, { 0x1F18E, 0x1F18E }, { 0x1F191, 0x1F19A },
|
||||
{ 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 },
|
||||
{ 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 }, { 0x1F300, 0x1F320 },
|
||||
{ 0x1F32D, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F37E, 0x1F393 },
|
||||
{ 0x1F3A0, 0x1F3CA }, { 0x1F3CF, 0x1F3D3 }, { 0x1F3E0, 0x1F3F0 },
|
||||
{ 0x1F3F4, 0x1F3F4 }, { 0x1F3F8, 0x1F43E }, { 0x1F440, 0x1F440 },
|
||||
{ 0x1F442, 0x1F4FC }, { 0x1F4FF, 0x1F53D }, { 0x1F54B, 0x1F54E },
|
||||
{ 0x1F550, 0x1F567 }, { 0x1F57A, 0x1F57A }, { 0x1F595, 0x1F596 },
|
||||
{ 0x1F5A4, 0x1F5A4 }, { 0x1F5FB, 0x1F64F }, { 0x1F680, 0x1F6C5 },
|
||||
{ 0x1F6CC, 0x1F6CC }, { 0x1F6D0, 0x1F6D2 }, { 0x1F6D5, 0x1F6D7 },
|
||||
{ 0x1F6DC, 0x1F6DF }, { 0x1F6EB, 0x1F6EC }, { 0x1F6F4, 0x1F6FC },
|
||||
{ 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F90C, 0x1F93A },
|
||||
{ 0x1F93C, 0x1F945 }, { 0x1F947, 0x1F9FF }, { 0x1FA70, 0x1FA7C },
|
||||
{ 0x1FA80, 0x1FA88 }, { 0x1FA90, 0x1FABD }, { 0x1FABF, 0x1FAC5 },
|
||||
{ 0x1FACE, 0x1FADB }, { 0x1FAE0, 0x1FAE8 }, { 0x1FAF0, 0x1FAF8 },
|
||||
{ 0x20000, 0x2A6DF }, { 0x2A700, 0x2B739 }, { 0x2B740, 0x2B81D },
|
||||
{ 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, { 0x2EBF0, 0x2EE5D },
|
||||
{ 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
|
@ -659,7 +674,7 @@ int mk_wcwidth(wchar_t ucs)
|
|||
result = use_latin1;
|
||||
} else if (Lookup(cmp, formatting)) {
|
||||
/* treat formatting characters like control characters */
|
||||
result = -1;
|
||||
result = 0;
|
||||
} else if (Lookup(cmp, combining)) {
|
||||
/* binary search in table of non-spacing characters */
|
||||
result = 0;
|
||||
|
@ -669,6 +684,12 @@ int mk_wcwidth(wchar_t ucs)
|
|||
|
||||
if (Lookup(cmp, doublewidth)) {
|
||||
result = 2;
|
||||
} else if (cmp >= 0xd800 && cmp <= 0xdfff) {
|
||||
#ifdef HAVE_WCWIDTH
|
||||
result = (wcwidth)(ucs);
|
||||
#else
|
||||
result = -1;
|
||||
#endif
|
||||
} else if (cmp >= unknowns[0].first && Lookup(cmp, unknowns)) {
|
||||
result = -1;
|
||||
}
|
||||
|
@ -868,8 +889,9 @@ static void do_range(const char *source)
|
|||
int lo, hi;
|
||||
if (decode_range(source, &lo, &hi)) {
|
||||
while (lo <= hi) {
|
||||
int local_rc = opt_wider ? mk_wcwidth_cjk(lo) : mk_wcwidth(lo);
|
||||
int other_rc = wcwidth(lo);
|
||||
wchar_t wlo = (wchar_t) lo;
|
||||
int local_rc = opt_wider ? mk_wcwidth_cjk(wlo) : mk_wcwidth(wlo);
|
||||
int other_rc = wcwidth(wlo);
|
||||
++total_test;
|
||||
if (opt_all || (local_rc != other_rc)) {
|
||||
if (!opt_quiet)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: xstrings.c,v 1.79 2022/11/16 23:54:32 tom Exp $ */
|
||||
/* $XTermId: xstrings.c,v 1.80 2023/05/09 08:13:56 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2000-2020,2022 by Thomas E. Dickey
|
||||
* Copyright 2000-2022,2023 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -163,9 +163,8 @@ login_alias(char *login_name, uid_t uid, struct passwd *in_out)
|
|||
if (!IsEmpty(login_name)
|
||||
&& strcmp(login_name, in_out->pw_name)) {
|
||||
struct passwd pw2;
|
||||
Boolean ok2;
|
||||
|
||||
if ((ok2 = x_getpwnam(login_name, &pw2))) {
|
||||
if (x_getpwnam(login_name, &pw2)) {
|
||||
uid_t uid2 = pw2.pw_uid;
|
||||
struct passwd pw3;
|
||||
Boolean ok3;
|
||||
|
@ -177,8 +176,7 @@ login_alias(char *login_name, uid_t uid, struct passwd *in_out)
|
|||
} else {
|
||||
FreeAndNull(login_name);
|
||||
}
|
||||
if (ok2)
|
||||
free_pw(&pw2);
|
||||
free_pw(&pw2);
|
||||
if (ok3)
|
||||
free_pw(&pw3);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2014-2022,2023 Thomas Dickey <dickey@invisible-island.net> -->
|
||||
<!-- Copyright 2014-2023,2024 Thomas Dickey <dickey@invisible-island.net> -->
|
||||
<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="378" date="2023-01-09"/>
|
||||
<release version="393" date="2024-07-11"/>
|
||||
</releases>
|
||||
<url type="homepage">https://invisible-island.net/xterm/</url>
|
||||
<update_contact>dickey@invisible-island.net</update_contact>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: xterm.h,v 1.922 2023/01/04 09:21:42 tom Exp $ */
|
||||
/* $XTermId: xterm.h,v 1.948 2024/06/26 07:45:55 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1999-2022,2023 by Thomas E. Dickey
|
||||
* Copyright 1999-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -135,15 +135,15 @@
|
|||
#define HAVE_UTMP_UT_SESSION 1
|
||||
#endif
|
||||
|
||||
#if !(defined(linux) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4) && !defined(__FreeBSD__)
|
||||
#if !(defined(__linux__) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4) && !defined(__FreeBSD__)
|
||||
#define ut_xstatus ut_exit.e_exit
|
||||
#endif
|
||||
|
||||
#if defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)))
|
||||
#if defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX) || (defined(__linux__) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)))
|
||||
#define HAVE_UTMP_UT_XTIME 1
|
||||
#endif
|
||||
|
||||
#if defined(linux) || defined(__CYGWIN__)
|
||||
#if defined(__linux__) || defined(__CYGWIN__)
|
||||
#define USE_LASTLOG
|
||||
#define HAVE_LASTLOG_H
|
||||
#define USE_STRUCT_LASTLOG
|
||||
|
@ -170,11 +170,11 @@
|
|||
#define OPT_SCO_FUNC_KEYS 1
|
||||
#endif
|
||||
|
||||
#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE) || defined(__QNX__) || defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(__CYGWIN__)
|
||||
#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_VERSION) || defined(__QNX__) || defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(__CYGWIN__)
|
||||
#define USE_POSIX_WAIT
|
||||
#endif
|
||||
|
||||
#if defined(AIXV3) || defined(CRAY) || defined(__SCO__) || defined(SVR4) || (defined(SYSV) && defined(i386)) || defined(__MVS__) || defined(__hpux) || defined(__osf__) || defined(linux) || defined(macII) || defined(BSD_UTMPX)
|
||||
#if defined(AIXV3) || defined(CRAY) || defined(__SCO__) || defined(SVR4) || (defined(SYSV) && defined(i386)) || defined(__MVS__) || defined(__hpux) || defined(__osf__) || defined(__linux__) || defined(macII) || defined(BSD_UTMPX)
|
||||
#define USE_SYSV_UTMP
|
||||
#endif
|
||||
|
||||
|
@ -205,14 +205,28 @@
|
|||
#define HAVE_XKB_BELL_EXT 1
|
||||
#endif
|
||||
|
||||
#if (defined(SVR4) && !defined(__CYGWIN__)) || defined(linux) || (defined(BSD) && (BSD >= 199103))
|
||||
#if (defined(SVR4) && !defined(__CYGWIN__)) || defined(__linux__) || (defined(BSD) && (BSD >= 199103))
|
||||
#define HAVE_POSIX_SAVED_IDS
|
||||
#endif
|
||||
|
||||
#if defined(linux) || defined(__GLIBC__) || (defined(SYSV) && (defined(CRAY) || defined(macII) || defined(__hpux) || defined(__osf__) || defined(__sgi))) || !(defined(SYSV) || defined(__QNX__) || defined(VMS) || defined(__INTERIX))
|
||||
#if defined(__linux__) || defined(__GLIBC__) || (defined(SYSV) && (defined(CRAY) || defined(macII) || defined(__hpux) || defined(__osf__) || defined(__sgi))) || !(defined(SYSV) || defined(__QNX__) || defined(VMS) || defined(__INTERIX))
|
||||
#define HAVE_INITGROUPS
|
||||
#endif
|
||||
|
||||
#if defined(__linux__)
|
||||
#define HAVE_PTY_H
|
||||
#endif
|
||||
|
||||
#if !defined(USG) && !defined(__minix)
|
||||
#define HAVE_SETITIMER 1
|
||||
#else
|
||||
#define HAVE_SETITIMER 0
|
||||
#endif
|
||||
|
||||
#if defined(_POSIX_VERSION) || defined(SVR4) || defined(__convex__) || defined(__SCO__) || defined(__QNX__)
|
||||
#define HAVE_SETSID 1
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
#ifndef HAVE_X11_DECKEYSYM_H
|
||||
|
@ -283,7 +297,7 @@ extern int errno;
|
|||
* FIXME: Toggling logging from xterm hangs under Linux 2.0.29 with libc5 if
|
||||
* we use 'waitpid()', while 'wait()' seems to work properly.
|
||||
*/
|
||||
#ifdef linux
|
||||
#ifdef __linux__
|
||||
#undef HAVE_WAITPID
|
||||
#endif
|
||||
|
||||
|
@ -386,7 +400,7 @@ extern int errno;
|
|||
|
||||
#include <setjmp.h>
|
||||
|
||||
#if !defined(VMS) && !(defined(linux) && defined(__USE_GNU)) && !defined(__hpux) && !defined(_ALL_SOURCE) && !defined(__osf__)
|
||||
#if !defined(VMS) && !(defined(__linux__) && defined(__USE_GNU)) && !defined(__hpux) && !defined(_ALL_SOURCE) && !defined(__osf__)
|
||||
extern char **environ;
|
||||
#endif
|
||||
|
||||
|
@ -434,6 +448,7 @@ extern char **environ;
|
|||
|
||||
/***====================================================================***/
|
||||
|
||||
#define XtNactiveIcon "activeIcon"
|
||||
#define XtNallowBoldFonts "allowBoldFonts"
|
||||
#define XtNallowC1Printable "allowC1Printable"
|
||||
#define XtNallowColorOps "allowColorOps"
|
||||
|
@ -455,10 +470,11 @@ extern char **environ;
|
|||
#define XtNappcursorDefault "appcursorDefault"
|
||||
#define XtNappkeypadDefault "appkeypadDefault"
|
||||
#define XtNassumeAllChars "assumeAllChars"
|
||||
#define XtNautoWrap "autoWrap"
|
||||
#define XtNautoScrollLock "autoScrollLock"
|
||||
#define XtNautoWrap "autoWrap"
|
||||
#define XtNawaitInput "awaitInput"
|
||||
#define XtNbackarrowKey "backarrowKey"
|
||||
#define XtNbackarrowKeyIsErase "backarrowKeyIsErase"
|
||||
#define XtNbellIsUrgent "bellIsUrgent"
|
||||
#define XtNbellOnReset "bellOnReset"
|
||||
#define XtNbellSuppressTime "bellSuppressTime"
|
||||
|
@ -487,11 +503,13 @@ extern char **environ;
|
|||
#define XtNcombiningChars "combiningChars"
|
||||
#define XtNctrlFKeys "ctrlFKeys"
|
||||
#define XtNcurses "curses"
|
||||
#define XtNcursorBar "cursorBar"
|
||||
#define XtNcursorBlink "cursorBlink"
|
||||
#define XtNcursorBlinkXOR "cursorBlinkXOR"
|
||||
#define XtNcursorColor "cursorColor"
|
||||
#define XtNcursorOffTime "cursorOffTime"
|
||||
#define XtNcursorOnTime "cursorOnTime"
|
||||
#define XtNcursorTheme "cursorTheme"
|
||||
#define XtNcursorUnderLine "cursorUnderLine"
|
||||
#define XtNcutNewline "cutNewline"
|
||||
#define XtNcutToBeginningOfLine "cutToBeginningOfLine"
|
||||
|
@ -538,9 +556,16 @@ extern char **environ;
|
|||
#define XtNhighlightReverse "highlightReverse"
|
||||
#define XtNhighlightSelection "highlightSelection"
|
||||
#define XtNhighlightTextColor "highlightTextColor"
|
||||
#define XtNhold "hold"
|
||||
#define XtNhpFunctionKeys "hpFunctionKeys"
|
||||
#define XtNhpLowerleftBugCompat "hpLowerleftBugCompat"
|
||||
#define XtNi18nSelections "i18nSelections"
|
||||
#define XtNiconBorderColor "iconBorderColor"
|
||||
#define XtNiconBorderWidth "iconBorderWidth"
|
||||
#define XtNiconFont "iconFont"
|
||||
#define XtNiconGeometry "iconGeometry"
|
||||
#define XtNiconHint "iconHint"
|
||||
#define XtNincrementalGraphics "incrementalGraphics"
|
||||
#define XtNindicatorFormat "indicatorFormat"
|
||||
#define XtNinitialFont "initialFont"
|
||||
#define XtNinternalBorder "internalBorder"
|
||||
|
@ -549,8 +574,10 @@ extern char **environ;
|
|||
#define XtNkeepClipboard "keepClipboard"
|
||||
#define XtNkeepSelection "keepSelection"
|
||||
#define XtNkeyboardDialect "keyboardDialect"
|
||||
#define XtNlimitFontsets "limitFontsets"
|
||||
#define XtNkeyboardType "keyboardType"
|
||||
#define XtNlimitFontHeight "limitFontHeight"
|
||||
#define XtNlimitFontWidth "limitFontWidth"
|
||||
#define XtNlimitFontsets "limitFontsets"
|
||||
#define XtNlimitResize "limitResize"
|
||||
#define XtNlimitResponse "limitResponse"
|
||||
#define XtNlocale "locale"
|
||||
|
@ -560,11 +587,16 @@ extern char **environ;
|
|||
#define XtNlogging "logging"
|
||||
#define XtNloginShell "loginShell"
|
||||
#define XtNmarginBell "marginBell"
|
||||
#define XtNmaxBufSize "maxBufSize"
|
||||
#define XtNmaxGraphicSize "maxGraphicSize"
|
||||
#define XtNmaxStringParse "maxStringParse"
|
||||
#define XtNmaximized "maximized"
|
||||
#define XtNmenuBar "menuBar" /* internal */
|
||||
#define XtNmenuHeight "menuHeight"
|
||||
#define XtNmenuLocale "menuLocale"
|
||||
#define XtNmessages "messages"
|
||||
#define XtNmetaSendsEscape "metaSendsEscape"
|
||||
#define XtNminBufSize "minBufSize"
|
||||
#define XtNmkSamplePass "mkSamplePass"
|
||||
#define XtNmkSampleSize "mkSampleSize"
|
||||
#define XtNmkWidth "mkWidth"
|
||||
|
@ -581,6 +613,7 @@ extern char **environ;
|
|||
#define XtNnumColorRegisters "numColorRegisters"
|
||||
#define XtNnumLock "numLock"
|
||||
#define XtNoldXtermFKeys "oldXtermFKeys"
|
||||
#define XtNomitTranslation "omitTranslation"
|
||||
#define XtNpointerColor "pointerColor"
|
||||
#define XtNpointerColorBackground "pointerColorBackground"
|
||||
#define XtNpointerFont "pointerFont"
|
||||
|
@ -588,7 +621,14 @@ extern char **environ;
|
|||
#define XtNpointerShape "pointerShape"
|
||||
#define XtNpopOnBell "popOnBell"
|
||||
#define XtNprecompose "precompose"
|
||||
#define XtNpreferLatin1 "preferLatin1"
|
||||
#define XtNprintAttributes "printAttributes"
|
||||
#define XtNprintFileImmediate "printFileImmediate"
|
||||
#define XtNprintFileOnXError "printFileOnXError"
|
||||
#define XtNprintModeImmediate "printModeImmediate"
|
||||
#define XtNprintModeOnXError "printModeOnXError"
|
||||
#define XtNprintOptsImmediate "printOptsImmediate"
|
||||
#define XtNprintOptsOnXError "printOptsOnXError"
|
||||
#define XtNprinterAutoClose "printerAutoClose"
|
||||
#define XtNprinterCommand "printerCommand"
|
||||
#define XtNprinterControlMode "printerControlMode"
|
||||
|
@ -596,23 +636,34 @@ extern char **environ;
|
|||
#define XtNprinterFormFeed "printerFormFeed"
|
||||
#define XtNprinterNewLine "printerNewLine"
|
||||
#define XtNprivateColorRegisters "privateColorRegisters"
|
||||
#define XtNptyHandshake "ptyHandshake"
|
||||
#define XtNptyInitialErase "ptyInitialErase"
|
||||
#define XtNptySttySize "ptySttySize"
|
||||
#define XtNquietGrab "quietGrab"
|
||||
#define XtNregisDefaultFont "regisDefaultFont"
|
||||
#define XtNregisScreenSize "regisScreenSize"
|
||||
#define XtNrenderFont "renderFont"
|
||||
#define XtNreportCClass "reportCClass"
|
||||
#define XtNreportColors "reportColors"
|
||||
#define XtNreportFonts "reportFonts"
|
||||
#define XtNreportIcons "reportIcons"
|
||||
#define XtNreportXRes "reportXRes"
|
||||
#define XtNresizeByPixel "resizeByPixel"
|
||||
#define XtNresizeGravity "resizeGravity"
|
||||
#define XtNretryInputMethod "retryInputMethod"
|
||||
#define XtNreverseWrap "reverseWrap"
|
||||
#define XtNrightScrollBar "rightScrollBar"
|
||||
#define XtNsameName "sameName"
|
||||
#define XtNsaveLines "saveLines"
|
||||
#define XtNscaleHeight "scaleHeight"
|
||||
#define XtNscoFunctionKeys "scoFunctionKeys"
|
||||
#define XtNscrollBar "scrollBar"
|
||||
#define XtNscrollBarBorder "scrollBarBorder"
|
||||
#define XtNscrollKey "scrollKey"
|
||||
#define XtNscrollLines "scrollLines"
|
||||
#define XtNscrollTtyOutput "scrollTtyOutput"
|
||||
#define XtNselectToClipboard "selectToClipboard"
|
||||
#define XtNsessionMgt "sessionMgt"
|
||||
#define XtNshiftEscape "shiftEscape"
|
||||
#define XtNshiftFonts "shiftFonts"
|
||||
#define XtNshowBlinkAsBold "showBlinkAsBold"
|
||||
|
@ -621,29 +672,39 @@ extern char **environ;
|
|||
#define XtNsignalInhibit "signalInhibit"
|
||||
#define XtNsixelScrolling "sixelScrolling"
|
||||
#define XtNsixelScrollsRight "sixelScrollsRight"
|
||||
#define XtNsunFunctionKeys "sunFunctionKeys"
|
||||
#define XtNsunKeyboard "sunKeyboard"
|
||||
#define XtNtcapFunctionKeys "tcapFunctionKeys"
|
||||
#define XtNtekGeometry "tekGeometry"
|
||||
#define XtNtekInhibit "tekInhibit"
|
||||
#define XtNtekSmall "tekSmall"
|
||||
#define XtNtekStartup "tekStartup"
|
||||
#define XtNtermName "termName"
|
||||
#define XtNtiXtraScroll "tiXtraScroll"
|
||||
#define XtNtiteInhibit "titeInhibit"
|
||||
#define XtNtitleModes "titleModes"
|
||||
#define XtNtoolBar "toolBar"
|
||||
#define XtNtrimSelection "trimSelection"
|
||||
#define XtNttyModes "ttyModes"
|
||||
#define XtNunderLine "underLine"
|
||||
#define XtNuseBorderClipping "useBorderClipping"
|
||||
#define XtNuseClipping "useClipping"
|
||||
#define XtNuseInsertMode "useInsertMode"
|
||||
#define XtNutf8 "utf8"
|
||||
#define XtNutf8Fonts "utf8Fonts"
|
||||
#define XtNutf8Latin1 "utf8Latin1"
|
||||
#define XtNutf8SelectTypes "utf8SelectTypes"
|
||||
#define XtNutf8Title "utf8Title"
|
||||
#define XtNutf8Weblike "utf8Weblike"
|
||||
#define XtNutmpDisplayId "utmpDisplayId"
|
||||
#define XtNutmpInhibit "utmpInhibit"
|
||||
#define XtNvalidShells "validShells"
|
||||
#define XtNveryBoldColors "veryBoldColors"
|
||||
#define XtNvisualBell "visualBell"
|
||||
#define XtNvisualBellDelay "visualBellDelay"
|
||||
#define XtNvisualBellLine "visualBellLine"
|
||||
#define XtNvt100Graphics "vt100Graphics"
|
||||
#define XtNwaitForMap "waitForMap"
|
||||
#define XtNwideBoldFont "wideBoldFont"
|
||||
#define XtNwideChars "wideChars"
|
||||
#define XtNwideFont "wideFont"
|
||||
|
@ -655,7 +716,10 @@ extern char **environ;
|
|||
#define XtNxmcGlitch "xmcGlitch" /* ncurses-testing */
|
||||
#define XtNxmcInline "xmcInline" /* ncurses-testing */
|
||||
#define XtNxmcMoveSGR "xmcMoveSGR" /* ncurses-testing */
|
||||
#define XtNzIconBeep "zIconBeep"
|
||||
#define XtNzIconTitleFormat "zIconTitleFormat"
|
||||
|
||||
#define XtCActiveIcon "ActiveIcon"
|
||||
#define XtCAllowBoldFonts "AllowBoldFonts"
|
||||
#define XtCAllowC1Printable "AllowC1Printable"
|
||||
#define XtCAllowColorOps "AllowColorOps"
|
||||
|
@ -676,10 +740,11 @@ extern char **environ;
|
|||
#define XtCAppcursorDefault "AppcursorDefault"
|
||||
#define XtCAppkeypadDefault "AppkeypadDefault"
|
||||
#define XtCAssumeAllChars "AssumeAllChars"
|
||||
#define XtCAutoWrap "AutoWrap"
|
||||
#define XtCAutoScrollLock "AutoScrollLock"
|
||||
#define XtCAutoWrap "AutoWrap"
|
||||
#define XtCAwaitInput "AwaitInput"
|
||||
#define XtCBackarrowKey "BackarrowKey"
|
||||
#define XtCBackarrowKeyIsErase "BackarrowKeyIsErase"
|
||||
#define XtCBellIsUrgent "BellIsUrgent"
|
||||
#define XtCBellOnReset "BellOnReset"
|
||||
#define XtCBellSuppressTime "BellSuppressTime"
|
||||
|
@ -703,10 +768,12 @@ extern char **environ;
|
|||
#define XtCCombiningChars "CombiningChars"
|
||||
#define XtCCtrlFKeys "CtrlFKeys"
|
||||
#define XtCCurses "Curses"
|
||||
#define XtCCursorBar "CursorBar"
|
||||
#define XtCCursorBlink "CursorBlink"
|
||||
#define XtCCursorBlinkXOR "CursorBlinkXOR"
|
||||
#define XtCCursorOffTime "CursorOffTime"
|
||||
#define XtCCursorOnTime "CursorOnTime"
|
||||
#define XtCCursorTheme "CursorTheme"
|
||||
#define XtCCursorUnderLine "CursorUnderLine"
|
||||
#define XtCCutNewline "CutNewline"
|
||||
#define XtCCutToBeginningOfLine "CutToBeginningOfLine"
|
||||
|
@ -751,17 +818,25 @@ extern char **environ;
|
|||
#define XtCHighlightColorMode "HighlightColorMode"
|
||||
#define XtCHighlightReverse "HighlightReverse"
|
||||
#define XtCHighlightSelection "HighlightSelection"
|
||||
#define XtCHold "Hold"
|
||||
#define XtCHpFunctionKeys "HpFunctionKeys"
|
||||
#define XtCHpLowerleftBugCompat "HpLowerleftBugCompat"
|
||||
#define XtCI18nSelections "I18nSelections"
|
||||
#define XtCIconFont "IconFont"
|
||||
#define XtCIconGeometry "IconGeometry"
|
||||
#define XtCIconHint "IconHint"
|
||||
#define XtCIncrementalGraphics "IncrementalGraphics"
|
||||
#define XtCIndicatorFormat "IndicatorFormat"
|
||||
#define XtCInitialFont "InitialFont"
|
||||
#define XtCInternalBorder "InternalBorder"
|
||||
#define XtCJumpScroll "JumpScroll"
|
||||
#define XtCKeepClipboard "KeepClipboard"
|
||||
#define XtCKeepSelection "KeepSelection"
|
||||
#define XtCKeyboardDialect "KeyboardDialect"
|
||||
#define XtCLimitFontsets "LimitFontsets"
|
||||
#define XtCKeyboardType "KeyboardType"
|
||||
#define XtCLimitFontHeight "LimitFontHeight"
|
||||
#define XtCLimitFontWidth "LimitFontWidth"
|
||||
#define XtCLimitFontsets "LimitFontsets"
|
||||
#define XtCLimitResize "LimitResize"
|
||||
#define XtCLimitResponse "LimitResponse"
|
||||
#define XtCLocale "Locale"
|
||||
|
@ -771,11 +846,16 @@ extern char **environ;
|
|||
#define XtCLogging "Logging"
|
||||
#define XtCLoginShell "LoginShell"
|
||||
#define XtCMarginBell "MarginBell"
|
||||
#define XtCMaxBufSize "MaxBufSize"
|
||||
#define XtCMaxGraphicSize "MaxGraphicSize"
|
||||
#define XtCMaxStringParse "MaxStringParse"
|
||||
#define XtCMaximized "Maximized"
|
||||
#define XtCMenuBar "MenuBar" /* internal */
|
||||
#define XtCMenuHeight "MenuHeight"
|
||||
#define XtCMenuLocale "MenuLocale"
|
||||
#define XtCMessages "Messages"
|
||||
#define XtCMetaSendsEscape "MetaSendsEscape"
|
||||
#define XtCMinBufSize "MinBufSize"
|
||||
#define XtCMkSamplePass "MkSamplePass"
|
||||
#define XtCMkSampleSize "MkSampleSize"
|
||||
#define XtCMkWidth "MkWidth"
|
||||
|
@ -791,11 +871,19 @@ extern char **environ;
|
|||
#define XtCNumColorRegisters "NumColorRegisters"
|
||||
#define XtCNumLock "NumLock"
|
||||
#define XtCOldXtermFKeys "OldXtermFKeys"
|
||||
#define XtCOmitTranslation "OmitTranslation"
|
||||
#define XtCPointerFont "PointerFont"
|
||||
#define XtCPointerMode "PointerMode"
|
||||
#define XtCPopOnBell "PopOnBell"
|
||||
#define XtCPrecompose "Precompose"
|
||||
#define XtCPreferLatin1 "PreferLatin1"
|
||||
#define XtCPrintAttributes "PrintAttributes"
|
||||
#define XtCPrintFileImmediate "PrintFileImmediate"
|
||||
#define XtCPrintFileOnXError "PrintFileOnXError"
|
||||
#define XtCPrintModeImmediate "PrintModeImmediate"
|
||||
#define XtCPrintModeOnXError "PrintModeOnXError"
|
||||
#define XtCPrintOptsImmediate "PrintOptsImmediate"
|
||||
#define XtCPrintOptsOnXError "PrintOptsOnXError"
|
||||
#define XtCPrinterAutoClose "PrinterAutoClose"
|
||||
#define XtCPrinterCommand "PrinterCommand"
|
||||
#define XtCPrinterControlMode "PrinterControlMode"
|
||||
|
@ -803,22 +891,33 @@ extern char **environ;
|
|||
#define XtCPrinterFormFeed "PrinterFormFeed"
|
||||
#define XtCPrinterNewLine "PrinterNewLine"
|
||||
#define XtCPrivateColorRegisters "PrivateColorRegisters"
|
||||
#define XtCPtyHandshake "PtyHandshake"
|
||||
#define XtCPtyInitialErase "PtyInitialErase"
|
||||
#define XtCPtySttySize "PtySttySize"
|
||||
#define XtCQuietGrab "QuietGrab"
|
||||
#define XtCRegisDefaultFont "RegisDefaultFont"
|
||||
#define XtCRegisScreenSize "RegisScreenSize"
|
||||
#define XtCRenderFont "RenderFont"
|
||||
#define XtCReportCClass "ReportCClass"
|
||||
#define XtCReportColors "ReportColors"
|
||||
#define XtCReportFonts "ReportFonts"
|
||||
#define XtCReportIcons "ReportIcons"
|
||||
#define XtCReportXRes "ReportXRes"
|
||||
#define XtCResizeByPixel "ResizeByPixel"
|
||||
#define XtCResizeGravity "ResizeGravity"
|
||||
#define XtCRetryInputMethod "RetryInputMethod"
|
||||
#define XtCReverseWrap "ReverseWrap"
|
||||
#define XtCRightScrollBar "RightScrollBar"
|
||||
#define XtCSameName "SameName"
|
||||
#define XtCSaveLines "SaveLines"
|
||||
#define XtCScaleHeight "ScaleHeight"
|
||||
#define XtCScoFunctionKeys "ScoFunctionKeys"
|
||||
#define XtCScrollBar "ScrollBar"
|
||||
#define XtCScrollBarBorder "ScrollBarBorder"
|
||||
#define XtCScrollCond "ScrollCond"
|
||||
#define XtCScrollLines "ScrollLines"
|
||||
#define XtCSelectToClipboard "SelectToClipboard"
|
||||
#define XtCSessionMgt "SessionMgt"
|
||||
#define XtCShiftEscape "ShiftEscape"
|
||||
#define XtCShiftFonts "ShiftFonts"
|
||||
#define XtCShowBlinkAsBold "ShowBlinkAsBold"
|
||||
|
@ -827,28 +926,38 @@ extern char **environ;
|
|||
#define XtCSignalInhibit "SignalInhibit"
|
||||
#define XtCSixelScrolling "SixelScrolling"
|
||||
#define XtCSixelScrollsRight "SixelScrollsRight"
|
||||
#define XtCSunFunctionKeys "SunFunctionKeys"
|
||||
#define XtCSunKeyboard "SunKeyboard"
|
||||
#define XtCTcapFunctionKeys "TcapFunctionKeys"
|
||||
#define XtCTekInhibit "TekInhibit"
|
||||
#define XtCTekSmall "TekSmall"
|
||||
#define XtCTekStartup "TekStartup"
|
||||
#define XtCTermName "TermName"
|
||||
#define XtCTiXtraScroll "TiXtraScroll"
|
||||
#define XtCTiteInhibit "TiteInhibit"
|
||||
#define XtCTitleModes "TitleModes"
|
||||
#define XtCToolBar "ToolBar"
|
||||
#define XtCTrimSelection "TrimSelection"
|
||||
#define XtCTtyModes "TtyModes"
|
||||
#define XtCUnderLine "UnderLine"
|
||||
#define XtCUseBorderClipping "UseBorderClipping"
|
||||
#define XtCUseClipping "UseClipping"
|
||||
#define XtCUseInsertMode "UseInsertMode"
|
||||
#define XtCUtf8 "Utf8"
|
||||
#define XtCUtf8Fonts "Utf8Fonts"
|
||||
#define XtCUtf8Latin1 "Utf8Latin1"
|
||||
#define XtCUtf8SelectTypes "Utf8SelectTypes"
|
||||
#define XtCUtf8Title "Utf8Title"
|
||||
#define XtCUtf8Weblike "Utf8Weblike"
|
||||
#define XtCUtmpDisplayId "UtmpDisplayId"
|
||||
#define XtCUtmpInhibit "UtmpInhibit"
|
||||
#define XtCVT100Graphics "VT100Graphics"
|
||||
#define XtCValidShells "ValidShells"
|
||||
#define XtCVeryBoldColors "VeryBoldColors"
|
||||
#define XtCVisualBell "VisualBell"
|
||||
#define XtCVisualBellDelay "VisualBellDelay"
|
||||
#define XtCVisualBellLine "VisualBellLine"
|
||||
#define XtCWaitForMap "WaitForMap"
|
||||
#define XtCWideBoldFont "WideBoldFont"
|
||||
#define XtCWideChars "WideChars"
|
||||
#define XtCWideFont "WideFont"
|
||||
|
@ -860,6 +969,8 @@ extern char **environ;
|
|||
#define XtCXmcGlitch "XmcGlitch" /* ncurses-testing */
|
||||
#define XtCXmcInline "XmcInline" /* ncurses-testing */
|
||||
#define XtCXmcMoveSGR "XmcMoveSGR" /* ncurses-testing */
|
||||
#define XtCZIconBeep "ZIconBeep"
|
||||
#define XtCZIconTitleFormat "ZIconTitleFormat"
|
||||
|
||||
#if defined(NO_ACTIVE_ICON) && !defined(XtNgeometry)
|
||||
#define XtNgeometry "geometry"
|
||||
|
@ -896,13 +1007,13 @@ extern void HandleGINInput PROTO_XT_ACTIONS_ARGS;
|
|||
extern void TCursorToggle (TekWidget /* tw */, int /* toggle */);
|
||||
extern void TekCopy (TekWidget /* tw */);
|
||||
extern void TekEnqMouse (TekWidget /* tw */, int /* c */);
|
||||
extern void TekExpose (Widget /* w */, XEvent * /* event */, Region /* region */);
|
||||
extern void TekExpose (Widget /* w */, XEvent * /* event */, Region /* region */);
|
||||
extern void TekGINoff (TekWidget /* tw */);
|
||||
extern void TekRefresh (TekWidget /* tw */);
|
||||
extern void TekRepaint (TekWidget /* xw */);
|
||||
extern void TekReverseVideo (XtermWidget /* xw */, TekWidget /* tw */);
|
||||
extern void TekRun (void);
|
||||
extern void TekSetFontSize (TekWidget /* tw */, Bool /* fromMenu */, int /* newitem */);
|
||||
extern void TekSetFontSize (TekWidget /* tw */, Bool /* fromMenu */, int /* newitem */);
|
||||
extern void TekSetWinSize (TekWidget /* tw */);
|
||||
extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */);
|
||||
#endif
|
||||
|
@ -918,11 +1029,11 @@ extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */);
|
|||
(s)->event_mask |= PointerMotionMask; \
|
||||
XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
|
||||
|
||||
extern Bool SendMousePosition (XtermWidget /* w */, XEvent* /* event */);
|
||||
extern Bool SendMousePosition (XtermWidget /* w */, XEvent* /* event */);
|
||||
extern XtermMouseModes okSendMousePos(XtermWidget /* xw */);
|
||||
extern void DiredButton PROTO_XT_ACTIONS_ARGS;
|
||||
extern void DisownSelection (XtermWidget /* xw */);
|
||||
extern void UnhiliteSelection (XtermWidget /* xw */);
|
||||
extern void DisownSelection (XtermWidget /* xw */);
|
||||
extern void UnhiliteSelection (XtermWidget /* xw */);
|
||||
extern void HandleCopySelection PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleInsertSelection PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleKeyboardSelectEnd PROTO_XT_ACTIONS_ARGS;
|
||||
|
@ -936,8 +1047,8 @@ extern void HandleSelectExtend PROTO_XT_ACTIONS_ARGS;
|
|||
extern void HandleSelectSet PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleSelectStart PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleStartExtend PROTO_XT_ACTIONS_ARGS;
|
||||
extern void ResizeSelection (TScreen * /* screen */, int /* rows */, int /* cols */);
|
||||
extern void ScrollSelection (TScreen * /* screen */, int /* amount */, Bool /* always */);
|
||||
extern void ResizeSelection (TScreen * /* screen */, int /* rows */, int /* cols */);
|
||||
extern void ScrollSelection (TScreen * /* screen */, int /* amount */, Bool /* always */);
|
||||
extern void TrackMouse (XtermWidget /* xw */, int /* func */, CELL * /* start */, int /* firstrow */, int /* lastrow */);
|
||||
extern void ViButton PROTO_XT_ACTIONS_ARGS;
|
||||
|
||||
|
@ -946,8 +1057,8 @@ extern int xtermUtf8ToTextList (XtermWidget /* xw */, XTextProperty * /* text_pr
|
|||
extern void xtermButtonInit (XtermWidget /* xw */);
|
||||
|
||||
#if OPT_DEC_LOCATOR
|
||||
extern void GetLocatorPosition (XtermWidget /* w */);
|
||||
extern void InitLocatorFilter (XtermWidget /* w */);
|
||||
extern void GetLocatorPosition (XtermWidget /* w */);
|
||||
extern void InitLocatorFilter (XtermWidget /* w */);
|
||||
#endif /* OPT_DEC_LOCATOR */
|
||||
|
||||
#if OPT_FOCUS_EVENT
|
||||
|
@ -957,10 +1068,10 @@ extern void SendFocusButton(XtermWidget /* xw */, XFocusChangeEvent * /* event *
|
|||
#endif
|
||||
|
||||
#if OPT_PASTE64
|
||||
extern void AppendToSelectionBuffer (TScreen * /* screen */, unsigned /* c */, String /* selection */);
|
||||
extern void AppendToSelectionBuffer (TScreen * /* screen */, unsigned /* c */, String /* selection */);
|
||||
extern void ClearSelectionBuffer (TScreen * /* screen */, String /* selection */);
|
||||
extern void CompleteSelection (XtermWidget /* xw */, String * /* args */, Cardinal /* len */);
|
||||
extern void xtermGetSelection (Widget /* w */, Time /* ev_time */, String * /* params */, Cardinal /* num_params */, Atom * /* targets */);
|
||||
extern void CompleteSelection (XtermWidget /* xw */, String * /* args */, Cardinal /* len */);
|
||||
extern void xtermGetSelection (Widget /* w */, Time /* ev_time */, String * /* params */, Cardinal /* num_params */, Atom * /* targets */);
|
||||
#endif
|
||||
|
||||
#if OPT_READLINE
|
||||
|
@ -971,18 +1082,20 @@ extern void ReadLineButton PROTO_XT_ACTIONS_ARGS;
|
|||
extern void report_char_class(XtermWidget);
|
||||
#endif
|
||||
|
||||
#define IsLatin1(n) (((n) >= 32 && (n) <= 126) || ((n) >= 160 && (n) <= 255))
|
||||
#define IsAscii1(n) (((n) >= 32 && (n) <= 126))
|
||||
|
||||
#if OPT_WIDE_CHARS
|
||||
#define WideCells(n) (((IChar)(n) >= first_widechar) ? my_wcwidth((wchar_t) (n)) : 1)
|
||||
#define isWideFrg(n) (((n) == HIDDEN_CHAR) || (WideCells((n)) == 2))
|
||||
#define isWide(n) (((IChar)(n) >= first_widechar) && isWideFrg(n))
|
||||
#define CharWidth(screen, n) ((!((screen)->utf8_mode) && ((n) < 256)) \
|
||||
#define CharWidth(screen, n) (((n) < 256) \
|
||||
? (IsLatin1(n) ? 1 : 0) \
|
||||
: my_wcwidth((wchar_t) (n)))
|
||||
#define IsLatin1(n) (IsAscii1(n) || ((n) >= 160 && (n) <= 255))
|
||||
#else
|
||||
#define WideCells(n) 1
|
||||
#define CharWidth(screen, n) (IsLatin1(n) ? 1 : 0)
|
||||
#define IsLatin1(n) (IsAscii1(n) || ((n) >= 160))
|
||||
#endif
|
||||
|
||||
/* cachedCgs.c */
|
||||
|
@ -1000,6 +1113,7 @@ extern void setCgsCSet(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/
|
|||
extern void setCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/);
|
||||
extern void setCgsFont2(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/, unsigned /*which*/);
|
||||
extern void setCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/);
|
||||
extern void setCgsLine(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/);
|
||||
extern void swapCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/);
|
||||
|
||||
#ifdef NO_LEAKS
|
||||
|
@ -1011,7 +1125,7 @@ extern Bool CheckBufPtrs (TScreen * /* screen */);
|
|||
extern Bool set_cursor_gcs (XtermWidget /* xw */);
|
||||
extern char * vt100ResourceToString (XtermWidget /* xw */, const char * /* name */);
|
||||
extern int VTInit (XtermWidget /* xw */);
|
||||
extern Bool FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */);
|
||||
extern Bool FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */);
|
||||
extern void HideCursor (XtermWidget /* xw */);
|
||||
extern void RestartBlinking(XtermWidget /* xw */);
|
||||
extern void ShowCursor (XtermWidget /* xw */);
|
||||
|
@ -1020,7 +1134,7 @@ extern void ToggleAlternate (XtermWidget /* xw */);
|
|||
extern void VTInitTranslations (void);
|
||||
extern GCC_NORETURN void VTReset (XtermWidget /* xw */, int /* full */, int /* saved */);
|
||||
extern void VTRun (XtermWidget /* xw */);
|
||||
extern void dotext (XtermWidget /* xw */, DECNRCM_codes /* charset */, IChar * /* buf */, Cardinal /* len */);
|
||||
extern void dotext (XtermWidget /* xw */, DECNRCM_codes /* charset */, IChar * /* buf */, Cardinal /* len */);
|
||||
extern void getKeymapResources(Widget /* w */, const char * /*mapName */, const char * /* mapClass */, const char * /* type */, void * /* result */, size_t /* size */);
|
||||
extern void initBorderGC (XtermWidget /* xw */, VTwin * /* win */);
|
||||
extern void lookupSelectUnit(XtermWidget /* xw */, Cardinal /* item */, String /* value */);
|
||||
|
@ -1030,16 +1144,16 @@ extern void resetCharsets (TScreen * /* screen */);
|
|||
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 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 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 */);
|
||||
|
||||
|
@ -1056,8 +1170,8 @@ extern TInput *lookupTInput (XtermWidget /* xw */, Widget /* w */);
|
|||
#endif
|
||||
|
||||
#if OPT_ISO_COLORS
|
||||
extern void SGR_Background (XtermWidget /* xw */, int /* color */);
|
||||
extern void SGR_Foreground (XtermWidget /* xw */, int /* color */);
|
||||
extern void SGR_Background (XtermWidget /* xw */, int /* color */);
|
||||
extern void SGR_Foreground (XtermWidget /* xw */, int /* color */);
|
||||
extern void setExtendedColors (XtermWidget /* xw */);
|
||||
#endif
|
||||
|
||||
|
@ -1066,8 +1180,9 @@ extern void noleaks_charproc (void);
|
|||
#endif
|
||||
|
||||
/* charsets.c */
|
||||
extern unsigned xtermCharSetIn (XtermWidget /* xw */, unsigned /* code */, DECNRCM_codes /* charset */);
|
||||
extern int xtermCharSetOut (XtermWidget /* xw */, IChar * /* buf */, IChar * /* ptr */, DECNRCM_codes /* charset */);
|
||||
extern unsigned xtermCharSetIn (XtermWidget /* xw */, unsigned /* code */, DECNRCM_codes /* charset */);
|
||||
extern Cardinal xtermCharSetOut (XtermWidget /* xw */, Cardinal /* length */, DECNRCM_codes /* charset */);
|
||||
extern int xtermCharSetDec (XtermWidget /* xw */, IChar /* ch */, DECNRCM_codes /* cs */);
|
||||
|
||||
/* cursor.c */
|
||||
extern int CursorCol (XtermWidget /* xw */);
|
||||
|
@ -1080,17 +1195,17 @@ extern void CursorForward (XtermWidget /* xw */, int /* n */);
|
|||
extern void CursorNextLine (XtermWidget /* xw */, int /* count */);
|
||||
extern void CursorPrevLine (XtermWidget /* xw */, int /* count */);
|
||||
extern void CursorRestore2 (XtermWidget /* xw */, SavedCursor * /* sc */);
|
||||
extern void CursorRestore (XtermWidget /* xw */);
|
||||
extern void CursorRestore (XtermWidget /* xw */);
|
||||
extern void CursorSave2 (XtermWidget /* xw */, SavedCursor * /* sc */);
|
||||
extern void CursorSave (XtermWidget /* xw */);
|
||||
extern void CursorSet (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* flags */);
|
||||
extern void CursorUp (TScreen * /* screen */, int /* n */);
|
||||
extern void RevIndex (XtermWidget /* xw */, int /* amount */);
|
||||
extern void xtermIndex (XtermWidget /* xw */, int /* amount */);
|
||||
extern void CursorSave (XtermWidget /* xw */);
|
||||
extern void CursorSet (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* flags */);
|
||||
extern void CursorUp (TScreen * /* screen */, int /* n */);
|
||||
extern void RevIndex (XtermWidget /* xw */, int /* amount */);
|
||||
extern void xtermIndex (XtermWidget /* xw */, int /* amount */);
|
||||
|
||||
#if OPT_TRACE
|
||||
extern int set_cur_col(TScreen * /* screen */, int /* value */);
|
||||
extern int set_cur_row(TScreen * /* screen */, int /* value */);
|
||||
extern int set_cur_col(TScreen * /* screen */, int /* value */);
|
||||
extern int set_cur_row(TScreen * /* screen */, int /* value */);
|
||||
#else
|
||||
#define set_cur_col(screen, value) screen->cur_col = value
|
||||
#define set_cur_row(screen, value) \
|
||||
|
@ -1104,11 +1219,11 @@ extern int set_cur_row(TScreen * /* screen */, int /* value */);
|
|||
#endif
|
||||
|
||||
/* cursorfont.c */
|
||||
extern Cursor CreateAlternateCursorFontCursor(Display * /* dpy */, char const * /* cursorfont */, unsigned int /* which */);
|
||||
extern Cursor CreateAlternateCursorFontCursor(Display * /* dpy */, char const * /* cursorfont */, unsigned int /* which */);
|
||||
extern int CursorFontIndexFromShapeName(char const * /* shapename */);
|
||||
|
||||
/* doublechr.c */
|
||||
extern void xterm_DECDHL (XtermWidget /* xw */, Bool /* top */);
|
||||
extern void xterm_DECDHL (XtermWidget /* xw */, Bool /* top */);
|
||||
extern void xterm_DECSWL (XtermWidget /* xw */);
|
||||
extern void xterm_DECDWL (XtermWidget /* xw */);
|
||||
extern void xterm_ResetDouble(XtermWidget /* xw */);
|
||||
|
@ -1125,7 +1240,7 @@ extern unsigned xtermParamToState (XtermWidget /* xw */, unsigned /* param */);
|
|||
extern unsigned xtermStateToParam (XtermWidget /* xw */, unsigned /* state */);
|
||||
extern Bool xtermDeleteIsDEL (XtermWidget /* xw */);
|
||||
extern void Input (XtermWidget /* xw */, XKeyEvent */* event */, Bool /* eightbit */);
|
||||
extern void StringInput (XtermWidget /* xw */, const Char * /* string */, size_t /* nbytes */);
|
||||
extern void StringInput (XtermWidget /* xw */, const Char * /* string */, size_t /* nbytes */);
|
||||
|
||||
#if OPT_NUM_LOCK
|
||||
extern void VTInitModifiers(XtermWidget /* xw */);
|
||||
|
@ -1145,10 +1260,19 @@ extern void restoreCellData(TScreen * /* screen */, const CellData * /* data */,
|
|||
/* main.c */
|
||||
#define ENVP_ARG /**/
|
||||
|
||||
extern int main (int /* argc */, char ** /* argv */ ENVP_ARG);
|
||||
extern int GetBytesAvailable (int /* fd */);
|
||||
extern int kill_process_group (int /* pid */, int /* sig */);
|
||||
extern int main (int /* argc */, char ** /* argv */ ENVP_ARG);
|
||||
extern int xtermDisabledChar(void);
|
||||
extern int GetBytesAvailable (Display * /* dpy */);
|
||||
extern int kill_process_group (int /* pid */, int /* sig */);
|
||||
extern int nonblocking_wait (void);
|
||||
extern Atom CachedInternAtom(Display * /* display */, const char * /* name */);
|
||||
|
||||
extern int get_tty_erase(int /* fd */, int /* default_erase */, const char * /* tag */);
|
||||
extern int get_tty_lnext(int /* fd */, int /* default_lnext */, const char * /* tag */);
|
||||
|
||||
#if (defined(VMS) || defined(__VMS))
|
||||
#define GetBytesAvailable(dpy) ((dpy)->qlen > 0)
|
||||
#endif
|
||||
|
||||
#if OPT_PTY_HANDSHAKE
|
||||
extern void first_map_occurred (void);
|
||||
|
@ -1243,6 +1367,7 @@ extern void hide_tek_window (void);
|
|||
extern void hide_vt_window (void);
|
||||
extern GCC_NORETURN void ice_error (IceConn /* iceConn */);
|
||||
extern void init_colored_cursor (Display * /* dpy */);
|
||||
extern void parse_ansi_params(ANSI * /* params */, const char ** /* string */);
|
||||
extern void reset_decudk (XtermWidget /* xw */);
|
||||
extern void set_tek_visibility (Bool /* on */);
|
||||
extern void set_vt_visibility (Bool /* on */);
|
||||
|
@ -1265,6 +1390,10 @@ extern void xtermShowPointer (XtermWidget /* xw */, Bool /* enable */);
|
|||
extern void xtermUnsetenv (const char * /* var */);
|
||||
extern void xtermWarning (const char * /*fmt*/,...) GCC_PRINTFLIKE(1,2);
|
||||
|
||||
extern Boolean xtermPopTitle(TScreen * /* screen */, int /* which */, SaveTitle * /* item */);
|
||||
extern void xtermPushTitle(TScreen * /* screen */, int /* which */, SaveTitle * /* item */);
|
||||
extern void xtermFreeTitle(SaveTitle *item);
|
||||
|
||||
#if OPT_DABBREV
|
||||
extern void HandleDabbrevExpand PROTO_XT_ACTIONS_ARGS;
|
||||
#endif
|
||||
|
@ -1298,12 +1427,12 @@ extern Boolean QueryOneColor(XtermWidget /* xw */, XColor * /* def */);
|
|||
#endif
|
||||
|
||||
#if OPT_MAXIMIZE
|
||||
extern int QueryMaximize (XtermWidget /* xw */, unsigned * /* width */, unsigned * /* height */);
|
||||
extern int QueryMaximize (XtermWidget /* xw */, unsigned * /* width */, unsigned * /* height */);
|
||||
extern void HandleDeIconify PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleIconify PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleMaximize PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleRestoreSize PROTO_XT_ACTIONS_ARGS;
|
||||
extern void RequestMaximize (XtermWidget /* xw */, int /* maximize */);
|
||||
extern void RequestMaximize (XtermWidget /* xw */, int /* maximize */);
|
||||
#endif
|
||||
|
||||
#if OPT_REPORT_ICONS
|
||||
|
@ -1372,8 +1501,8 @@ extern PrinterFlags *getPrinterFlags (XtermWidget /* xw */, String * /* params *
|
|||
extern int xtermPrinterControl (XtermWidget /* xw */, int /* chr */);
|
||||
extern void setPrinterControlMode (XtermWidget /* xw */, int /* mode */);
|
||||
extern void xtermAutoPrint (XtermWidget /* xw */, unsigned /* chr */);
|
||||
extern void xtermMediaControl (XtermWidget /* xw */, int /* param */, int /* private_seq */);
|
||||
extern void xtermPrintScreen (XtermWidget /* xw */, Bool /* use_DECPEX */, PrinterFlags * /* p */);
|
||||
extern void xtermMediaControl (XtermWidget /* xw */, int /* param */, int /* private_seq */);
|
||||
extern void xtermPrintScreen (XtermWidget /* xw */, Bool /* use_DECPEX */, PrinterFlags * /* p */);
|
||||
extern void xtermPrintEverything (XtermWidget /* xw */, PrinterFlags * /* p */);
|
||||
extern void xtermPrintImmediately (XtermWidget /* xw */, String /* filename */, int /* opts */, int /* attributes */);
|
||||
extern void xtermPrintOnXError (XtermWidget /* xw */, int /* n */);
|
||||
|
@ -1395,7 +1524,7 @@ extern void xtermDumpSvg (XtermWidget /* xw */);
|
|||
|
||||
extern Bool decodeUtf8 (TScreen * /* screen */, PtyData * /* data */);
|
||||
extern int readPtyData (XtermWidget /* xw */, PtySelect * /* select_mask */, PtyData * /* data */);
|
||||
extern void fillPtyData (XtermWidget /* xw */, PtyData * /* data */, const char * /* value */, size_t /* length */);
|
||||
extern void fillPtyData (XtermWidget /* xw */, PtyData * /* data */, const char * /* value */, size_t /* length */);
|
||||
extern void initPtyData (PtyData ** /* data */);
|
||||
extern void trimPtyData (XtermWidget /* xw */, PtyData * /* data */);
|
||||
|
||||
|
@ -1405,12 +1534,12 @@ extern void noleaks_ptydata ( void );
|
|||
|
||||
#if OPT_WIDE_CHARS
|
||||
extern Boolean isValidUTF8 (Char * /* lp */);
|
||||
extern Char *convertToUTF8 (Char * /* lp */, unsigned /* c */);
|
||||
extern Char *convertToUTF8 (Char * /* lp */, unsigned /* c */);
|
||||
extern Char *convertFromUTF8 (Char * /* lp */, unsigned * /* cp */);
|
||||
extern IChar nextPtyData (TScreen * /* screen */, PtyData * /* data */);
|
||||
extern PtyData * fakePtyData (PtyData * /* result */, Char * /* next */, Char * /* last */);
|
||||
extern void switchPtyData (TScreen * /* screen */, int /* f */);
|
||||
extern void writePtyData (int /* f */, IChar * /* d */, size_t /* len */);
|
||||
extern void switchPtyData (TScreen * /* screen */, int /* f */);
|
||||
extern void writePtyData (int /* f */, IChar * /* d */, size_t /* len */);
|
||||
|
||||
#define morePtyData(screen, data) \
|
||||
(((data)->last > (data)->next) \
|
||||
|
@ -1443,30 +1572,31 @@ extern void writePtyData (int /* f */, IChar * /* d */, size_t /* len */);
|
|||
#define _NET_WM_STATE_ADD 1 /* add/set property */
|
||||
#define _NET_WM_STATE_TOGGLE 2 /* toggle property */
|
||||
|
||||
extern Bool non_blank_line (TScreen */* screen */, int /* row */, int /* col */, int /* len */);
|
||||
extern Bool non_blank_line (TScreen */* screen */, int /* row */, int /* col */, int /* len */);
|
||||
extern Char * allocScrnData (TScreen * /* screen */, unsigned /* nrow */, unsigned /* ncol */, Bool /* bottom */);
|
||||
extern ScrnBuf allocScrnBuf (XtermWidget /* xw */, unsigned /* nrow */, unsigned /* ncol */, ScrnPtr * /* addr */);
|
||||
extern ScrnBuf allocScrnBuf (XtermWidget /* xw */, unsigned /* nrow */, unsigned /* ncol */, ScrnPtr * /* addr */);
|
||||
extern ScrnBuf scrnHeadAddr (TScreen * /* screen */, ScrnBuf /* base */, unsigned /* offset */);
|
||||
extern size_t ScrnPointers (TScreen * /* screen */, size_t /* len */);
|
||||
extern void ClearBufRows (XtermWidget /* xw */, int /* first */, int /* last */);
|
||||
extern size_t ScrnPointers (TScreen * /* screen */, size_t /* len */);
|
||||
extern void ClearBufRows (XtermWidget /* xw */, int /* first */, int /* last */);
|
||||
extern void ClearCells (XtermWidget /* xw */, int /* flags */, unsigned /* len */, int /* row */, int /* col */);
|
||||
extern void CopyCells (TScreen * /* screen */, LineData * /* src */, LineData * /* dst */, int /* col */, int /* len */, Bool /* down */);
|
||||
extern void FullScreen (XtermWidget /* xw */, int /* mode */);
|
||||
extern void FreeMarkGCs (XtermWidget /* xw */);
|
||||
extern void ScreenResize (XtermWidget /* xw */, int /* width */, int /* height */, unsigned * /* flags */);
|
||||
extern void ResetHiddenHint (XtermWidget /* xw */);
|
||||
extern void ScreenResize (XtermWidget /* xw */, int /* width */, int /* height */, unsigned * /* flags */);
|
||||
extern void ScrnAllocBuf (XtermWidget /* xw */);
|
||||
extern void ScrnClearCells (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */);
|
||||
extern void ScrnDeleteChar (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnDeleteCol (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnDeleteLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* n */, int /* last */, unsigned /* where */);
|
||||
extern void ScrnDeleteChar (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnDeleteCol (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnDeleteLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* n */, int /* last */, unsigned /* where */);
|
||||
extern void ScrnDisownSelection (XtermWidget /* xw */);
|
||||
extern void ScrnFillRectangle (XtermWidget /* xw */, XTermRect *, int , unsigned /* flags */, Bool /* keepColors */);
|
||||
extern void ScrnInsertChar (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnInsertCol (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnInsertLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* last */, int /* where */, unsigned /* n */);
|
||||
extern void ScrnRefresh (XtermWidget /* xw */, int /* toprow */, int /* leftcol */, int /* nrows */, int /* ncols */, Bool /* force */);
|
||||
extern void ScrnUpdate (XtermWidget /* xw */, int /* toprow */, int /* leftcol */, int /* nrows */, int /* ncols */, Bool /* force */);
|
||||
extern void ScrnWriteText (XtermWidget /* xw */, IChar * /* str */, unsigned /* flags */, CellColor /* cur_fg_bg */, unsigned /* length */);
|
||||
extern void ScrnInsertChar (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnInsertCol (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void ScrnInsertLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* last */, int /* where */, unsigned /* n */);
|
||||
extern void ScrnRefresh (XtermWidget /* xw */, int /* toprow */, int /* leftcol */, int /* nrows */, int /* ncols */, Bool /* force */);
|
||||
extern void ScrnUpdate (XtermWidget /* xw */, int /* toprow */, int /* leftcol */, int /* nrows */, int /* ncols */, Bool /* force */);
|
||||
extern void ScrnWriteText (XtermWidget /* xw */, Cardinal /* offset */, Cardinal /* length */, unsigned /* flags */, CellColor /* cur_fg_bg */);
|
||||
extern void ShowWrapMarks (XtermWidget /* xw */, int /* row */, CLineData * /* ld */);
|
||||
extern void setupLineData (TScreen * /* screen */, ScrnBuf /* base */, Char * /* data */, unsigned /* nrow */, unsigned /* ncol */, Bool /* bottom */);
|
||||
extern void xtermParseRect (XtermWidget /* xw */, int, int *, XTermRect *);
|
||||
|
@ -1556,16 +1686,16 @@ extern void DoResizeScreen (XtermWidget /* xw */);
|
|||
extern void HandleScrollBack PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleScrollForward PROTO_XT_ACTIONS_ARGS;
|
||||
extern void HandleScrollTo PROTO_XT_ACTIONS_ARGS;
|
||||
extern void ResizeScrollBar (XtermWidget /* xw */);
|
||||
extern void ScrollBarDrawThumb (XtermWidget /* xw */, int /* mode */);
|
||||
extern void ScrollBarOff (XtermWidget /* xw */);
|
||||
extern void ScrollBarOn (XtermWidget /* xw */, Bool /* init */);
|
||||
extern void ScrollBarReverseVideo (Widget /* scrollWidget */);
|
||||
extern void ToggleScrollBar (XtermWidget /* xw */);
|
||||
extern void WindowScroll (XtermWidget /* xw */, int /* top */, Bool /* always */);
|
||||
extern void ResizeScrollBar (XtermWidget /* xw */);
|
||||
extern void ScrollBarDrawThumb (XtermWidget /* xw */, int /* mode */);
|
||||
extern void ScrollBarOff (XtermWidget /* xw */);
|
||||
extern void ScrollBarOn (XtermWidget /* xw */, Bool /* init */);
|
||||
extern void ScrollBarReverseVideo (Widget /* scrollWidget */);
|
||||
extern void ToggleScrollBar (XtermWidget /* xw */);
|
||||
extern void WindowScroll (XtermWidget /* xw */, int /* top */, Bool /* always */);
|
||||
|
||||
#ifdef SCROLLBAR_RIGHT
|
||||
extern void updateRightScrollbar(XtermWidget /* xw */);
|
||||
extern void updateRightScrollbar(XtermWidget /* xw */);
|
||||
#else
|
||||
#define updateRightScrollbar(xw) /* nothing */
|
||||
#endif
|
||||
|
@ -1580,10 +1710,12 @@ extern void TabZonk (Tabs /* tabs */);
|
|||
extern Bool TabIsSet (Tabs /* tabs */, int /* col */);
|
||||
|
||||
/* util.c */
|
||||
extern Boolean AssignFgColor (XtermWidget /* xw */, Pixel /* bg */);
|
||||
extern Boolean AssignBgColor (XtermWidget /* xw */, Pixel /* bg */);
|
||||
extern Boolean isDefaultBackground (const char * /* name */);
|
||||
extern Boolean isDefaultForeground (const char * /* name */);
|
||||
extern CgsEnum whichXtermCgs (XtermWidget /* xw */, unsigned /* attr_flags */, Bool /* hilite */);
|
||||
extern GC updatedXtermGC (XtermWidget /* xw */, unsigned /* flags */, CellColor /* fg_bg */, Bool /* hilite */);
|
||||
extern GC updatedXtermGC (XtermWidget /* xw */, unsigned /* flags */, CellColor /* fg_bg */, Bool /* hilite */);
|
||||
extern Pixel getXtermBackground (XtermWidget /* xw */, unsigned /* flags */, int /* color */);
|
||||
extern Pixel getXtermForeground (XtermWidget /* xw */, unsigned /* flags */, int /* color */);
|
||||
extern char * xtermSetLocale (int /* category */, String /* after */);
|
||||
|
@ -1592,32 +1724,32 @@ extern int HandleExposure (XtermWidget /* xw */, XEvent * /* event */);
|
|||
extern int dimRound (double /* value */);
|
||||
extern int drawXtermText (XTermDraw * /* param */, GC /* gc */, int /* x */, int /* y */, const IChar * /* text */, Cardinal /* len */);
|
||||
extern int extendedBoolean (const char * /* value */, const FlagList * /* table */, Cardinal /* limit */);
|
||||
extern void ChangeColors (XtermWidget /* xw */, ScrnColors * /* pNew */);
|
||||
extern void ChangeColors (XtermWidget /* xw */, ScrnColors * /* pNew */);
|
||||
extern void ClearLine (XtermWidget /* xw */);
|
||||
extern void ClearRight (XtermWidget /* xw */, int /* n */);
|
||||
extern void ClearScreen (XtermWidget /* xw */);
|
||||
extern void DeleteChar (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void DeleteLine (XtermWidget /* xw */, int /* n */, Bool /* canSave */);
|
||||
extern void FlushScroll (XtermWidget /* xw */);
|
||||
extern void GetColors (XtermWidget /* xw */, ScrnColors * /* pColors */);
|
||||
extern void GetColors (XtermWidget /* xw */, ScrnColors * /* pColors */);
|
||||
extern void InsertChar (XtermWidget /* xw */, unsigned /* n */);
|
||||
extern void InsertLine (XtermWidget /* xw */, int /* n */);
|
||||
extern void RevScroll (XtermWidget /* xw */, int /* amount */);
|
||||
extern void InsertLine (XtermWidget /* xw */, int /* n */);
|
||||
extern void RevScroll (XtermWidget /* xw */, int /* amount */);
|
||||
extern void ReverseVideo (XtermWidget /* xw */);
|
||||
extern void WriteText (XtermWidget /* xw */, IChar * /* str */, Cardinal /* len */);
|
||||
extern void WriteText (XtermWidget /* xw */, Cardinal /* offset */, Cardinal /* len */);
|
||||
extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */);
|
||||
extern void decode_wcwidth (XtermWidget /* xw */);
|
||||
extern void decode_wcwidth (XtermWidget /* xw */);
|
||||
extern void do_cd_xtra_scroll (XtermWidget /* xw */, int /* param */);
|
||||
extern void do_erase_display (XtermWidget /* xw */, int /* param */, int /* mode */);
|
||||
extern void do_erase_char (XtermWidget /* xw */, int /* param */, int /* mode */);
|
||||
extern void do_erase_line (XtermWidget /* xw */, int /* param */, int /* mode */);
|
||||
extern void do_erase_display (XtermWidget /* xw */, int /* param */, int /* mode */);
|
||||
extern void do_erase_char (XtermWidget /* xw */, int /* param */, int /* mode */);
|
||||
extern void do_erase_line (XtermWidget /* xw */, int /* param */, int /* mode */);
|
||||
extern void do_ti_xtra_scroll (XtermWidget /* xw */);
|
||||
extern void getXtermSizeHints (XtermWidget /* xw */);
|
||||
extern void recolor_cursor (TScreen * /* screen */, Cursor /* cursor */, unsigned long /* fg */, unsigned long /* bg */);
|
||||
extern void resetXtermGC (XtermWidget /* xw */, unsigned /* flags */, Bool /* hilite */);
|
||||
extern void scrolling_copy_area (XtermWidget /* xw */, int /* firstline */, int /* nlines */, int /* amount */);
|
||||
extern void set_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */, Bool /* set */);
|
||||
extern void toggle_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */);
|
||||
extern void recolor_cursor (TScreen * /* screen */, Cursor /* cursor */, unsigned long /* fg */, unsigned long /* bg */);
|
||||
extern void resetXtermGC (XtermWidget /* xw */, unsigned /* flags */, Bool /* hilite */);
|
||||
extern void scrolling_copy_area (XtermWidget /* xw */, int /* firstline */, int /* nlines */, int /* amount */);
|
||||
extern void set_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */, Bool /* set */);
|
||||
extern void toggle_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */);
|
||||
extern void update_keyboard_type (void);
|
||||
extern void xtermClear (XtermWidget /* xw */);
|
||||
extern void xtermClear2 (XtermWidget /* xw */, int /* x */, int /* y */, unsigned /* width */, unsigned /* height */);
|
||||
|
@ -1627,7 +1759,7 @@ extern void xtermRepaint (XtermWidget /* xw */);
|
|||
extern void xtermResetLocale (int /* category */, char * /* before */);
|
||||
extern void xtermScroll (XtermWidget /* xw */, int /* amount */);
|
||||
extern void xtermScrollLR (XtermWidget /* xw */, int /* amount */, Bool /* toLeft */);
|
||||
extern void xtermSizeHints (XtermWidget /* xw */, int /* scrollbarWidth */);
|
||||
extern void xtermSizeHints (XtermWidget /* xw */, int /* scrollbarWidth */);
|
||||
|
||||
struct Xinerama_geometry {
|
||||
int x;
|
||||
|
@ -1643,10 +1775,10 @@ extern int XParseXineramaGeometry(Display * /* display */, char * /* parsestring
|
|||
|
||||
#if OPT_ISO_COLORS
|
||||
|
||||
extern Pixel extract_fg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */);
|
||||
extern Pixel extract_bg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */);
|
||||
extern Pixel extract_fg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */);
|
||||
extern Pixel extract_bg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */);
|
||||
extern CellColor makeColorPair (XtermWidget /* xw */);
|
||||
extern void ClearCurBackground (XtermWidget /* xw */, int /* top */, int /* left */, unsigned /* height */, unsigned /* width */, unsigned /* fw */);
|
||||
extern void ClearCurBackground (XtermWidget /* xw */, int /* top */, int /* left */, unsigned /* height */, unsigned /* width */, unsigned /* fw */);
|
||||
|
||||
#define xtermColorPair(xw) makeColorPair(xw)
|
||||
|
||||
|
@ -1735,7 +1867,7 @@ extern void discardRenderDraw(TScreen * /* screen */);
|
|||
#if OPT_ZICONBEEP
|
||||
extern void initZIconBeep(void);
|
||||
extern void resetZIconBeep(XtermWidget /* xw */);
|
||||
extern Boolean showZIconBeep(XtermWidget /* xw */, char * /* name */);
|
||||
extern Boolean showZIconBeep(XtermWidget /* xw */, const char * /* name */);
|
||||
#else
|
||||
#define initZIconBeep() /* nothing */
|
||||
#define resetZIconBeep(xw) /* nothing */
|
||||
|
@ -1744,9 +1876,9 @@ extern Boolean showZIconBeep(XtermWidget /* xw */, char * /* name */);
|
|||
|
||||
#define XTERM_CELL(row,col) getXtermCell(screen, ROW2INX(screen, row), col)
|
||||
|
||||
extern unsigned getXtermCell (TScreen * /* screen */, int /* row */, int /* col */);
|
||||
extern unsigned getXtermCell (TScreen * /* screen */, int /* row */, int /* col */);
|
||||
extern unsigned getXtermCombining(TScreen * /* screen */, int /* row */, int /* col */, int /* off */);
|
||||
extern void putXtermCell (TScreen * /* screen */, int /* row */, int /* col */, int /* ch */);
|
||||
extern void putXtermCell (TScreen * /* screen */, int /* row */, int /* col */, int /* ch */);
|
||||
|
||||
#define IsCellCombined(screen, row, col) (getXtermCombining(screen, row, col, 0) != 0)
|
||||
|
||||
|
@ -1763,22 +1895,28 @@ extern void putXtermCell (TScreen * /* screen */, int /* row */, int /* col */
|
|||
&& (sel) != (xw)->dft_background)
|
||||
#endif
|
||||
|
||||
#define setXtermLineAttributes(dpy, gc, width, style) \
|
||||
XSetLineAttributes(dpy, gc, (unsigned) width, style, CapProjecting, JoinMiter);
|
||||
|
||||
#define resetXtermLineAttributes(dpy, gc) \
|
||||
setXtermLineAttributes(dpy, gc, 0, LineSolid);
|
||||
|
||||
#if OPT_WIDE_CHARS
|
||||
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 */);
|
||||
extern void addXtermCombining (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* ch */);
|
||||
extern void addXtermCombining (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* ch */);
|
||||
extern void allocXtermChars(ScrnPtr * /* buffer */, Cardinal /* length */);
|
||||
#endif
|
||||
|
||||
#if OPT_XMC_GLITCH
|
||||
extern void Mark_XMC (XtermWidget /* xw */, int /* param */);
|
||||
extern void Mark_XMC (XtermWidget /* xw */, int /* param */);
|
||||
extern void Jump_XMC (XtermWidget /* xw */);
|
||||
extern void Resolve_XMC (XtermWidget /* xw */);
|
||||
#endif
|
||||
|
||||
#if OPT_WIDE_CHARS
|
||||
unsigned visual_width(const IChar * /* str */, Cardinal /* len */);
|
||||
unsigned visual_width(const IChar * /* str */, Cardinal /* len */);
|
||||
#else
|
||||
#define visual_width(a, b) (b)
|
||||
#endif
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
*****************************************************************************
|
||||
* this file is part of xterm *
|
||||
* *
|
||||
* Copyright 1997-2022,2023 by Thomas E. Dickey *
|
||||
* Copyright 1997-2023,2024 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.2478 2023/01/09 10:29:25 tom Exp $
|
||||
$XTermId: xterm.log.html,v 1.2635 2024/07/11 23:37:57 tom Exp $
|
||||
-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<html>
|
||||
|
@ -50,7 +50,7 @@
|
|||
<body>
|
||||
<hr>
|
||||
|
||||
<p>Copyright © 1997-2022,2023 by <a href=
|
||||
<p>Copyright © 1997-2023,2024 by <a href=
|
||||
"mailto:dickey@invisible-island.net">Thomas E. Dickey</a></p>
|
||||
|
||||
<hr>
|
||||
|
@ -70,6 +70,36 @@
|
|||
CHANGELOG</a>).</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="#xterm_393">Patch #393 - 2024/07/11</a></li>
|
||||
|
||||
<li><a href="#xterm_392">Patch #392 - 2024/05/22</a></li>
|
||||
|
||||
<li><a href="#xterm_391">Patch #391 - 2024/05/12</a></li>
|
||||
|
||||
<li><a href="#xterm_390">Patch #390 - 2024/02/19</a></li>
|
||||
|
||||
<li><a href="#xterm_389">Patch #389 - 2024/01/01</a></li>
|
||||
|
||||
<li><a href="#xterm_388">Patch #388 - 2023/10/22</a></li>
|
||||
|
||||
<li><a href="#xterm_387">Patch #387 - 2023/10/15</a></li>
|
||||
|
||||
<li><a href="#xterm_386">Patch #386 - 2023/10/09</a></li>
|
||||
|
||||
<li><a href="#xterm_385">Patch #385 - 2023/10/01</a></li>
|
||||
|
||||
<li><a href="#xterm_384">Patch #384 - 2023/07/10</a></li>
|
||||
|
||||
<li><a href="#xterm_383">Patch #383 - 2023/06/27</a></li>
|
||||
|
||||
<li><a href="#xterm_382">Patch #382 - 2023/05/30</a></li>
|
||||
|
||||
<li><a href="#xterm_381">Patch #381 - 2023/05/28</a></li>
|
||||
|
||||
<li><a href="#xterm_380">Patch #380 - 2023/05/09</a></li>
|
||||
|
||||
<li><a href="#xterm_379">Patch #379 - 2023/02/15</a></li>
|
||||
|
||||
<li><a href="#xterm_378">Patch #378 - 2023/01/09</a></li>
|
||||
|
||||
<li><a href="#xterm_377">Patch #377 - 2022/11/25</a></li>
|
||||
|
@ -1034,6 +1064,606 @@
|
|||
<li><a href="#xterm_01">Patch #1 - 1996/1/6</a></li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_393" id="xterm_393">Patch #393 -
|
||||
2024/07/11</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>add a check for ANSI SC/RC, to ignore CSI parameters.</li>
|
||||
|
||||
<li>improve check for missing characters for bitmap-fonts by
|
||||
using the normal font for reference in the case where the
|
||||
current font, e.g., the wide-font was derived from the normal
|
||||
font and lacks per-character metrics (report by Rajeev V.
|
||||
Pillai).</li>
|
||||
|
||||
<li>fix regression in error-recovery for SGR parameters from
|
||||
<a href="#xterm_357">patch #357</a> (report by James
|
||||
Holderness).</li>
|
||||
|
||||
<li>remove some duplicates in <tt>xtermcfg.h</tt> (report by
|
||||
Matthew Green).</li>
|
||||
|
||||
<li>change default for <tt>--enable-imake</tt> configure
|
||||
option.</li>
|
||||
|
||||
<li>fixes for <tt>wcwidth</tt>:
|
||||
<ul>
|
||||
<li>return 0 for format effectors, like a zero-width
|
||||
printing character rather than -1 like a control character
|
||||
(report by Rajeev V. Pillai).</li>
|
||||
|
||||
<li>correct <tt>doublewidth</tt> to account for reserved
|
||||
codepoints which are listed in the EastAsianWidth
|
||||
file.</li>
|
||||
|
||||
<li>add a special case for surrogate pairs, which might be
|
||||
checked in testing the <tt>wcwidth</tt> function.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>amend sixel bounds-check added in <a href=
|
||||
"#xterm_371">patch #371</a> to not wrap out-of-bounds
|
||||
data.</li>
|
||||
|
||||
<li>eliminate <tt>maxStringParse</tt> limit for SIXEL.</li>
|
||||
|
||||
<li>improve logic which ignores APC, PM and SOS controls to
|
||||
also not accumulate their data temporarily in a buffer.</li>
|
||||
|
||||
<li>exclude <tt>TERM_INGRESS</tt> from cleanup of environment
|
||||
variables (patch by Iain Riley).</li>
|
||||
|
||||
<li>fix some documentation typos (report by Thomas Wolff).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_392" id="xterm_392">Patch #392 -
|
||||
2024/05/22</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>improve input decoding for non-Latin1 character sets by
|
||||
preserving the sense of GL/GR.</li>
|
||||
|
||||
<li>add resource <tt>preferLatin1</tt> to simplify UPSS
|
||||
configuration (Gentoo #932154).</li>
|
||||
|
||||
<li>build-fix for <tt>--disable-boxchars</tt>; <a href=
|
||||
"#xterm_390">patch #390</a> reuses that feature's code to draw
|
||||
the part of the DEC Technical character set which has no
|
||||
Unicode equivalent.</li>
|
||||
|
||||
<li>modify <tt>#include</tt> of <tt>pty.h</tt> to work with
|
||||
musl (report by Khem Raj).</li>
|
||||
|
||||
<li>improve definitions used in <tt>clock_gettime</tt> logic in
|
||||
<tt>graphics_sixel.c</tt>, as well as updating comments (patch
|
||||
by Ben Wong).</li>
|
||||
|
||||
<li>amend <code>allowC1Printable</code> changes from <a href=
|
||||
"#xterm_391">patch #391</a>, restoring a special case which
|
||||
caused C1 characters to be ignored (report/testcase by Dmytro
|
||||
Bagrii).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_391" id="xterm_391">Patch #391 -
|
||||
2024/05/12</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>improve integration between UTF-8 and
|
||||
<code>allowC1Printable</code>.</li>
|
||||
|
||||
<li>alter SIXEL HLS computation to make blue 0 degrees (patch
|
||||
by Ben Wong).</li>
|
||||
|
||||
<li>disable SIXEL aspect-ratio, pending a rewrite (patch by Ben
|
||||
Wong).</li>
|
||||
|
||||
<li>add resource <code>incrementalGraphics</code> (prompted by
|
||||
patch by Ben Wong).</li>
|
||||
|
||||
<li>reorganize <tt>graphics_sixel.c</tt> as a step toward
|
||||
eliminating graphics buffer-size (integrated patch by Ben
|
||||
Wong).</li>
|
||||
|
||||
<li>use <code>__linux__</code> consistently rather than the
|
||||
older <code>linux</code>.</li>
|
||||
|
||||
<li>build-fix for musl (report by Jonáš Vidra,
|
||||
adapted patch by Khem Raj):
|
||||
<ul>
|
||||
<li>modify <code><em>ifdef</em></code> for
|
||||
<code>USE_OPENPTY</code>, changing test for
|
||||
<code>__GLIBC__</code> to <code>__linux__</code></li>
|
||||
|
||||
<li>change <code><em>ifdef</em></code>'s for
|
||||
<code>_POSIX_SOURCE</code> to
|
||||
<code>_POSIX_VERSION</code></li>
|
||||
|
||||
<li>modify <code><em>ifdef</em></code> for
|
||||
<code>setsid</code> to use a configure-script check for
|
||||
that function's existence and move the old check to imake
|
||||
fallbacks.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>minor consistency fixes for manpage.</li>
|
||||
|
||||
<li>fix regression in <a href="#xterm_390">patch #390</a>:
|
||||
non-UTF8 text pasted as a XA_UTF8_STRING was not decoded
|
||||
(report by Petri Kaukasoina).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_390" id="xterm_390">Patch #390 -
|
||||
2024/02/19</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>improve typography of control-sequences page (patches by
|
||||
Branden Robinson).</li>
|
||||
|
||||
<li>amend UPSS change from <a href="#xterm_389">patch #389</a>,
|
||||
fixing a regression in VT100/VT220 character sets.</li>
|
||||
|
||||
<li>modify ANSI conformance per ECMA-43 and DEC 070:
|
||||
<ul>
|
||||
<li>set ANSI conformance level to 3 for DEC levels 2 and
|
||||
up.</li>
|
||||
|
||||
<li>disable locking shifts in level 1, e.g., VT100.</li>
|
||||
|
||||
<li>disable single-shifts from G2/G3 in level 1.</li>
|
||||
|
||||
<li>use UPSS for G2/G3 in levels 2 and up.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>modify invisible-character attribute to permit
|
||||
<tt>DECRQCRA</tt> to report a consistent checksum
|
||||
(report/testcase by Thomas Wolff).</li>
|
||||
|
||||
<li>align terminfo building blocks in terminfo to correspond to
|
||||
recent refactoring/trimming in ncurses.</li>
|
||||
|
||||
<li>set flag in regexec call for
|
||||
<code>on<em>N</em>Clicks</code> to handle
|
||||
“<tt>^</tt>” anchor (patch by Matthew Martin).</li>
|
||||
|
||||
<li>add line-drawing data for the characters in <a href=
|
||||
"https://www.vt100.net/charsets/technical.html"><em>DEC
|
||||
Technical</em></a> which have no Unicode equivalents.</li>
|
||||
|
||||
<li>remove a special case in <tt>encode_scs</tt> which made
|
||||
xterm report Latin-1 when encoding is set to UTF-8, where ASCII
|
||||
is the selected character set. This fixes a regression in
|
||||
vttest for the <tt>DECRSPS</tt> cursor test.</li>
|
||||
|
||||
<li>correct values for <em>Ps</em> of <tt>DECAUPSS</tt> in
|
||||
<tt>ctlseqs.ms</tt> (report by James Holderness).</li>
|
||||
|
||||
<li>simplify/correct expression for checking Unicode
|
||||
non-characters (report by Thomas Wolff).</li>
|
||||
|
||||
<li>correct loop for trimming environment variables
|
||||
(report/patch by Casper Dik).</li>
|
||||
|
||||
<li>fixes for manpage formatting (Debian #1041809).</li>
|
||||
|
||||
<li>update config.guess, config.sub</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_389" id="xterm_389">Patch #389 -
|
||||
2024/01/01</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>interchange variables in subparameter parsing, fixing a bug
|
||||
where subparameters after the first parameter could be
|
||||
misidentified (patch by Adam Saponara).</li>
|
||||
|
||||
<li>correct popping of icon/window titles in a case where only
|
||||
one was pushed from <a href="#xterm_385">patch #385</a>
|
||||
changes.</li>
|
||||
|
||||
<li>add <tt>XTQMODKEYS</tt> response in <tt>DECRQSS</tt>, as
|
||||
alternative for vim.</li>
|
||||
|
||||
<li>correct <tt>DECCIR</tt> encoded information on character
|
||||
set size, handle a VT525 quirk, and add <tt>DECST8C</tt>
|
||||
(Windows Terminal #14984).</li>
|
||||
|
||||
<li>improve <tt>DECRQCRA</tt> (prompted by discussion with
|
||||
James Holderness, Windows Terminal #14974).</li>
|
||||
|
||||
<li>add part of VT525 color controls:
|
||||
<ul>
|
||||
<li><tt>DECAC</tt>, to update default
|
||||
foreground/background, respond to <tt>DECRQSS</tt></li>
|
||||
|
||||
<li><tt>DECATC</tt>, to respond with <tt>DECRQSS</tt></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>prevent Unicode non-characters from being printed (prompted
|
||||
by patch by Grady Martin).</li>
|
||||
|
||||
<li>modify <tt>send_SGR()</tt> to avoid modifying colors 16 to
|
||||
255 in printed output (patch by Grady Martin).</li>
|
||||
|
||||
<li>minor cleanup of miscellaneous error-codes with
|
||||
<tt>ERROR_MISC</tt>.</li>
|
||||
|
||||
<li>remove legacy <tt><em>CSI</em> 53</tt> for locator status,
|
||||
corrected in <a href="#xterm_294">patch #294</a>.</li>
|
||||
|
||||
<li>modify <tt>DECRQUPSS</tt> and <tt>DECAUPSS</tt> feature to
|
||||
support VT5xx character sets (report by Thomas Wolff).</li>
|
||||
|
||||
<li>improve configure script:
|
||||
<ul>
|
||||
<li>reduce configure-check compiler warnings (prompted by
|
||||
Florian Weimer, Redhat #2251945)</li>
|
||||
|
||||
<li>improve usage messages in configure script to make it
|
||||
clearer when an option value is optional.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>improve EWMH handling (report/analysis by Edward Rosten)
|
||||
<ul>
|
||||
<li>reset <tt>_NET_WM_STATE_HIDDEN</tt> flag from
|
||||
<tt>_NET_WM_STATE</tt> before mapping the window to
|
||||
deiconify.</li>
|
||||
|
||||
<li>cache X properties to reduce latency (adapted from
|
||||
patch by Edward Rosten).</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_388" id="xterm_388">Patch #388 -
|
||||
2023/10/22</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>improve <tt>disallowPasteControls</tt> by adding a category
|
||||
for the special characters known to <tt>stty</tt> (prompted by
|
||||
discussion with David Leadbeater).</li>
|
||||
|
||||
<li>amend support of <tt>DECAUPSS</tt>, undoing change to
|
||||
initialization of G2/G3 so that pasting of GR characters works
|
||||
properly (report/analysis by Petri Kaukasoina).</li>
|
||||
|
||||
<li>update config.guess, config.sub</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_387" id="xterm_387">Patch #387 -
|
||||
2023/10/15</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>add <tt>DECRQUPSS</tt> and <tt>DECAUPSS</tt>.</li>
|
||||
|
||||
<li>add <tt>DECRQDE</tt> (report by Jake Hamby).</li>
|
||||
|
||||
<li>correct indexing expression in title-stack, from <a href=
|
||||
"#xterm_385">patch #385</a> changes (report by Brian
|
||||
Lindholm).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_386" id="xterm_386">Patch #386 -
|
||||
2023/10/09</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>improve references in <tt>ctlseqs.ms</tt> (prompted by
|
||||
discussion with Kirill Chibisov).</li>
|
||||
|
||||
<li>make the maximum amount of memory used for buffering DCS
|
||||
and OSC strings configurable with <tt>maxStringParse</tt>
|
||||
resource (report by Daniel Franke).</li>
|
||||
|
||||
<li>improve performance of ReGIS when initializing the largest
|
||||
fontsize (report by Ben Wong).</li>
|
||||
|
||||
<li>fix regression in SIXEL colors, in <a href=
|
||||
"#xterm_385">patch #385</a> (report/patch by Jonny
|
||||
Langley).</li>
|
||||
|
||||
<li>fix typo in <code>--with-wtmp</code> (report/patch by Sven
|
||||
Joachim)</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_385" id="xterm_385">Patch #385 -
|
||||
2023/10/01</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>fixes for ReGIS (report by Ben Wong).
|
||||
<ul>
|
||||
<li>correct conversion from HLS to RGB</li>
|
||||
|
||||
<li>improve font-caching performance.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>update tables in <code>wcwidth.c</code> based on Unicode
|
||||
15.1.0</li>
|
||||
|
||||
<li>improve <code>fastScroll</code> resource:
|
||||
<ul>
|
||||
<li>suppress screen-refreshes for carriage-returns</li>
|
||||
|
||||
<li>add <code>-jf</code> option to simplify use of this
|
||||
resource.</li>
|
||||
|
||||
<li>add a control sequence for enabling/disabling the
|
||||
resource.</li>
|
||||
|
||||
<li>enable this feature by default</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>extend title-stack feature to allow an additional parameter
|
||||
to directly access the stack, like the
|
||||
<code>XTPUSHCOLORS</code> and <code>XTPOPCOLORS</code>
|
||||
feature.</li>
|
||||
|
||||
<li>correct size and position of box shown for double-cell
|
||||
character which happens to be missing from the bitmap font
|
||||
(report by Peter Fabinski).</li>
|
||||
|
||||
<li>improved configure script:
|
||||
<ul>
|
||||
<li>add pattern for uClibc-ng to <tt>CF_XOPEN_SOURCE</tt>
|
||||
(report/patch by Waldemar Brodkorb).</li>
|
||||
|
||||
<li>add configure options <tt>--with-utmp-path</tt> and
|
||||
<tt>--with-wtmp-path</tt> to override configure script's
|
||||
check for utmp/wtmp pathnames which are shown in the manual
|
||||
(Debian #1042767).</li>
|
||||
|
||||
<li><tt>CF_XOPEN_SOURCE</tt> provides for defining
|
||||
<tt>_DEFAULT_SOURCE</tt> for MinGW32 and MinGW64.</li>
|
||||
|
||||
<li>sed expression used to report gcc version now works
|
||||
with MinGW</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>ensure that line-attributes are reset after drawing missing
|
||||
character (report by Christian Weisgerber).</li>
|
||||
|
||||
<li>update config.guess, config.sub</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_384" id="xterm_384">Patch #384 -
|
||||
2023/07/10</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>exclude ASCII space from <code>showMissingGlyphs</code>,
|
||||
since a few bitmap fonts lack this (report by "SanRemo",
|
||||
Emanuel Haupt).</li>
|
||||
|
||||
<li>correct a step in rendering double-width characters with
|
||||
bitmap-fonts (report by Peter Fabinski, Debian #1039986).</li>
|
||||
|
||||
<li>fixes for ReGIS-related problems (report by Ben Wong):
|
||||
<ul>
|
||||
<li>mimic an undocumented hardware VT340 feature which
|
||||
handles color initialization with incomplete
|
||||
parameters.</li>
|
||||
|
||||
<li>handle whitespace between operator/operands for color
|
||||
values.</li>
|
||||
|
||||
<li>reset ReGIS-context when resetting graphics in
|
||||
<tt>RIS</tt>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_383" id="xterm_383">Patch #383 -
|
||||
2023/06/27</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>expand description of full- and soft-reset in the
|
||||
manual.</li>
|
||||
|
||||
<li>fixes for full- and soft-reset:
|
||||
<ul>
|
||||
<li>clear alternate screen on full reset.</li>
|
||||
|
||||
<li>disable menu-entry for active icon; it merely shows
|
||||
whether the feature is enabled.</li>
|
||||
|
||||
<li>use <tt>appcursorDefault</tt> and
|
||||
<tt>appkeypadDefault</tt> resources for reset of
|
||||
<tt>DECCKM</tt> and <tt>DECKPAM</tt>.</li>
|
||||
|
||||
<li>save initial resource values for
|
||||
<tt>sixelScrolling</tt> and <tt>privateColorRegisters</tt>,
|
||||
using those in full reset.</li>
|
||||
|
||||
<li>update checkbox for <em>Enable Blinking Cursor</em>
|
||||
(report by Rajeev V. Pillai).</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>add reply for <tt>DECSACE</tt> with <tt>DECRQSS</tt>.</li>
|
||||
|
||||
<li>modify status-line feature to exit without erasing for
|
||||
<tt>DECSTR</tt>.</li>
|
||||
|
||||
<li>add private mode <tt>1045</tt> which imitates the original
|
||||
xterm cursor-back reverse wrapping mode <tt>45</tt> (see
|
||||
<a href="#xterm_380">patch #380</a>).</li>
|
||||
|
||||
<li>improve checks for non-Unicode values, e.g., in
|
||||
<tt>DECRQCRA</tt>.</li>
|
||||
|
||||
<li>re-checkout from RCS archive to fix stale identifiers
|
||||
(report by Sven Joachim).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_382" id="xterm_382">Patch #382 -
|
||||
2023/05/30</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>amend change to <tt>CursorBack</tt> in <a href=
|
||||
"#xterm_380">patch #380</a>, allowing the result to be on the
|
||||
hidden right-half of double-cell characters (report by Rajeev
|
||||
V. Pillai).</li>
|
||||
|
||||
<li>amend <tt>xtermDrawString</tt>, fixing regression with
|
||||
<tt>--disable-wide-chars</tt> configuration from <a href=
|
||||
"#xterm_380">patch #380</a>.</li>
|
||||
|
||||
<li>corrected pathname for <tt>run-tic.sh</tt>, for full
|
||||
install in an out-of-tree build (report by Rajeev V.
|
||||
Pillai).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_381" id="xterm_381">Patch #381 -
|
||||
2023/05/28</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>fix a regression in wide bitmap fonts versus check for
|
||||
missing glyphs (report by Rajeev V. Pillai).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_380" id="xterm_380">Patch #380 -
|
||||
2023/05/09</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>simplify the change for <code>sixelScrolling</code> from
|
||||
<a href="#xterm_374">patch #374</a> (report by Per
|
||||
Bothner).</li>
|
||||
|
||||
<li>add <tt>xterm+focus</tt> and <tt>report+da2</tt>, update
|
||||
<tt>report+version</tt> building blocks in terminfo, from
|
||||
post-ncurses 6.4</li>
|
||||
|
||||
<li>drop the <tt>-title</tt> option from <tt>uxterm</tt> and
|
||||
<tt>koi8rxterm</tt>, because that interferes with deriving the
|
||||
default title from the <tt>-e</tt> option (Debian #1031837).
|
||||
Compensate for this by using the <tt>-class</tt> option to
|
||||
derive a default title.</li>
|
||||
|
||||
<li>improve description of readline 2003 mode in
|
||||
<tt>ctlseqs.ms</tt> (report by Thomas Wolff).</li>
|
||||
|
||||
<li>other improvements to status-line feature (report by Thomas
|
||||
Wolff):
|
||||
<ul>
|
||||
<li>clear status line on <tt>DECCOLM</tt></li>
|
||||
|
||||
<li>ignore <tt>DECSASD</tt> if no previous
|
||||
<tt>DECSSDT</tt></li>
|
||||
|
||||
<li>allow <tt>DECSSDT 1</tt> immediately after
|
||||
<tt>DECSSDT 2</tt>, i.e., without switching back to
|
||||
host mode.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>adjust <tt>RequestResize</tt> to avoid shrinking screen
|
||||
when using <tt>DECCOLM</tt> while the status-line is active
|
||||
(report/patch by Thomas Wolff).</li>
|
||||
|
||||
<li>disallow wrapping before the beginning of the screen, to
|
||||
the end of the screen, for cursor-back sequences (Redhat
|
||||
#2182357).</li>
|
||||
|
||||
<li>modify makefile to install the 16x16 xpm files (report by
|
||||
Harald Dunkel).</li>
|
||||
|
||||
<li>update test-package to reflect resolution of Debian
|
||||
#906901.</li>
|
||||
|
||||
<li>change default of <code>showMissingGlyphs</code> to
|
||||
<em>True</em>.</li>
|
||||
|
||||
<li>improve handling of double-sized characters when those
|
||||
happen to be missing from the bitmap font and/or are
|
||||
fullwidth.</li>
|
||||
|
||||
<li>pointer/overflow fixes (reported by David Leadbeater):
|
||||
<ul>
|
||||
<li>improve limit-checks for control-sequence numeric
|
||||
parameters in SIXEL graphics.</li>
|
||||
|
||||
<li>add null-pointer checks in <tt>WriteNow</tt> macro to
|
||||
handle a case where <tt>SS2</tt> or <tt>SS3</tt> might be
|
||||
in effect while processing a combining character.</li>
|
||||
|
||||
<li>disallow ReGIS reporting for character-set names
|
||||
containing characters other than alphanumerics or
|
||||
underscore.</li>
|
||||
|
||||
<li>implement TrueType fallback font for double-sized
|
||||
characters, including Unicode fullwidth. Also add
|
||||
<tt>limitFontHeight</tt> to provide for configuring the
|
||||
distinction between slightly-oversized glyphs and
|
||||
double-sized glyphs.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>configure script improvements:
|
||||
<ul>
|
||||
<li>check for <tt>nfsd_t</tt></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>fix a typo in the underline cursor thickness derivation
|
||||
(patch by Jan Engelhardt).</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_379" id="xterm_379">Patch #379 -
|
||||
2023/02/15</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>improve text-cursor (patch by Jan Engelhardt):
|
||||
<ul>
|
||||
<li>allow selecting <tt>CURSOR_BAR</tt> mode from
|
||||
command-line/Xresources.</li>
|
||||
|
||||
<li>draw cursor using filled rectangle instead of rectangle
|
||||
outline to permit thicker underlines/bars.</li>
|
||||
|
||||
<li>scale up cursor relative to font size.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>improve readline modes (Fedora #2166860):
|
||||
<ul>
|
||||
<li>document readline modes</li>
|
||||
|
||||
<li>change the feature to configure by default</li>
|
||||
|
||||
<li>replace hard-coded SS3 for cursor movement with current
|
||||
mode</li>
|
||||
|
||||
<li>replace hard-coded erase/lnext characters with current
|
||||
values</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>improve status-line (report by Thomas Wolff):
|
||||
<ul>
|
||||
<li><tt>RIS</tt> turns off status-line</li>
|
||||
|
||||
<li>Right-margin (<tt>DECLRMM</tt> and <tt>DECSLRM</tt>)
|
||||
limits the length of text written/updated in the
|
||||
status-line.</li>
|
||||
|
||||
<li>Most controls which affect the whole screen are ignored
|
||||
while updating the status-line.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>modify configure check for <tt>tgetent</tt> to allow for
|
||||
some special cases of ncurses configuration (report by Satadru
|
||||
Pramani).</li>
|
||||
|
||||
<li>reduce timeout, improve warning message if resize is run on
|
||||
a terminal which is not VT100-compatible.</li>
|
||||
|
||||
<li>reduce compiler warnings in configure script.</li>
|
||||
</ul>
|
||||
|
||||
<h1><a name="xterm_378" id="xterm_378">Patch #378 -
|
||||
2023/01/09</a></h1>
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: xterm_io.h,v 1.67 2020/01/18 18:48:19 tom Exp $ */
|
||||
/* $XTermId: xterm_io.h,v 1.69 2024/05/03 23:32:26 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2000-2018,2020 by Thomas E. Dickey
|
||||
* Copyright 2000-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -70,7 +70,7 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef linux
|
||||
#ifdef __linux__
|
||||
#define USE_TERMIOS
|
||||
#define HAVE_POSIX_OPENPT 1
|
||||
#define HAVE_PTSNAME 1
|
||||
|
@ -99,7 +99,7 @@
|
|||
#define HAVE_GRANTPT_PTY_ISATTY 1
|
||||
#endif
|
||||
|
||||
#if defined(__GLIBC__) && !(defined(linux) || defined(__GNU__))
|
||||
#if defined(__GLIBC__) && !(defined(__linux__) || defined(__GNU__))
|
||||
#define USE_POSIX_TERMIOS /* GNU/KFreeBSD and GNU/KNetBSD */
|
||||
#endif
|
||||
|
||||
|
@ -203,7 +203,7 @@
|
|||
|
||||
#ifdef Lynx
|
||||
#include <resource.h>
|
||||
#elif !(defined(SYSV) || defined(linux) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__)))
|
||||
#elif !(defined(SYSV) || defined(__linux__) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__)))
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
|
@ -225,7 +225,7 @@
|
|||
#include <sys/filio.h>
|
||||
#endif
|
||||
|
||||
#if defined(TIOCSLTC) && ! (defined(linux) || defined(__MVS__) || defined(Lynx) || defined(SVR4))
|
||||
#if defined(TIOCSLTC) && ! (defined(__linux__) || defined(__MVS__) || defined(Lynx) || defined(SVR4))
|
||||
#define HAS_LTCHARS
|
||||
#endif
|
||||
|
||||
|
@ -284,4 +284,18 @@
|
|||
|
||||
typedef unsigned short ttySize_t;
|
||||
|
||||
#ifdef USE_ANY_SYSV_TERMIO
|
||||
#define TERMIO_STRUCT struct termio
|
||||
#define ttySetAttr(fd, datap) ioctl(fd, TCSETA, datap)
|
||||
#define ttyGetAttr(fd, datap) ioctl(fd, TCGETA, datap)
|
||||
#define ttyFlush(fd) ioctl(fd, TCFLSH, 1)
|
||||
#elif defined(USE_POSIX_TERMIOS)
|
||||
#define TERMIO_STRUCT struct termios
|
||||
#define ttySetAttr(fd, datap) tcsetattr(fd, TCSANOW, datap)
|
||||
#define ttyGetAttr(fd, datap) tcgetattr(fd, datap)
|
||||
#define ttyFlush(fd) tcflush(fd, TCOFLUSH)
|
||||
#else
|
||||
#error Neither termio or termios is enabled
|
||||
#endif /* USE_ANY_SYSV_TERMIO */
|
||||
|
||||
#endif /* included_xterm_io_h */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $XTermId: xtermcap.c,v 1.58 2023/01/02 18:19:19 tom Exp $ */
|
||||
/* $XTermId: xtermcap.c,v 1.59 2023/12/25 21:18:03 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2007-2020,2023 by Thomas E. Dickey
|
||||
|
@ -649,6 +649,8 @@ free_termcap(XtermWidget xw)
|
|||
}
|
||||
FreeAndNull(screen->tcap_fkeys);
|
||||
}
|
||||
#else
|
||||
(void) xw;
|
||||
#endif
|
||||
TcapFree();
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: xtermcfg.hin,v 1.225 2022/02/13 13:50:45 tom Exp $ */
|
||||
/* $XTermId: xtermcfg.hin,v 1.232 2024/05/17 08:13:42 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1997-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -43,7 +43,6 @@
|
|||
* DEBUG* (any debug-option)
|
||||
* DUMP_* (mostly in the ReGIS/SIXEL code)
|
||||
* HAS_LTCHARS
|
||||
* HAVE_SYS_PTEM_H
|
||||
* PUCC_PTYD
|
||||
* USE_LOGIN_DASH_P
|
||||
* USE_X11TERM
|
||||
|
@ -65,15 +64,18 @@
|
|||
#define DFT_TERMTYPE "xterm" /* AC_ARG_WITH(default-term-type) */
|
||||
/* #undef DISABLE_SETGID */ /* CF_ARG_DISABLE(setgid) */
|
||||
/* #undef DISABLE_SETUID */ /* CF_ARG_DISABLE(setuid) */
|
||||
#define HAVE_CLOCK_GETTIME /* CF_FUNC_GETTIME */
|
||||
#define HAVE_ENDUSERSHELL /* AC_CHECK_FUNCS(endusershell) */
|
||||
#define HAVE_GETHOSTNAME 1 /* AC_CHECK_FUNCS(gethostname) */
|
||||
#define HAVE_GETLOGIN 1 /* AC_CHECK_FUNCS(getlogin) */
|
||||
#define HAVE_GETTIMEOFDAY /* CF_FUNC_GETTIME */
|
||||
#define HAVE_GETUSERSHELL /* AC_CHECK_FUNCS(getusershell) */
|
||||
/* #undef HAVE_GRANTPT */ /* CF_FUNC_GRANTPT */
|
||||
/* #undef HAVE_GRANTPT_PTY_ISATTY */ /* CF_FUNC_GRANTPT */
|
||||
#define HAVE_INITGROUPS 1 /* AC_CHECK_FUNCS(initgroups) */
|
||||
#define HAVE_LANGINFO_CODESET 1 /* AM_LANGINFO_CODESET */
|
||||
/* #undef HAVE_LASTLOG_H */ /* CF_LASTLOG */
|
||||
/* #undef HAVE_LIBUTIL_H */ /* AC_CHECK_HEADERS(libutil.h) */
|
||||
#define HAVE_LIBXPM /* CF_WITH_XPM */
|
||||
/* #undef HAVE_LIB_NEXTAW */ /* CF_X_ATHENA(--with-neXtaw) */
|
||||
/* #undef HAVE_LIB_PCRE */ /* CF_WITH_PCRE */
|
||||
|
@ -84,23 +86,29 @@
|
|||
/* #undef HAVE_LIB_XAWPLUS */ /* CF_X_ATHENA(--with-XawPlus) */
|
||||
#define HAVE_LIB_XCURSOR 1 /* AC_CHECK_LIB(Xcursor) */
|
||||
#define HAVE_MKDTEMP 1 /* AC_CHECK_FUNCS(mkdtemp) */
|
||||
#define HAVE_MKSTEMP /* CF_MKSTEMP */
|
||||
#define HAVE_MKSTEMP 1 /* CF_MKSTEMP */
|
||||
/* #undef HAVE_NCURSES_CURSES_H */ /* AC_CHECK_HEADERS(ncurses/curses.h) */
|
||||
/* #undef HAVE_NCURSES_TERM_H */ /* AC_CHECK_HEADERS(ncurses/term.h) */
|
||||
#define HAVE_PATHS_H 1 /* CF_LASTLOG */
|
||||
#define HAVE_PATHS_H 1 /* AC_CHECK_HEADERS(paths.h) */
|
||||
/* #undef HAVE_PCRE2POSIX_H */ /* CF_WITH_PCRE2 */
|
||||
/* #undef HAVE_PCRE2REGCOMP */ /* CF_WITH_PCRE2 */
|
||||
/* #undef HAVE_PCREPOSIX_H */ /* CF_WITH_PCRE */
|
||||
/* #undef HAVE_POSIX_OPENPT */ /* CF_FUNC_GRANTPT */
|
||||
#define HAVE_POSIX_SAVED_IDS 1 /* CF_POSIX_SAVED_IDS */
|
||||
/* #undef HAVE_PTSNAME */ /* CF_FUNC_GRANTPT */
|
||||
/* #undef HAVE_PTY_H */ /* AC_CHECK_HEADERS(pty.h) */
|
||||
#define HAVE_PUTENV 1 /* AC_CHECK_FUNCS(putenv) */
|
||||
#define HAVE_SCHED_YIELD 1 /* AC_CHECK_FUNCS(sched_yield) */
|
||||
#define HAVE_SETITIMER 1 /* CF_SETITIMER */
|
||||
#define HAVE_SETPGID /* AC_CHECK_FUNCS(setpgid) */
|
||||
#define HAVE_SETSID 1 /* AC_CHECK_FUNCS(setsid) */
|
||||
#define HAVE_STDINT_H 1 /* AC_PROG_CC_STDC */
|
||||
#define HAVE_STDLIB_H 1 /* AC_CHECK_HEADERS(stdlib.h) */
|
||||
#undef HAVE_STDNORETURN_H /* CF_C11_NORETURN */
|
||||
#define HAVE_STRFTIME 1 /* AC_CHECK_FUNCS(strftime) */
|
||||
/* #undef HAVE_STROPTS_H */ /* AC_CHECK_HEADERS(stropts.h) */
|
||||
#define HAVE_SYS_PARAM_H 1 /* AC_CHECK_HEADERS(sys/param.h) */
|
||||
/* #undef HAVE_SYS_PTEM_H */ /* AC_CHECK_HEADERS(sys/ptem.h) */
|
||||
/* #undef HAVE_SYS_TIME_H */ /* AC_HEADER_TIME */
|
||||
#define HAVE_SYS_TTYDEFAULTS_H 1 /* AC_CHECK_HEADERS(sys/ttydefaults.h) */
|
||||
#define HAVE_SYS_WAIT_H 1 /* AC_HEADER_SYS_WAIT */
|
||||
|
@ -113,6 +121,7 @@
|
|||
#define HAVE_UNISTD_H 1 /* AC_CHECK_HEADERS(unistd.h) */
|
||||
#define HAVE_UNSETENV /* AC_CHECK_FUNCS(unsetenv) */
|
||||
#define HAVE_USE_EXTENDED_NAMES 1 /* AC_CHECK_FUNCS(use_extended_names) */
|
||||
#define HAVE_UTIL_H /* AC_CHECK_HEADERS(util.h) */
|
||||
#define HAVE_UTMP 1 /* CF_UTMP */
|
||||
#define HAVE_UTMP_UT_HOST 1 /* CF_UTMP_UT_HOST */
|
||||
/* #undef HAVE_UTMP_UT_SESSION */ /* CF_UTMP_UT_SESSION */
|
||||
|
@ -222,6 +231,7 @@
|
|||
/* #undef cc_t */ /* CF_TYPE_CC_T */
|
||||
/* #undef gid_t */ /* AC_TYPE_UID_T */
|
||||
/* #undef mode_t */ /* AC_TYPE_MODE_T */
|
||||
/* +#undef nfds_t */ /* CF_TYPE_NFDS_T */
|
||||
/* #undef off_t */ /* AC_TYPE_OFF_T */
|
||||
/* #undef pid_t */ /* AC_TYPE_PID_T */
|
||||
/* #undef time_t */ /* AC_CHECK_TYPE(time_t, long) */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $XTermId: xtermcfg.hin,v 1.227 2022/09/11 19:26:01 tom Exp $ */
|
||||
/* $XTermId: xtermcfg.hin,v 1.233 2024/07/05 23:37:42 tom Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997-2021,2022 by Thomas E. Dickey
|
||||
* Copyright 1997-2023,2024 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -43,7 +43,6 @@
|
|||
* DEBUG* (any debug-option)
|
||||
* DUMP_* (mostly in the ReGIS/SIXEL code)
|
||||
* HAS_LTCHARS
|
||||
* HAVE_SYS_PTEM_H
|
||||
* PUCC_PTYD
|
||||
* USE_LOGIN_DASH_P
|
||||
* USE_X11TERM
|
||||
|
@ -65,15 +64,18 @@
|
|||
#undef DFT_TERMTYPE /* AC_ARG_WITH(default-term-type) */
|
||||
#undef DISABLE_SETGID /* CF_ARG_DISABLE(setgid) */
|
||||
#undef DISABLE_SETUID /* CF_ARG_DISABLE(setuid) */
|
||||
#undef HAVE_CLOCK_GETTIME /* CF_FUNC_GETTIME */
|
||||
#undef HAVE_ENDUSERSHELL /* AC_CHECK_FUNCS(endusershell) */
|
||||
#undef HAVE_GETHOSTNAME /* AC_CHECK_FUNCS(gethostname) */
|
||||
#undef HAVE_GETLOGIN /* AC_CHECK_FUNCS(getlogin) */
|
||||
#undef HAVE_GETTIMEOFDAY /* CF_FUNC_GETTIME */
|
||||
#undef HAVE_GETUSERSHELL /* AC_CHECK_FUNCS(getusershell) */
|
||||
#undef HAVE_GRANTPT /* CF_FUNC_GRANTPT */
|
||||
#undef HAVE_GRANTPT_PTY_ISATTY /* CF_FUNC_GRANTPT */
|
||||
#undef HAVE_INITGROUPS /* AC_CHECK_FUNCS(initgroups) */
|
||||
#undef HAVE_LANGINFO_CODESET /* AM_LANGINFO_CODESET */
|
||||
#undef HAVE_LASTLOG_H /* CF_LASTLOG */
|
||||
#undef HAVE_LIBUTIL_H /* AC_CHECK_HEADERS(libutil.h) */
|
||||
#undef HAVE_LIBXPM /* CF_WITH_XPM */
|
||||
#undef HAVE_LIB_NEXTAW /* CF_X_ATHENA(--with-neXtaw) */
|
||||
#undef HAVE_LIB_PCRE /* CF_WITH_PCRE */
|
||||
|
@ -94,13 +96,19 @@
|
|||
#undef HAVE_POSIX_OPENPT /* CF_FUNC_GRANTPT */
|
||||
#undef HAVE_POSIX_SAVED_IDS /* CF_POSIX_SAVED_IDS */
|
||||
#undef HAVE_PTSNAME /* CF_FUNC_GRANTPT */
|
||||
#undef HAVE_PTY_H /* AC_CHECK_HEADERS(pty.h) */
|
||||
#undef HAVE_PUTENV /* AC_CHECK_FUNCS(putenv) */
|
||||
#undef HAVE_SCHED_YIELD /* AC_CHECK_FUNCS(sched_yield) */
|
||||
#undef HAVE_SETITIMER /* CF_SETITIMER */
|
||||
#undef HAVE_SETPGID /* AC_CHECK_FUNCS(setpgid) */
|
||||
#undef HAVE_SETSID /* AC_CHECK_FUNCS(setsid) */
|
||||
#undef HAVE_STDINT_H /* AC_PROG_CC_STDC */
|
||||
#undef HAVE_STDLIB_H /* AC_CHECK_HEADERS(stdlib.h) */
|
||||
#undef HAVE_STDNORETURN_H /* CF_C11_NORETURN */
|
||||
#undef HAVE_STRFTIME /* AC_CHECK_FUNCS(strftime) */
|
||||
#undef HAVE_STROPTS_H /* AC_CHECK_HEADERS(stropts.h) */
|
||||
#undef HAVE_SYS_PARAM_H /* AC_CHECK_HEADERS(sys/param.h) */
|
||||
#undef HAVE_SYS_PTEM_H /* AC_CHECK_HEADERS(sys/ptem.h) */
|
||||
#undef HAVE_SYS_TIME_H /* AC_HEADER_TIME */
|
||||
#undef HAVE_SYS_TTYDEFAULTS_H /* AC_CHECK_HEADERS(sys/ttydefaults.h) */
|
||||
#undef HAVE_SYS_WAIT_H /* AC_HEADER_SYS_WAIT */
|
||||
|
@ -113,6 +121,7 @@
|
|||
#undef HAVE_UNISTD_H /* AC_CHECK_HEADERS(unistd.h) */
|
||||
#undef HAVE_UNSETENV /* AC_CHECK_FUNCS(unsetenv) */
|
||||
#undef HAVE_USE_EXTENDED_NAMES /* AC_CHECK_FUNCS(use_extended_names) */
|
||||
#undef HAVE_UTIL_H /* AC_CHECK_HEADERS(util.h) */
|
||||
#undef HAVE_UTMP /* CF_UTMP */
|
||||
#undef HAVE_UTMP_UT_HOST /* CF_UTMP_UT_HOST */
|
||||
#undef HAVE_UTMP_UT_SESSION /* CF_UTMP_UT_SESSION */
|
||||
|
@ -222,6 +231,7 @@
|
|||
#undef cc_t /* CF_TYPE_CC_T */
|
||||
#undef gid_t /* AC_TYPE_UID_T */
|
||||
#undef mode_t /* AC_TYPE_MODE_T */
|
||||
#undef nfds_t /* CF_TYPE_NFDS_T */
|
||||
#undef off_t /* AC_TYPE_OFF_T */
|
||||
#undef pid_t /* AC_TYPE_PID_T */
|
||||
#undef time_t /* AC_CHECK_TYPE(time_t, long) */
|
||||
|
|
|
@ -83,7 +83,6 @@
|
|||
./usr/X11R6/include/libdrm/vmwgfx_drm.h
|
||||
./usr/X11R6/include/va/va.h
|
||||
./usr/X11R6/include/va/va_backend.h
|
||||
./usr/X11R6/include/va/va_backend_glx.h
|
||||
./usr/X11R6/include/va/va_backend_prot.h
|
||||
./usr/X11R6/include/va/va_backend_vpp.h
|
||||
./usr/X11R6/include/va/va_compat.h
|
||||
|
@ -108,7 +107,6 @@
|
|||
./usr/X11R6/include/va/va_fei.h
|
||||
./usr/X11R6/include/va/va_fei_h264.h
|
||||
./usr/X11R6/include/va/va_fei_hevc.h
|
||||
./usr/X11R6/include/va/va_glx.h
|
||||
./usr/X11R6/include/va/va_prot.h
|
||||
./usr/X11R6/include/va/va_str.h
|
||||
./usr/X11R6/include/va/va_tpi.h
|
||||
|
@ -315,7 +313,6 @@
|
|||
./usr/X11R6/lib/libdrm_radeon_p.a
|
||||
./usr/X11R6/lib/libepoxy.a
|
||||
./usr/X11R6/lib/libepoxy.so.4.1
|
||||
./usr/X11R6/lib/libgallium_drv_video.a
|
||||
./usr/X11R6/lib/libgbm.a
|
||||
./usr/X11R6/lib/libgbm.so.0.6
|
||||
./usr/X11R6/lib/libgbm_p.a
|
||||
|
@ -324,8 +321,6 @@
|
|||
./usr/X11R6/lib/libglapi_p.a
|
||||
./usr/X11R6/lib/libva-drm.la
|
||||
./usr/X11R6/lib/libva-drm.so.2.22
|
||||
./usr/X11R6/lib/libva-glx.la
|
||||
./usr/X11R6/lib/libva-glx.so.2.22
|
||||
./usr/X11R6/lib/libva-x11.la
|
||||
./usr/X11R6/lib/libva-x11.so.2.22
|
||||
./usr/X11R6/lib/libva.la
|
||||
|
@ -349,7 +344,6 @@
|
|||
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
|
||||
./usr/X11R6/lib/pkgconfig/libdrm_intel.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-drm.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-glx.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-x11.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva.pc
|
||||
./usr/X11R6/lib/pkgconfig/osmesa.pc
|
||||
|
|
|
@ -78,7 +78,6 @@
|
|||
./usr/X11R6/include/libdrm/vmwgfx_drm.h
|
||||
./usr/X11R6/include/va/va.h
|
||||
./usr/X11R6/include/va/va_backend.h
|
||||
./usr/X11R6/include/va/va_backend_glx.h
|
||||
./usr/X11R6/include/va/va_backend_prot.h
|
||||
./usr/X11R6/include/va/va_backend_vpp.h
|
||||
./usr/X11R6/include/va/va_compat.h
|
||||
|
@ -103,7 +102,6 @@
|
|||
./usr/X11R6/include/va/va_fei.h
|
||||
./usr/X11R6/include/va/va_fei_h264.h
|
||||
./usr/X11R6/include/va/va_fei_hevc.h
|
||||
./usr/X11R6/include/va/va_glx.h
|
||||
./usr/X11R6/include/va/va_prot.h
|
||||
./usr/X11R6/include/va/va_str.h
|
||||
./usr/X11R6/include/va/va_tpi.h
|
||||
|
@ -303,7 +301,6 @@
|
|||
./usr/X11R6/lib/libdrm_radeon_p.a
|
||||
./usr/X11R6/lib/libepoxy.a
|
||||
./usr/X11R6/lib/libepoxy.so.4.1
|
||||
./usr/X11R6/lib/libgallium_drv_video.a
|
||||
./usr/X11R6/lib/libgbm.a
|
||||
./usr/X11R6/lib/libgbm.so.0.6
|
||||
./usr/X11R6/lib/libgbm_p.a
|
||||
|
@ -312,8 +309,6 @@
|
|||
./usr/X11R6/lib/libglapi_p.a
|
||||
./usr/X11R6/lib/libva-drm.la
|
||||
./usr/X11R6/lib/libva-drm.so.2.22
|
||||
./usr/X11R6/lib/libva-glx.la
|
||||
./usr/X11R6/lib/libva-glx.so.2.22
|
||||
./usr/X11R6/lib/libva-x11.la
|
||||
./usr/X11R6/lib/libva-x11.so.2.22
|
||||
./usr/X11R6/lib/libva.la
|
||||
|
@ -335,7 +330,6 @@
|
|||
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
|
||||
./usr/X11R6/lib/pkgconfig/libdrm_radeon.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-drm.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-glx.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-x11.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva.pc
|
||||
./usr/X11R6/lib/pkgconfig/osmesa.pc
|
||||
|
|
|
@ -78,7 +78,6 @@
|
|||
./usr/X11R6/include/libdrm/vmwgfx_drm.h
|
||||
./usr/X11R6/include/va/va.h
|
||||
./usr/X11R6/include/va/va_backend.h
|
||||
./usr/X11R6/include/va/va_backend_glx.h
|
||||
./usr/X11R6/include/va/va_backend_prot.h
|
||||
./usr/X11R6/include/va/va_backend_vpp.h
|
||||
./usr/X11R6/include/va/va_compat.h
|
||||
|
@ -103,7 +102,6 @@
|
|||
./usr/X11R6/include/va/va_fei.h
|
||||
./usr/X11R6/include/va/va_fei_h264.h
|
||||
./usr/X11R6/include/va/va_fei_hevc.h
|
||||
./usr/X11R6/include/va/va_glx.h
|
||||
./usr/X11R6/include/va/va_prot.h
|
||||
./usr/X11R6/include/va/va_str.h
|
||||
./usr/X11R6/include/va/va_tpi.h
|
||||
|
@ -303,7 +301,6 @@
|
|||
./usr/X11R6/lib/libdrm_radeon_p.a
|
||||
./usr/X11R6/lib/libepoxy.a
|
||||
./usr/X11R6/lib/libepoxy.so.4.1
|
||||
./usr/X11R6/lib/libgallium_drv_video.a
|
||||
./usr/X11R6/lib/libgbm.a
|
||||
./usr/X11R6/lib/libgbm.so.0.6
|
||||
./usr/X11R6/lib/libgbm_p.a
|
||||
|
@ -312,8 +309,6 @@
|
|||
./usr/X11R6/lib/libglapi_p.a
|
||||
./usr/X11R6/lib/libva-drm.la
|
||||
./usr/X11R6/lib/libva-drm.so.2.22
|
||||
./usr/X11R6/lib/libva-glx.la
|
||||
./usr/X11R6/lib/libva-glx.so.2.22
|
||||
./usr/X11R6/lib/libva-x11.la
|
||||
./usr/X11R6/lib/libva-x11.so.2.22
|
||||
./usr/X11R6/lib/libva.la
|
||||
|
@ -334,7 +329,6 @@
|
|||
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
|
||||
./usr/X11R6/lib/pkgconfig/libdrm_radeon.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-drm.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-glx.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-x11.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva.pc
|
||||
./usr/X11R6/lib/pkgconfig/osmesa.pc
|
||||
|
|
|
@ -83,7 +83,6 @@
|
|||
./usr/X11R6/include/libdrm/vmwgfx_drm.h
|
||||
./usr/X11R6/include/va/va.h
|
||||
./usr/X11R6/include/va/va_backend.h
|
||||
./usr/X11R6/include/va/va_backend_glx.h
|
||||
./usr/X11R6/include/va/va_backend_prot.h
|
||||
./usr/X11R6/include/va/va_backend_vpp.h
|
||||
./usr/X11R6/include/va/va_compat.h
|
||||
|
@ -108,7 +107,6 @@
|
|||
./usr/X11R6/include/va/va_fei.h
|
||||
./usr/X11R6/include/va/va_fei_h264.h
|
||||
./usr/X11R6/include/va/va_fei_hevc.h
|
||||
./usr/X11R6/include/va/va_glx.h
|
||||
./usr/X11R6/include/va/va_prot.h
|
||||
./usr/X11R6/include/va/va_str.h
|
||||
./usr/X11R6/include/va/va_tpi.h
|
||||
|
@ -315,7 +313,6 @@
|
|||
./usr/X11R6/lib/libdrm_radeon_p.a
|
||||
./usr/X11R6/lib/libepoxy.a
|
||||
./usr/X11R6/lib/libepoxy.so.4.1
|
||||
./usr/X11R6/lib/libgallium_drv_video.a
|
||||
./usr/X11R6/lib/libgbm.a
|
||||
./usr/X11R6/lib/libgbm.so.0.6
|
||||
./usr/X11R6/lib/libgbm_p.a
|
||||
|
@ -324,8 +321,6 @@
|
|||
./usr/X11R6/lib/libglapi_p.a
|
||||
./usr/X11R6/lib/libva-drm.la
|
||||
./usr/X11R6/lib/libva-drm.so.2.22
|
||||
./usr/X11R6/lib/libva-glx.la
|
||||
./usr/X11R6/lib/libva-glx.so.2.22
|
||||
./usr/X11R6/lib/libva-x11.la
|
||||
./usr/X11R6/lib/libva-x11.so.2.22
|
||||
./usr/X11R6/lib/libva.la
|
||||
|
@ -349,7 +344,6 @@
|
|||
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
|
||||
./usr/X11R6/lib/pkgconfig/libdrm_intel.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-drm.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-glx.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva-x11.pc
|
||||
./usr/X11R6/lib/pkgconfig/libva.pc
|
||||
./usr/X11R6/lib/pkgconfig/osmesa.pc
|
||||
|
|
|
@ -9,7 +9,9 @@
|
|||
./usr/X11R6/lib/modules/dri/kms_swrast_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r300_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r600_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r600_drv_video.so
|
||||
./usr/X11R6/lib/modules/dri/radeonsi_dri.so
|
||||
./usr/X11R6/lib/modules/dri/radeonsi_drv_video.so
|
||||
./usr/X11R6/lib/modules/dri/swrast_dri.so
|
||||
./usr/X11R6/lib/modules/drivers/amdgpu_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/amdgpu_drv.so
|
||||
|
@ -41,10 +43,8 @@
|
|||
./usr/X11R6/lib/modules/drivers/openchrome_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/r128_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/r128_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/r600_drv_video.so
|
||||
./usr/X11R6/lib/modules/drivers/radeon_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/radeon_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/radeonsi_drv_video.so
|
||||
./usr/X11R6/lib/modules/drivers/savage_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/savage_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/siliconmotion_drv.la
|
||||
|
|
|
@ -6,7 +6,9 @@
|
|||
./usr/X11R6/lib/modules/dri/kms_swrast_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r300_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r600_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r600_drv_video.so
|
||||
./usr/X11R6/lib/modules/dri/radeonsi_dri.so
|
||||
./usr/X11R6/lib/modules/dri/radeonsi_drv_video.so
|
||||
./usr/X11R6/lib/modules/dri/swrast_dri.so
|
||||
./usr/X11R6/lib/modules/drivers/amdgpu_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/amdgpu_drv.so
|
||||
|
@ -14,10 +16,8 @@
|
|||
./usr/X11R6/lib/modules/drivers/ati_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/modesetting_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/modesetting_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/r600_drv_video.so
|
||||
./usr/X11R6/lib/modules/drivers/radeon_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/radeon_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/radeonsi_drv_video.so
|
||||
./usr/X11R6/lib/modules/drivers/wsfb_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/wsfb_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/wsudl_drv.la
|
||||
|
|
|
@ -9,7 +9,9 @@
|
|||
./usr/X11R6/lib/modules/dri/kms_swrast_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r300_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r600_dri.so
|
||||
./usr/X11R6/lib/modules/dri/r600_drv_video.so
|
||||
./usr/X11R6/lib/modules/dri/radeonsi_dri.so
|
||||
./usr/X11R6/lib/modules/dri/radeonsi_drv_video.so
|
||||
./usr/X11R6/lib/modules/dri/swrast_dri.so
|
||||
./usr/X11R6/lib/modules/drivers/amdgpu_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/amdgpu_drv.so
|
||||
|
@ -43,10 +45,8 @@
|
|||
./usr/X11R6/lib/modules/drivers/openchrome_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/r128_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/r128_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/r600_drv_video.so
|
||||
./usr/X11R6/lib/modules/drivers/radeon_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/radeon_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/radeonsi_drv_video.so
|
||||
./usr/X11R6/lib/modules/drivers/savage_drv.la
|
||||
./usr/X11R6/lib/modules/drivers/savage_drv.so
|
||||
./usr/X11R6/lib/modules/drivers/siliconmotion_drv.la
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
# $OpenBSD: Makefile.bsd-wrapper,v 1.1 2024/07/19 14:35:16 rsadowski Exp $
|
||||
# $OpenBSD: Makefile.bsd-wrapper,v 1.4 2024/07/25 19:40:55 matthieu Exp $
|
||||
|
||||
SHARED_LIBS += va-drm 2.22
|
||||
SHARED_LIBS += va-glx 2.22
|
||||
SHARED_LIBS += va-x11 2.22
|
||||
SHARED_LIBS += va 2.22
|
||||
|
||||
CONFIGURE_ARGS= --disable-wayland
|
||||
LOCALBASE ?= /usr/local
|
||||
|
||||
CONFIGURE_ARGS= --disable-wayland --disable-glx
|
||||
CONFIGURE_ARGS+= \
|
||||
--with-drivers-path=${DESTDIR}${X11BASE}/lib/modules/drivers/
|
||||
--with-drivers-path=${DESTDIR}${X11BASE}/lib/modules/dri:${LOCALBASE}/lib/dri
|
||||
|
||||
.include <bsd.xorg.mk>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $OpenBSD: Makefile,v 1.10 2024/07/21 13:30:50 jsg Exp $
|
||||
# $OpenBSD: Makefile,v 1.12 2024/07/25 06:54:05 jsg Exp $
|
||||
|
||||
.include "config.mk"
|
||||
|
||||
|
@ -39,7 +39,6 @@ SUBDIR+= libisl_gfx${GFX}
|
|||
|
||||
.if ${WITH_GALLIUM_R300} == "yes" || ${WITH_GALLIUM_R600} == "yes" || \
|
||||
${WITH_GALLIUM_RADEONSI} == "yes" || make(obj)
|
||||
SUBDIR+= libva_st
|
||||
SUBDIR+= libradeonwinsys
|
||||
.endif
|
||||
|
||||
|
@ -102,8 +101,8 @@ SUBDIR+= libglapi libgbm libEGL libGL libGLESv1_CM libGLESv2 libOSMesa
|
|||
|
||||
SUBDIR+= libgallium_dri
|
||||
|
||||
.if ${WITH_VAAPI} == "yes" || make(obj)
|
||||
SUBDIR+= libgallium_drv_video
|
||||
.if ${WITH_GALLIUM_VA} == "yes" || make(obj)
|
||||
SUBDIR+= libva_st libgallium_drv_video
|
||||
.endif
|
||||
|
||||
.include <bsd.subdir.mk>
|
||||
|
|
|
@ -197,7 +197,7 @@ WITH_GALLIUM_IRIS=no
|
|||
WITH_AMD_VK=no
|
||||
WITH_INTEL_VK=no
|
||||
WITH_SSE41=no
|
||||
WITH_VAAPI=no
|
||||
WITH_GALLIUM_VA=no
|
||||
|
||||
WITH_DRI=yes
|
||||
WITH_GALLIUM_DRISW_KMS=yes
|
||||
|
@ -225,14 +225,12 @@ WITH_SSE41=yes
|
|||
${MACHINE} == "sparc64"
|
||||
WITH_GALLIUM_R300=yes
|
||||
WITH_GALLIUM_R600=yes
|
||||
WITH_VAAPI=yes
|
||||
CPPFLAGS+= -DHAVE_R300 -DHAVE_R600
|
||||
.endif
|
||||
|
||||
.if ${MACHINE} == "amd64" || ${MACHINE} == "arm64" || ${MACHINE} == "i386" || \
|
||||
${MACHINE} == "powerpc64" || ${MACHINE} == "riscv64"
|
||||
WITH_GALLIUM_RADEONSI=yes
|
||||
WITH_VAAPI=yes
|
||||
WITH_AMD_VK=yes
|
||||
CPPFLAGS+= -DHAVE_RADEONSI
|
||||
.endif
|
||||
|
@ -245,3 +243,8 @@ WITH_INTEL_VK=yes
|
|||
CPPFLAGS+= -DHAVE_I915 -DHAVE_CROCUS -DHAVE_IRIS \
|
||||
-DSUPPORT_INTEL_INTEGRATED_GPUS
|
||||
.endif
|
||||
|
||||
.if ${WITH_GALLIUM_R600} == "yes" || ${WITH_GALLIUM_RADEONSI} == "yes"
|
||||
WITH_GALLIUM_VA=yes
|
||||
CPPFLAGS+= -DHAVE_VA_SURFACE_ATTRIB_DRM_FORMAT_MODIFIERS
|
||||
.endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $OpenBSD: Makefile,v 1.2 2024/07/21 13:30:50 jsg Exp $
|
||||
# $OpenBSD: Makefile,v 1.4 2024/07/25 00:18:21 jsg Exp $
|
||||
|
||||
LIB= gallium_drv_video
|
||||
|
||||
|
@ -22,11 +22,6 @@ CPPFLAGS+= -I${MESA_SRC}/src/gallium/include \
|
|||
-I${MESA_SRC}/generated/src/gallium/drivers \
|
||||
-DGALLIUM_SOFTPIPE
|
||||
|
||||
obj: _xenocara_obj
|
||||
|
||||
.include <bsd.lib.mk>
|
||||
.include <bsd.xorg.mk>
|
||||
|
||||
.if ${WITH_GALLIUM_R600} == "yes"
|
||||
GALLIUM_DRIVERS+= r600
|
||||
CPPFLAGS+= -DGALLIUM_R600
|
||||
|
@ -42,11 +37,19 @@ CPPFLAGS+= -DGALLIUM_LLVMPIPE
|
|||
.endif
|
||||
|
||||
install:
|
||||
.for driver in ${GALLIUM_DRIVERS}
|
||||
${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \
|
||||
-o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
|
||||
lib${LIB}.so ${DESTDIR}${X11BASE}/lib/modules/drivers/${driver}_drv_video.so
|
||||
lib${LIB}.so ${DESTDIR}${X11BASE}/lib/modules/dri
|
||||
.for driver in ${GALLIUM_DRIVERS}
|
||||
ln -f ${DESTDIR}${X11BASE}/lib/modules/dri/lib${LIB}.so \
|
||||
${DESTDIR}${X11BASE}/lib/modules/dri/${driver}_drv_video.so
|
||||
.endfor
|
||||
rm ${DESTDIR}${X11BASE}/lib/modules/dri/lib${LIB}.so
|
||||
|
||||
obj: _xenocara_obj
|
||||
|
||||
.include <bsd.lib.mk>
|
||||
.include <bsd.xorg.mk>
|
||||
|
||||
SLIBS+= libdri \
|
||||
libmesa \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $OpenBSD: Makefile,v 1.1 2024/07/19 14:40:39 rsadowski Exp $
|
||||
# $OpenBSD: Makefile,v 1.2 2024/07/23 08:22:36 jsg Exp $
|
||||
|
||||
.include <bsd.xconf.mk>
|
||||
|
||||
|
@ -32,9 +32,9 @@ SRCS= buffer.c \
|
|||
CFLAGS+= ${C_VIS_ARGS}
|
||||
CXXFLAGS+= ${CXX_VIS_ARGS}
|
||||
|
||||
# XXX keep in sync with libva
|
||||
CFLAGS += -DVA_DRIVER_INIT_FUNC=__vaDriverInit_1_22
|
||||
CPPFLAGS += -DVA_DRIVER_INIT_FUNC=__vaDriverInit_1_22
|
||||
VA_INIT!= pkg-config --modversion libva \
|
||||
| awk -F. '{printf "__vaDriverInit_%d_%d\n", $$1, $$2}'
|
||||
CPPFLAGS+= -DVA_DRIVER_INIT_FUNC=${VA_INIT}
|
||||
|
||||
CPPFLAGS+= -I${MESA_SRC}/src/gallium/frontends/va \
|
||||
-I${MESA_SRC}/src/gallium/include \
|
||||
|
|
|
@ -299,17 +299,12 @@ LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_library_inf
|
|||
*/
|
||||
unwrap(passmgr)->add(createBarrierNoopPass());
|
||||
|
||||
/* This pass eliminates all loads and stores on alloca'd pointers. */
|
||||
unwrap(passmgr)->add(createPromoteMemoryToRegisterPass());
|
||||
#if LLVM_VERSION_MAJOR >= 16
|
||||
unwrap(passmgr)->add(createSROAPass(true));
|
||||
#else
|
||||
unwrap(passmgr)->add(createSROAPass());
|
||||
#endif
|
||||
/* TODO: restore IPSCCP */
|
||||
if (LLVM_VERSION_MAJOR >= 16)
|
||||
unwrap(passmgr)->add(createLoopSinkPass());
|
||||
/* TODO: restore IPSCCP */
|
||||
unwrap(passmgr)->add(createLICMPass());
|
||||
unwrap(passmgr)->add(createCFGSimplificationPass());
|
||||
/* This is recommended by the instruction combining pass. */
|
||||
|
|
|
@ -613,7 +613,11 @@ gallivm_compile_module(struct gallivm_state *gallivm)
|
|||
LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts);
|
||||
|
||||
if (!(gallivm_perf & GALLIVM_PERF_NO_OPT))
|
||||
#if LLVM_VERSION_MAJOR >= 18
|
||||
strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine<no-verify-fixpoint>");
|
||||
#else
|
||||
strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine");
|
||||
#endif
|
||||
else
|
||||
strcpy(passes, "mem2reg");
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue