diff options
42 files changed, 1952 insertions, 1074 deletions
diff --git a/app/xterm/MANIFEST b/app/xterm/MANIFEST index 7faef1c62..3ee8f0662 100644 --- a/app/xterm/MANIFEST +++ b/app/xterm/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for xterm-367, version xterm-367 +MANIFEST for xterm-369, version xterm-369 -------------------------------------------------------------------------------- MANIFEST this file 256colres.h resource-definitions for 256-color mode diff --git a/app/xterm/NEWS b/app/xterm/NEWS index ab33bd0a8..2717990a7 100644 --- a/app/xterm/NEWS +++ b/app/xterm/NEWS @@ -1,23 +1,43 @@ The NEWS file was generated from xterm.log.html, which serves as the changelog for xterm. -------------------------------------------------------------------------------- - Patch #367 - 2021/03/26 + Patch #369 - 2021/09/21 - * add OSC 22 to allow programs to select different pointer cursor at - runtime. - * change configuration for no-return functions to use _Noreturn when - it is available, because clang --analyze does not properly handle - the gcc noreturn attribute. - * add cursorTheme resource to provide a way to enable or disable the - cursor theme feature. - * modified CopyWait event retries to use shorter sleeps, to improve - responsiveness (tmux #2556). - * improve quoting/escaping in demo-scripts per shellcheck. - * add resizeByPixel resource, to permit disabling window manager - resizing-hints (patch by Tim Oehl). - * corrected printOptsImmediate handling of alternate-screen (report - by Abhijit Dasgupta). - * update sample terminfo to more closely match ncurses. - * add/improve limit-checks for Xlib calls (report by Roman Fiedler). - * fix a typo in the help-message (report by Tomas Korbar). + * modify run-tic.sh to work around bug in development version of + ncurses which was packaged in FreeBSD ports. + * remove ifdef's for OPT_COLOR_RES and OPT_COLOR_RES2. + * improve performance over slow connections (report by Harald + Dunkel). + * update cursor if restoring mode for DECTCEM. + * modify CharWidth macro to ensure that the shortcut for Latin-1 is + only applied when UTF-8 is not enabled, to fix a bug in handling + soft-hyphen from patch #334 changes (patch by Martijn van Duren). + * improve terminfo: + + fill-in function-keys in terminfo which are not Sun/HP + keyboards using xterm+nopcfkeys building-block. + + add kbeg to xterm+keypad to accommodate termcap applications + + add smglp and smgrp to vt420+lrmm, to provide useful data for + the "tabs" +m option + * support shift-tab in Sun, HP and SCO keyboards. + * document some legacy features in ctlseqs.ms (prompted by discussion + with Jimmy Aguilar Mena "Ergus"). + * add “trim” option to cdXtraScroll and tiXtraScroll. + * remove support for non-fifo save-lines configuration. + * extend cdXtraScroll to check if the cursor is at the upper-left of + the scrolling region when the erasure is for the remainder of the + screen versus the whole screen (prompted by discussion with Jörg + Breitbart). + * add workaround for broken pcre2 package in Debian 10. + * change screen-refresh call used for DECCARA and DECRARA to ensure + that trailing blanks which are part of the rectangle are repainted + (report/analysis by Dennis Filder). + * when resetting the terminal, ensure that the cursor shape also is + reset, e.g., if DECSCUSR has been used to modify the cursor shape + for an xterm which was started with the underlined cursor option + (report/analysis by Luis Javier Merino). + * prevent DECSCUSR from blinking the cursor if the cursorBlink + resource is “never” (report by Vladimir D Seleznev). + * invert the sense of DECSDM, to correspond with VT382 manuals (lsix + #41). + * update tables in wcwidth.c based on Unicode 14.0.0 diff --git a/app/xterm/THANKS b/app/xterm/THANKS index 9ddcd7caf..82e395360 100644 --- a/app/xterm/THANKS +++ b/app/xterm/THANKS @@ -1,4 +1,4 @@ --- $XTermId: THANKS,v 1.31 2021/03/01 22:00:49 tom Exp $ +-- $XTermId: THANKS,v 1.32 2021/09/12 23:14:32 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. @@ -72,6 +72,7 @@ David Wolfskill David Wood David Yeo Denis Zaitsev +Dennis Filder Dennis Preiser Dennis Schneider Dimitrios Christidis @@ -137,12 +138,14 @@ Lauri Tirkkonen Leandro Lupori Lee Olsen Loïc Minier +Luis Javier Merino Marc Bevand Marc La France Marco Peereboom Marius Tolzmann Mark Waggoner Markus Kuhn +Martijn van Duren Martin Hostettler Martin Pirker Martin Tournoij @@ -213,6 +216,7 @@ Sergey Vlasov Slava Semushin Stefan Assmann Stefan Dirsch +Stelios Bounanos Stephen P Wall Stuart Lissaman Sven Joachim diff --git a/app/xterm/Tekproc.c b/app/xterm/Tekproc.c index fb1237fcc..d43c1617d 100644 --- a/app/xterm/Tekproc.c +++ b/app/xterm/Tekproc.c @@ -1,4 +1,4 @@ -/* $XTermId: Tekproc.c,v 1.243 2021/03/21 22:08:46 tom Exp $ */ +/* $XTermId: Tekproc.c,v 1.245 2021/06/03 21:23:18 tom Exp $ */ /* * Copyright 2001-2020,2021 by Thomas E. Dickey @@ -402,6 +402,8 @@ TekInit(void) XtNmenuHeight, menu_high, #endif (XtPointer) 0); + TRACE(("created tek4014 widget %p, window %#lx\n", + (void *) tekWidget, XtWindow(tekWidget))); #if OPT_TOOLBAR ShowToolbar(resource.toolBar); #endif diff --git a/app/xterm/button.c b/app/xterm/button.c index 34e4d14f5..c87567bd0 100644 --- a/app/xterm/button.c +++ b/app/xterm/button.c @@ -1,4 +1,4 @@ -/* $XTermId: button.c,v 1.636 2021/02/10 01:14:51 tom Exp $ */ +/* $XTermId: button.c,v 1.637 2021/08/12 00:33:06 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -79,17 +79,45 @@ button.c Handles button events in the terminal emulator. #include <xstrings.h> #if OPT_SELECT_REGEX -#ifdef HAVE_PCRE2POSIX_H +#if defined(HAVE_PCRE2POSIX_H) #include <pcre2posix.h> -#else -#ifdef HAVE_PCREPOSIX_H + +/* pcre2 used to provide its "POSIX" entrypoints using the same names as the + * standard ones in the C runtime, but that never worked because the linker + * would use the C runtime. Debian patched the library to fix this symbol + * conflict, but overlooked the header file, and Debian's patch was made + * obsolete when pcre2 was changed early in 2019 to provide different names. + * + * Here is a workaround to make the older version of Debian's package work. + */ +#if !defined(PCRE2regcomp) && defined(HAVE_PCRE2REGCOMP) + +#undef regcomp +#undef regexec +#undef regfree + +#ifdef __cplusplus +extern "C" { +#endif + PCRE2POSIX_EXP_DECL int PCRE2regcomp(regex_t *, const char *, int); + PCRE2POSIX_EXP_DECL int PCRE2regexec(const regex_t *, const char *, size_t, + regmatch_t *, int); + PCRE2POSIX_EXP_DECL void PCRE2regfree(regex_t *); +#ifdef __cplusplus +} /* extern "C" */ +#endif +#define regcomp(r,s,n) PCRE2regcomp(r,s,n) +#define regexec(r,s,n,m,x) PCRE2regexec(r,s,n,m,x) +#define regfree(r) PCRE2regfree(r) +#endif +/* end workaround... */ +#elif defined(HAVE_PCREPOSIX_H) #include <pcreposix.h> #else /* POSIX regex.h */ #include <sys/types.h> #include <regex.h> #endif -#endif -#endif +#endif /* OPT_SELECT_REGEX */ #ifdef HAVE_X11_TRANSLATEI_H #include <X11/ConvertI.h> diff --git a/app/xterm/cachedGCs.c b/app/xterm/cachedGCs.c index 8bc2a50f6..896487d08 100644 --- a/app/xterm/cachedGCs.c +++ b/app/xterm/cachedGCs.c @@ -1,4 +1,4 @@ -/* $XTermId: cachedGCs.c,v 1.80 2021/02/02 00:20:11 tom Exp $ */ +/* $XTermId: cachedGCs.c,v 1.81 2021/09/16 19:48:02 tom Exp $ */ /* * Copyright 2007-2019,2021 by Thomas E. Dickey @@ -217,20 +217,11 @@ tracePixel(XtermWidget xw, Pixel value) if (result == 0) { for (n = 0; n < MAXCOLORS; ++n) { -#if OPT_COLOR_RES if (screen->Acolors[n].mode > 0 && value == screen->Acolors[n].value) { result = screen->Acolors[n].resource; break; } -#else - if (value == screen->Acolors[n]) { - char temp[80]; - sprintf(temp, "Acolors[%d]", n); - result = x_strdup(temp); - break; - } -#endif } } diff --git a/app/xterm/charproc.c b/app/xterm/charproc.c index 7eccf4270..c2fc6609b 100644 --- a/app/xterm/charproc.c +++ b/app/xterm/charproc.c @@ -1,4 +1,4 @@ -/* $XTermId: charproc.c,v 1.1830 2021/03/21 22:45:24 tom Exp $ */ +/* $XTermId: charproc.c,v 1.1846 2021/09/18 00:04:08 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -448,7 +448,7 @@ static XtResource xterm_resources[] = Bres(XtNboldMode, XtCBoldMode, screen.bold_mode, True), Bres(XtNbrokenSelections, XtCBrokenSelections, screen.brokenSelections, False), Bres(XtNc132, XtCC132, screen.c132, False), - Bres(XtNcdXtraScroll, XtCCdXtraScroll, misc.cdXtraScroll, False), + Sres(XtNcdXtraScroll, XtCCdXtraScroll, misc.cdXtraScroll_s, DEF_CD_XTRA_SCROLL), Bres(XtNcolorInnerBorder, XtCColorInnerBorder, misc.color_inner_border, False), Bres(XtNcurses, XtCCurses, screen.curses, False), Bres(XtNcutNewline, XtCCutNewline, screen.cutNewline, True), @@ -490,7 +490,7 @@ static XtResource xterm_resources[] = screen.selectToClipboard, False), Bres(XtNsignalInhibit, XtCSignalInhibit, misc.signalInhibit, False), Bres(XtNtiteInhibit, XtCTiteInhibit, misc.titeInhibit, False), - Bres(XtNtiXtraScroll, XtCTiXtraScroll, misc.tiXtraScroll, False), + Sres(XtNtiXtraScroll, XtCTiXtraScroll, misc.tiXtraScroll_s, DEF_TI_XTRA_SCROLL), Bres(XtNtrimSelection, XtCTrimSelection, screen.trim_selection, False), Bres(XtNunderLine, XtCUnderLine, screen.underline, True), Bres(XtNvisualBell, XtCVisualBell, screen.visualbell, False), @@ -683,14 +683,6 @@ static XtResource xterm_resources[] = COLOR_RES("IT", screen.Acolors[COLOR_IT], DFT_COLOR(XtDefaultForeground)), #endif -#if !OPT_COLOR_RES2 -#if OPT_256_COLORS -# include <256colres.h> -#elif OPT_88_COLORS -# include <88colres.h> -#endif -#endif /* !OPT_COLOR_RES2 */ - #endif /* OPT_ISO_COLORS */ CLICK_RES("2", screen.onClick[1], "word"), @@ -801,6 +793,7 @@ static XtResource xterm_resources[] = #if OPT_SCROLL_LOCK Bres(XtNallowScrollLock, XtCAllowScrollLock, screen.allowScrollLock0, False), + Bres(XtNautoScrollLock, XtCAutoScrollLock, screen.autoScrollLock, False), #endif /* these are used only for testing ncurses, not in the manual page */ @@ -2305,7 +2298,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) */ if (c >= 0x300 && screen->wide_chars - && CharWidth(c) == 0 + && CharWidth(screen, c) == 0 && !isWideControl(c)) { int prev, test; Boolean used = True; @@ -2330,9 +2323,9 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) prev = (int) XTERM_CELL(use_row, use_col); test = do_precomposition(prev, (int) c); TRACE(("do_precomposition (U+%04X [%d], U+%04X [%d]) -> U+%04X [%d]\n", - prev, CharWidth(prev), - (int) c, CharWidth(c), - test, CharWidth(test))); + prev, CharWidth(screen, prev), + (int) c, CharWidth(screen, c), + test, CharWidth(screen, test))); } else { prev = -1; test = -1; @@ -2342,7 +2335,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) * only if it does not change the width of the base character */ if (test != -1 - && CharWidth(test) == CharWidth(prev)) { + && CharWidth(screen, test) == CharWidth(screen, prev)) { putXtermCell(screen, use_row, use_col, test); } else if (screen->char_was_written || getXtermCell(screen, use_row, use_col) >= ' ') { @@ -2968,7 +2961,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) case CASE_ED: TRACE(("CASE_ED - erase display\n")); - do_cd_xtra_scroll(xw); + do_cd_xtra_scroll(xw, zero_if_default(0)); do_erase_display(xw, zero_if_default(0), OFF_PROTECT); ResetState(sp); break; @@ -2994,7 +2987,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) case CASE_DL: TRACE(("CASE_DL - delete line\n")); - DeleteLine(xw, one_if_default(0)); + DeleteLine(xw, one_if_default(0), True); ResetState(sp); break; @@ -3913,8 +3906,10 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) screen->cursor_shape, BtoS(blinks))); if (change) { xtermSetCursorBox(screen); - screen->cursor_blink_esc = blinks; - UpdateCursorBlink(xw); + if (SettableCursorBlink(screen)) { + screen->cursor_blink_esc = blinks; + UpdateCursorBlink(xw); + } } } ResetState(sp); @@ -4551,7 +4546,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) value = zero_if_default(0); TRACE(("CASE_DECFRA - Fill rectangular area\n")); - if (nparam > 0 && CharWidth(value) > 0) { + if (nparam > 0 && CharWidth(screen, value) > 0) { xtermParseRect(xw, ParamPair(1), &myRect); ScrnFillRectangle(xw, &myRect, value, xw->flags, True); } @@ -4860,7 +4855,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) case CASE_REP: TRACE(("CASE_REP\n")); - if (CharWidth(sp->lastchar) > 0) { + if (CharWidth(screen, sp->lastchar) > 0) { IChar repeated[2]; count = one_if_default(0); repeated[0] = (IChar) sp->lastchar; @@ -5792,7 +5787,7 @@ dotext(XtermWidget xw, buf[n] <= 0xa0) { last_chomp = 1; } else { - last_chomp = CharWidth(buf[n]); + last_chomp = CharWidth(screen, buf[n]); if (last_chomp <= 0) { IChar ch = buf[n]; Bool eat_it = !screen->utf8_mode && (ch > 127); @@ -7014,6 +7009,7 @@ restoremodes(XtermWidget xw) break; case srm_DECTCEM: /* Show/hide cursor (VT200) */ DoRM(DP_CRS_VISIBLE, screen->cursor_set); + updateCursor(xw); break; case srm_RXVT_SCROLLBAR: if ((screen->fullVwin.sb_info.width != 0) != @@ -7993,15 +7989,14 @@ ToAlternate(XtermWidget xw, Bool clearFirst) if (screen->whichBuf == 0) { TRACE(("ToAlternate\n")); - if (!screen->editBuf_index[1]) + if (!screen->editBuf_index[1]) { screen->editBuf_index[1] = allocScrnBuf(xw, (unsigned) MaxRows(screen), (unsigned) MaxCols(screen), &screen->editBuf_data[1]); + } SwitchBufs(xw, 1, clearFirst); -#if OPT_SAVE_LINES screen->visbuf = screen->editBuf_index[screen->whichBuf]; -#endif update_altscreen(); } } @@ -8013,12 +8008,11 @@ FromAlternate(XtermWidget xw) if (screen->whichBuf != 0) { TRACE(("FromAlternate\n")); - if (screen->scroll_amt) + if (screen->scroll_amt) { FlushScroll(xw); + } SwitchBufs(xw, 0, False); -#if OPT_SAVE_LINES screen->visbuf = screen->editBuf_index[screen->whichBuf]; -#endif update_altscreen(); } } @@ -8056,9 +8050,7 @@ Bool CheckBufPtrs(TScreen *screen) { return (screen->visbuf != 0 -#if OPT_SAVE_LINES && screen->editBuf_index[0] != 0 -#endif && screen->editBuf_index[1] != 0); } @@ -8069,16 +8061,7 @@ void SwitchBufPtrs(TScreen *screen, int toBuf) { if (CheckBufPtrs(screen)) { -#if OPT_SAVE_LINES screen->visbuf = screen->editBuf_index[toBuf]; -#else - size_t len = ScrnPointers(screen, (size_t) MaxRows(screen)); - - (void) toBuf; - memcpy(screen->save_ptr, screen->visbuf, len); - memcpy(screen->visbuf, screen->editBuf_index[1], len); - memcpy(screen->editBuf_index[1], screen->save_ptr, len); -#endif } } @@ -8397,7 +8380,6 @@ VTClassInit(void) (XtConvertArgList) NULL, (Cardinal) 0); } -#if OPT_COLOR_RES /* * Override the use of XtDefaultForeground/XtDefaultBackground to make some * colors, such as cursor color, use the actual foreground/background value @@ -8464,11 +8446,6 @@ repairColors(XtermWidget target) screen->Tcolors[TEXT_BG].value = target->dft_background; } } -#else -#define fill_Tres(target, source, offset) \ - TScreenOf(target)->Tcolors[offset] = TScreenOf(source)->Tcolors[offset] -#define repairColors(target) /* nothing */ -#endif #if OPT_WIDE_CHARS static void @@ -9069,6 +9046,7 @@ VTInitialize(Widget wrequest, static const FlagList tblRenderFont[] = { DATA(Default) + ,DATA(DefaultOff) ,DATA_END }; #undef DATA @@ -9113,6 +9091,14 @@ VTInitialize(Widget wrequest, }; #undef DATA +#define DATA(name) { #name, ed##name } + static const FlagList tblCdXtraScroll[] = + { + DATA(Trim) + ,DATA_END + }; +#undef DATA + XtermWidget request = (XtermWidget) wrequest; XtermWidget wnew = (XtermWidget) new_arg; Widget my_parent = SHELL_OF(wnew); @@ -9122,7 +9108,7 @@ VTInitialize(Widget wrequest, Bool color_ok; #endif -#if OPT_ISO_COLORS && OPT_COLOR_RES2 +#if OPT_ISO_COLORS static XtResource fake_resources[] = { #if OPT_256_COLORS @@ -9131,7 +9117,8 @@ VTInitialize(Widget wrequest, # include <88colres.h> #endif }; -#endif /* OPT_COLOR_RES2 */ +#endif + TScreen *screen = TScreenOf(wnew); char *saveLocale = xtermSetLocale(LC_NUMERIC, "C"); #if OPT_BLINK_CURS @@ -9441,6 +9428,7 @@ VTInitialize(Widget wrequest, #if OPT_SCROLL_LOCK init_Bres(screen.allowScrollLock0); + init_Bres(screen.autoScrollLock); #endif init_Sres(screen.disallowedColorOps); @@ -9518,12 +9506,18 @@ VTInitialize(Widget wrequest, init_Bres(misc.signalInhibit); init_Bres(misc.titeInhibit); - init_Bres(misc.tiXtraScroll); - init_Bres(misc.cdXtraScroll); init_Bres(misc.color_inner_border); init_Bres(misc.dynamicColors); init_Bres(misc.resizeByPixel); + init_Sres(misc.cdXtraScroll_s); + wnew->misc.cdXtraScroll = + extendedBoolean(request->misc.cdXtraScroll_s, tblCdXtraScroll, edLast); + + init_Sres(misc.tiXtraScroll_s); + wnew->misc.tiXtraScroll = + extendedBoolean(request->misc.tiXtraScroll_s, tblCdXtraScroll, edLast); + #if OPT_DEC_CHRSET for (i = 0; i < NUM_CHRSET; i++) { screen->double_fonts[i].warn = fwResource; @@ -9666,37 +9660,31 @@ VTInitialize(Widget wrequest, init_Bres(screen.direct_color); #endif -#if OPT_COLOR_RES2 TRACE(("...will fake resources for color%d to color%d\n", MIN_ANSI_COLORS, NUM_ANSI_COLORS - 1)); -#endif - for (i = 0, color_ok = False; i < MAXCOLORS; i++) { -#if OPT_COLOR_RES2 + for (i = 0, color_ok = False; i < MAXCOLORS; i++) { /* * Xt has a hardcoded limit on the maximum number of resources that can - * be used in a widget. If we configure both luit (which implies + * be used in a widget. If we configured both luit (which implies * wide-characters) and 256-colors, it goes over that limit. Most * people would not need a resource-file with 256-colors; the default - * values in our table are sufficient. In that case, fake the resource - * setting by copying the default value from the table. The #define's - * can be overridden to make these true resources. + * values in our table are sufficient. Fake the resource setting by + * copying the default value from the table. The #define's can be + * overridden to make these true resources. */ if (i >= MIN_ANSI_COLORS && i < NUM_ANSI_COLORS) { screen->Acolors[i].resource = x_strtrim(fake_resources[i - MIN_ANSI_COLORS].default_addr); if (screen->Acolors[i].resource == 0) screen->Acolors[i].resource = XtDefaultForeground; - } else -#endif /* OPT_COLOR_RES2 */ - { + } else { screen->Acolors[i] = TScreenOf(request)->Acolors[i]; screen->Acolors[i].resource = x_strtrim(screen->Acolors[i].resource); } -#if OPT_COLOR_RES TRACE(("Acolors[%d] = %s\n", i, screen->Acolors[i].resource)); screen->Acolors[i].mode = False; if (DftFg(Acolors[i])) { @@ -9708,13 +9696,6 @@ VTInitialize(Widget wrequest, } else { color_ok = True; } -#else - TRACE(("Acolors[%d] = %#lx\n", i, TScreenOf(request)->Acolors[i])); - if (screen->Acolors[i] != wnew->dft_foreground && - screen->Acolors[i] != T_COLOR(screen, TEXT_FG) && - screen->Acolors[i] != T_COLOR(screen, TEXT_BG)) - color_ok = True; -#endif } /* @@ -9783,7 +9764,6 @@ VTInitialize(Widget wrequest, init_Mres(screen.hilite_color); if (screen->hilite_color == Maybe) { screen->hilite_color = False; -#if OPT_COLOR_RES /* * If the highlight text/background are both set, and if they are * not equal to either the text/background or background/text, then @@ -9798,7 +9778,6 @@ VTInitialize(Widget wrequest, TRACE(("...setting hilite_color automatically\n")); screen->hilite_color = True; } -#endif } #endif @@ -9837,6 +9816,8 @@ VTInitialize(Widget wrequest, wnew->work.render_font = erTrue; TRACE(("initially using TrueType font\n")); } + } else if (wnew->work.render_font == erDefaultOff) { + wnew->work.render_font = erFalse; } /* minor tweak to make debug traces consistent: */ if (wnew->work.render_font) { @@ -10316,6 +10297,7 @@ cleanupInputMethod(XtermWidget xw) static void freeVTwin(Display *dpy, const char *whichWin, VTwin *win) { + (void) whichWin; TRACE_FREE_GC(whichWin, win->filler_gc); TRACE_FREE_GC(whichWin, win->border_gc); TRACE_FREE_GC(whichWin, win->marker_gc[0]); @@ -10338,11 +10320,11 @@ VTDestroy(Widget w GCC_UNUSED) XtUninstallTranslations(screen->scrollWidget); XtDestroyWidget(screen->scrollWidget); } -#if OPT_FIFO_LINES + while (screen->saved_fifo > 0) { deleteScrollback(screen); } -#endif + while (screen->save_title != 0) { SaveTitle *last = screen->save_title; screen->save_title = last->next; @@ -10362,7 +10344,6 @@ VTDestroy(Widget w GCC_UNUSED) TRACE_FREE_LEAK(xw->saved_colors.palettes[n]); } #endif -#if OPT_COLOR_RES for (n = 0; n < NCOLORS; n++) { switch (n) { #if OPT_TEK4014 @@ -10378,7 +10359,6 @@ VTDestroy(Widget w GCC_UNUSED) break; } } -#endif FreeMarkGCs(xw); TRACE_FREE_LEAK(screen->unparse_bfr); TRACE_FREE_LEAK(screen->save_ptr); @@ -12534,6 +12514,7 @@ ReallyReset(XtermWidget xw, Bool full, Bool saved) /* make cursor visible */ screen->cursor_set = ON; InitCursorShape(screen, screen); + xtermSetCursorBox(screen); #if OPT_BLINK_CURS SetCursorBlink(xw, screen->cursor_blink_i); screen->cursor_blink_esc = 0; diff --git a/app/xterm/configure.in b/app/xterm/configure.in index 57541fdd3..c468c45b8 100644 --- a/app/xterm/configure.in +++ b/app/xterm/configure.in @@ -1,4 +1,4 @@ -dnl $XTermId: configure.in,v 1.379 2021/03/21 16:48:26 tom Exp $ +dnl $XTermId: configure.in,v 1.380 2021/08/22 19:49:13 tom Exp $ dnl dnl ----------------------------------------------------------------------------- dnl this file is part of xterm @@ -714,8 +714,8 @@ CF_ARG_DISABLE(fifo-lines, [enable_fifo_lines=no], [enable_fifo_lines=yes]) AC_MSG_RESULT($enable_fifo_lines) -if test "$enable_fifo_lines" = yes ; then - AC_DEFINE(OPT_FIFO_LINES,1,[Define to 1 to disable FIFO-storage for saved-lines]) +if test "$enable_fifo_lines" != yes ; then + AC_MSG_WARN(this option has been deprecated) fi AC_MSG_CHECKING(if you want support for internationalization) diff --git a/app/xterm/ctlseqs.ms b/app/xterm/ctlseqs.ms index 25e58e5e1..5af46fac0 100644 --- a/app/xterm/ctlseqs.ms +++ b/app/xterm/ctlseqs.ms @@ -1,6 +1,6 @@ .\"#! troff -ms $1 -*- Nroff -*- .\" "Xterm Control Sequences" document -.\" $XTermId: ctlseqs.ms,v 1.612 2021/03/24 00:41:44 tom Exp $ +.\" $XTermId: ctlseqs.ms,v 1.633 2021/09/11 23:17:26 tom Exp $ .\" .\" .\" Copyright 1996-2020,2021 by Thomas E. Dickey @@ -69,8 +69,8 @@ .\" .ds XT XTerm .ds xt xterm -.ds LF Patch #367 -.ds RF 2021/03/23 +.ds LF Patch #369 +.ds RF 2021/09/11 .\" .if n .pl 9999v \" no page breaks in nroff .ND @@ -373,7 +373,7 @@ Individual values for the parameters are listed with \*(Ps . .IP \*(Pt A text parameter composed of printable characters. . -.Sh "Control Bytes, Characters, and Sequences" +.Ss "Control Bytes, Characters, and Sequences" .LP ECMA-48 (aka \*(``ISO 6429\*('') documents C1 (8-bit) and C0 (7-bit) codes. Those are respectively codes 128 to 159 and 0 to 31. @@ -453,7 +453,7 @@ string mode if it decodes a common control character such as carriage return before the string terminator. .RE . -.Sh "C1 (8-Bit) Control Characters" +.Ss "C1 (8-Bit) Control Characters" .LP The \fI\*(xt\fP program recognizes both 8-bit and 7-bit control characters. It generates 7-bit controls (by default) or 8-bit if S8C1T is enabled. @@ -514,7 +514,7 @@ Application Program Command (\*(AP is 0x9f). .LP These control characters are used in the vtXXX emulation. . -.Sh "VT100 Mode" +.Ss "VT100-related terminals" .LP In this document, \*(``VT100\*('' refers not only to VT100/VT102, but also to the succession of upward-compatible terminals produced @@ -535,7 +535,7 @@ since the only way X provides for this will affect all windows. .LP There are additional control sequences to provide \fI\*(xt-\fPdependent functions, such as the scrollbar or window size. -Where the function is specified by DEC or ECMA-48, the code assigned +Where the function is specified by DEC or ECMA-48, the mnemonic assigned to it is given in parentheses. .LP The escape codes to designate and invoke @@ -545,6 +545,7 @@ discussion of character sets). Many of the features are optional; \fI\*(xt\fP can be configured and built without support for them. . +.Sh "VT100 Mode" .Ss Single-character functions .St .IP \\*(Be @@ -1320,7 +1321,7 @@ This may be disabled by the \fBtiteInhibit\fP resource. \*(Ps = \*6\*7 \(-> Backarrow key sends backspace (DECBKM), VT340, VT420. This sets the \fBbackarrowKey\fP resource to \*(``true\*(''. \*(Ps = \*6\*9 \(-> Enable left and right margin mode (DECLRMM), VT420 and up. - \*(Ps = \*8\*0 \(-> Enable \fISixel Scrolling\fP (DECSDM). + \*(Ps = \*8\*0 \(-> Disable \fISixel Scrolling\fP (DECSDM). \*(Ps = \*9\*5 \(-> Do not clear screen when DECCOLM is set/reset (DECNCSM), VT510 and up. \*(Ps = \*1\*0\*0\*0 \(-> Send Mouse X & Y on button press and release. @@ -1455,7 +1456,7 @@ This is normally disabled by a compile-time option. This sets the \fBbackarrowKey\fP resource to \*(``false\*(''. \*(Ps = \*6\*9 \(-> Disable left and right margin mode (DECLRMM), VT420 and up. - \*(Ps = \*8\*0 \(-> Disable \fISixel Scrolling\fP (DECSDM). + \*(Ps = \*8\*0 \(-> Enable \fISixel Scrolling\fP (DECSDM). \*(Ps = \*9\*5 \(-> Clear screen when DECCOLM is set/reset (DECNCSM), VT510 and up. \*(Ps = \*1\*0\*0\*0 \(-> Don't send Mouse X & Y on button press and @@ -1947,6 +1948,11 @@ Set Scrolling Region [top;bottom] (default = full size of window) Restore DEC Private Mode Values (XTRESTORE), \*(xt. The value of \*(Ps previously saved is restored. \*(Ps values are the same as for DECSET. +.iP +Like Restore Cursor (DECRC), this uses a one-level cache. +Unlike Restore Cursor, +specific settings can be saved and restored independently. +Only those modes listed as parameters are restored. . .iP .IP \\*(Cs\\*(Pt\\*s\\*;\\*(Pl\\*s\\*;\\*(Pb\\*s\\*;\\*(Pr\\*s\\*;\\*(Ps\\*s\\*$\\*r @@ -1983,6 +1989,11 @@ which is \*0. .IP \\*(Cs\\*?\\*(Pm\\*s\\*(cs Save DEC Private Mode Values (XTSAVE), \*(xt. \*(Ps values are the same as for DECSET. +.iP +Like Save Cursor (DECSC), this uses a one-level cache. +Unlike Save Cursor, +specific settings can be saved and restored independently. +Only those modes listed as parameters are saved. . .iP .IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*;\\*(Ps\\*s\\*t @@ -2395,7 +2406,8 @@ Since XFree86-3.1.2Ee (August 1996), \*(xt has accepted \*(ST \*(``\fIprop\fP\*('' to delete the property. \*(Ps = \*4\*;\fIc\fP\*s\*;\fIspec\fP \(-> Change Color Number \fIc\fP to the color specified by \fIspec\fP. -This can be a name or RGB specification as per \fIXParseColor\fP. +.sP +The \fIspec\fP can be a name or RGB specification as per \fIXParseColor\fP. Any number of \fIc\fP/\fIspec\fP pairs may be given. The color numbers correspond to the ANSI colors 0-7, their bright versions 8-15, @@ -2409,9 +2421,12 @@ be given in one control sequence, \fI\*(xt\fR can make more than one reply. .sP \*(Ps = \*5\*;\fIc\fP\*s\*;\fIspec\fP \(-> Change Special Color Number \fIc\fP to the color specified by \fIspec\fP. -This can be a name or RGB specification as per \fIXParseColor\fP. +.sP +The \fIspec\fP parameter can be a name or RGB specification +as per \fIXParseColor\fP. Any number of \fIc\fP/\fIspec\fP pairs may be given. The special colors can also be set by adding the maximum number of colors +(e.g., 88 or 256) to these codes in an \*(Os\*4 control: .sP .in +2n @@ -2427,6 +2442,8 @@ The second parameter tells \fI\*(xt\fP to enable the corresponding color mode if nonzero, disable it if zero. \*(Os\*6 is the same as \*(Os\*1\*0\*6. .sP +If no parameters are given, this control has no effect. +.sP The 10 colors (below) which may be set or queried using \*1\*0 through \*1\*9 are denoted \fIdynamic colors\fR, since the corresponding control sequences @@ -2488,7 +2505,7 @@ These controls may be disabled using the \fBallowWindowOps\fP resource. The parameter \*(Pt is parsed as .br \*(Pc\*s\*;\*(Pd -.br +.sP The first, \*(Pc, may contain zero or more characters from the set \*c, \*p, \*q, \*(cs, \*0, \*1, \*2, \*3, \*4, \*5, \*6, and \*7. It is used to construct a list of selection parameters for @@ -2496,10 +2513,10 @@ clipboard, primary, secondary, select, -or cut buffers 0 through 7 respectively, +or cut-buffers 0 through 7 respectively, in the order given. If the parameter is empty, \fI\*(xt\fP uses \*(cs\*0, -to specify the configurable primary/clipboard selection and cut buffer 0. +to specify the configurable primary/clipboard selection and cut-buffer 0. .sP The second parameter, \*(Pd, gives the selection data. Normally this is a string encoded in base64 (RFC-4648). @@ -2531,6 +2548,8 @@ These parameters correspond to the special colors which can be set using an \*(Os\*5 control (or by adding the maximum number of colors using an \*(Os\*4 control). .sP +If no parameters are given, all special colors will be reset. +.sP \*(Ps = \*1\*0\*6\*;\fIc\fP\*s\*;\fIf\fP \(-> Enable/disable Special Color Number \fIc\fP. The second parameter tells \fI\*(xt\fP to enable the corresponding color mode if nonzero, disable it if zero. @@ -2544,6 +2563,8 @@ mode if nonzero, disable it if zero. \*(Pc = \*5 \(<- resource \fBcolorAttrMode\fP (Override ANSI). .in -2n .sP +If no parameters are given, this control has no effect. +.sP The \fIdynamic colors\fR can also be reset to their default (resource) values: \*(Ps = \*1\*1\*0 \(-> Reset VT100 text foreground color. \*(Ps = \*1\*1\*1 \(-> Reset VT100 text background color. @@ -2576,7 +2597,32 @@ Sun shelltool, CDE dtterm. \*(Pt need not be printable characters. .Ed . -.Sh "Alt and Meta Keys" +.Sh "Special Keyboard Keys" +.LP +Terminal keyboards have two types of keys: +.bP +ordinary keys, which you would use as data, +e.g., in a text file, and +.bP +special keys, which you would use to tell \fI\*(xt\fP to perform some action. +.LP +\fI\*(XT\fP detects all of these keys via X key-press and key-release events. +It uses the \fBtranslations\fP resource to decide what to do with these events. +.bP +Ordinary keys are handled with the +\fBinsert-seven-bit\fP or +\fBinsert-eight-bit\fP action. +.bP +Special keys may be handled with other resources. +However, \fI\*(xt\fP also has built-in logic to map commonly-used +special keys into characters which your keypress sends to the application +running in \fI\*(xt\fP. +.LP +Special keyboard keys send control characters or escape sequences. +This is a convention, +making it convenient for applications to detect these keys, +rather than a standard. +.Ss "Alt and Meta Keys" .LP Many keyboards have keys labeled \*(``Alt\*(''. Few have keys labeled \*(``Meta\*(''. @@ -2654,7 +2700,6 @@ This assumes \fBaltIsNotMeta\fP is set: .TS H center; lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) . -_ .TH .T& l | l | l | l . @@ -2678,7 +2723,7 @@ Alt-x ON ON \*(Es x Alt+Meta-x ON ON \*(Es x _ .TE -.Sh "PC-Style Function Keys" +.Ss "PC-Style Function Keys" .LP If \fI\*(xt\fP does minimal translation of the function keys, it usually does this @@ -2884,7 +2929,7 @@ is not readily apparent, and .bP the scheme is not extensible, i.e., it is an \fIad hoc\fP assignment limited to two modifiers (\fIshift\fP and \fIcontrol\fP). -.Sh "VT220-Style Function Keys" +.Ss "VT220-Style Function Keys" .LP However, \fI\*(xt\fP is most useful as a DEC VT102 or VT220 emulator. Set the \fBsunKeyboard\fP resource to true to force a Sun/PC keyboard @@ -2985,7 +3030,7 @@ F19 \*(Cs\*3\*3\*~ F20 \*(Cs\*3\*4\*~ _ .TE -.Sh "VT52-Style Function Keys" +.Ss "VT52-Style Function Keys" .LP A VT52 does not have function keys, but it does have a numeric keypad and cursor keys. @@ -3040,7 +3085,7 @@ PF4 \*(Es\*S \*(Es\*S no = (equal) \*= \*(Es\*?\*(XX no _ .TE -.Sh "Sun-Style Function Keys" +.Ss "Sun-Style Function Keys" .LP The \fI\*(xt\fP program provides support for Sun keyboards more directly, by a menu toggle that causes it to send Sun-style function key codes @@ -3052,10 +3097,50 @@ For example, their wrap-margin behavior differs. Only function keys are altered; keypad and cursor keys are the same. The emulation responds identically. See the xterm-sun terminfo entry for details. -.Sh "HP-Style Function Keys" +.Ss "HP-Style Function Keys" .LP Similarly, \fI\*(xt\fP can be compiled to support HP keyboards. See the xterm-hp terminfo entry for details. +.Ss "Non-Function Keys" +.LP +On a DEC terminal keyboard, some of the keys which one would expect +to see labeled as function keys had special names. +The keys actually send character sequences as if they were the +expected function keys, but the special names are used in documentation. +Because other keyboards may use those names, +\fI\*(xt\fP maps the X key symbols which have the corresponding names +into the character sequences which the original DEC keyboard would send. +.LP +These mappings are used for the DEC (VT220) and other keyboards: +.TS H +center; +lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) . +Label DEC SUN HP SCO +_ +.TH +.T& +l | l | l | l | l . +Up \*(S3\*A \*(S3\*A \*(Es\*A \*(Cs\*A +Down \*(S3\*(cB \*(S3\*(cB \*(Es\*(cB \*(Cs\*(cB +Right \*(S3\*C \*(S3\*C \*(Es\*C \*(Cs\*C +Left \*(S3\*D \*(S3\*D \*(Es\*D \*(Cs\*D +Clear - - \*(Es\*J - +Find \*(Cs\*1\*~ \*(Cs\*1\*z \*(Es\*h - +Insert \*(Cs\*2\*~ \*(Cs\*2\*z \*(Es\*Q \*(Cs\*L +Delete \*(Cs\*3\*~ \*(Cs\*3\*z \*(Es\*P - +Keypad Insert \*(Cs\*2\*~ \*(Cs\*2\*z \*(Es\*Q \*(Cs\*L +Keypad Delete \*(Cs\*3\*~ \*(Cs\*3\*z \*(Es\*P - +Remove \*(Cs\*3\*~ \*(Cs\*3\*z \*(Es\*P - +Select \*(Cs\*4\*~ \*(Cs\*4\*z \*(Es\*F - +Prior \*(Cs\*5\*~ \*(Cs\*2\*1\*6\*z \*(Es\*T \*(Cs\*I +Next \*(Cs\*6\*~ \*(Cs\*2\*2\*2\*z \*(Es\*S \*(Cs\*G +Help \*(Cs\*2\*8\*~ \*(Cs\*1\*9\*6\*z - - +Menu \*(Cs\*2\*9\*~ \*(Cs\*1\*9\*7\*z - - +Home - \*(Cs\*2\*1\*4\*z \*(Es\*h \*(Cs\*H +End - \*(Cs\*2\*2\*0\*z \*(Es\*F \*(Cs\*F +Begin - \*(Cs\*2\*1\*8\*z - \*(Cs\*E +_ +.TE .Sh "The Alternate Screen Buffer" .LP \fI\*(XT\fP maintains two screen buffers. @@ -3268,8 +3353,8 @@ Release events for the wheel buttons are not reported. .LP By default, the wheel mouse events (buttons 4 and 5) -are translated to \fIscroll-back\fP -and \fIscroll-forw\fP actions, respectively. +are translated to \fBscroll-back\fP +and \fBscroll-forw\fP actions, respectively. Those actions normally scroll the whole window, as if the scrollbar was used. .LP @@ -3467,7 +3552,8 @@ it is not an improvement over 1006. Use the same mouse response format as the 1006 control, but report position in \fIpixels\fP rather than character \fIcells\fP. . -.Sh "Sixel Graphics" +.Sh "Graphics" +.Ss "Sixel Graphics" .LP If \fI\*(xt\fP is configured as VT240, @@ -3512,7 +3598,7 @@ following the \*q with sixel data. \*(Ps \(-> sixel data .Ed . -.Sh "ReGIS Graphics" +.Ss "ReGIS Graphics" .LP If \fI\*(xt\fP is configured as VT125, @@ -3554,7 +3640,8 @@ with four possible values: \*(Pm = 3 \(-> start new command, use command display mode. .Ed . -.Sh "Tektronix 4014 Mode" +.Sh "Non-VT100 Modes" +.Ss "Tektronix 4014 Mode" .LP Most of these sequences are standard Tektronix 4014 control sequences. Graph mode supports the 12-bit addressing of the Tektronix 4014. @@ -3704,7 +3791,7 @@ Alpha Mode (Ctrl-_). .Ed . . -.Sh "VT52 Mode" +.Ss "VT52 Mode" .LP Parameters for cursor movement are at the end of the \*(Es\*Y escape sequence. Each ordinate is encoded in a single character as \fIvalue\fP+32. @@ -3816,7 +3903,7 @@ EK-VT420-RM-002, EK-VT520-RM A01, EK-VT100-TM-003, and EK-VT102-UG-003. -The remaining documents were found on the bitsavers site. +In addition, several documents were found on the bitsavers site. .bP .\" http://www.bitsavers.org/pdf/dec/terminal/vt52/EK-VT5X-OP-001_DECscope_Users_Manual_Mar77.pdf \fIDECscope User's Manual\fP. @@ -3868,7 +3955,7 @@ Digital Equipment Corporation Digital Equipment Corporation (EK-VT3XX-TP-001, March 1987). .bP -.\" https://vt100.net/docs/vt3xx-gp/ +.\" http://www.bitsavers.org/pdf/dec/terminal/vt340/EK-VT3XX-GP-001_VT330_VT340_Graphics_Programming_Mar87.pdf \fIVT330/VT340 Programmer Reference Manual\fP .br \fIVolume 2: Graphics Programming\fP. @@ -3876,6 +3963,30 @@ Digital Equipment Corporation Digital Equipment Corporation (EK-VT3XX-GP-001, March 1987). .bP +.\" https://vt100.net/docs/vt3xx-gp/ +\fIVT330/VT340 Programmer Reference Manual\fP +.br +\fIVolume 2: Graphics Programming\fP. +.br +Digital Equipment Corporation +(EK-VT3XX-GP-002, May 1988). +.bP +.\" https://vt100.net/dec/ek-vt382-rm-001.pdf +\fIVT382 Kanji Display Terminal\fP +.br +\fIProgrammer Reference Manual\fP. +.br +Digital Equipment Corporation +(EK-VT382-RM-001). +.bP +.\" https://vt100.net/dec/ek-vt38t-ug-001.pdf +\fIVT382 Thai Display Terminal\fP +.br +\fIInstalling and Using Manual\fP. +.br +Digital Equipment Corporation +(EK-VT38T-UG-001, August 1989). +.bP .\" http://www.bitsavers.org/pdf/dec/terminal/vt420/EK-VT420-UG-001_Installing_and_Using_The_VT420_Video_Terminal_Nov89.pdf \fIInstalling and Using\fP .br @@ -3916,6 +4027,15 @@ Digital Equipment Corporation Digital Equipment Corporation (EK-PPLV2-PM B01, August 1994). .bP +.\" http://www.bitsavers.org/pdf/ibm/pc/dos/6936752_DOS_2.00_Jan83.pdf +\fIDisk Operating System\fP +.br +DOS 2.00 +.br +Microsoft, Inc. +.br +First edition, January 1983. +.bP .\" https://vt100.net/manx/details/5,5479 \fI4014 and 4014-1 Computer Display Terminal\fP .br @@ -3929,6 +4049,28 @@ The DEC terminal family (VT100 through VT525) is upward-compatible, using standards plus \fIextensions\fP, 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 all-encompassing. +Quoting from the second edition: +.in +4n +.sp +.ft C +Full conformance to a standard means that all its requirements are met. +For such conformance to be unique the standard must contain no options. +This is typically the case for hardware standards, for instance Standard +ECMA-10 for data interchange on punched tapes. +.sp +This Standard ECMA-48 is of a different nature and as a result, +it is only practicable to envisage limited conformance to it, +as defined hereunder. +.sp +This Standard addresses a whole class of devices which can vary greatly +from each other depending on the application for which a device has +been specifically designed. Obviously, a +product which implements all facilities described in this standard \[en] +thus being in \*(``full conformance\*('' with it \[en] whilst theoretically +possible, would be technically and economically unthinkable. +.ft R +.in -4n .LP Again, it is possible to find discrepancies in the standards: .bP @@ -3943,14 +4085,104 @@ but the documentation and dates are lacking). ECMA created a new PDF in April 2003 which changed that detail to use \*T, and later in 2008 provided PDFs of the earlier editions which used \*T. .bP +The first edition of ECMA-48 has not been available, to compare. +As of September 2021, +ECMA's website provides a copy of ECMA-\fB46\fP in its place. +.IP +Earlier versions of ISO 6429 have never been available. +The first three editions of ISO 6429 were issued in 1983, 1988, and 1992. +.bP +\fIANSI X3.64-1979\fP +does not list color as a feature of the SGR sequence (page 49). +.IP +In Appendix A, it mentions ECMA-48: +.in +4n +.ft C +.sp +(8) This document represents a coordinated effort to develop a single technical +standard in the United States and Europe (see ECMA-48 standard entitled +\fIAdditional Controls for Character Imaging Input/Output Devices\fP). +.in -4n +.IP +.ft R +Appendix H clarifies the relationship between these documents somewhat +though it confuses the first two editions of ECMA-48. +The typo for \*(``work\*('' versus \*(``owkr\*('' +appears in the original document: +.in +4n +.hy 0 +.sp +.ft C +ANSI X3.64-1979, and ECMA-48, +\fIAdditional Controls for Character-Imaging I/O Devices\fP, +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 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 standards use different language, +the intent is that the subset is technically identical. +X3.64 was balloted and forwarded prior to the final resolution of ISO 6429 +and does not incorporate the \fIowkr\fP of IS0/TC97/SC2 in completing ISO 6429. +Revision of X3.64 will attempt to incorporate those elements +and assumptions of X3.64. +.in -4n +.ft R +.IP +ANSI X3.64 goes on to say that the SGR codes 8, 30-47 are in ISO 6429. +It includes 38 and 39, but omits 48 and 49. +At the time, ISO 6429's first edition was still four years in the future. +The writer probably was referring to the ongoing process of making +ECMA-48 second edition into the ISO standard. +.bP The VT320, VT420, VT520 manuals claim that DECSCL does a hard reset (RIS). .IP Both the VT220 manual and DEC STD 070 (which documents levels 1-4 in detail) state that it is a soft reset, e.g., DECSTR. +.bP +The VT330/VT340 reference manual for graphics programming +documents sixel scrolling in some detail in chapter 14. +The VT382 Kanji and Thai manuals provide less information, +but differ in their comment about the private mode +DECSDM (\*(Cs\*?\*8\*0\*h), +which each manual agrees should \fIset\fP the Sixel Scrolling feature. +However, the VT330/VT340 manual says +.RS +.IP +When sixel display mode is set, the Sixel Scrolling feature is enabled. +.RE +.IP +while the VT382 Kanji manual (page 6-6) says +.RS +.IP +Disable sixel scroll +.RE +.IP +and the VT382 Thai manual (page C-30) says +.RS +.IP +No Sixel scrolling +.RE +.IP +The standard (DEC STD 070) in chapter 9 (August 3, 1990) +states on page 17 that video devices will scroll +when advancing the Sixel active position past the bottom margin, +but on page 19, in the section on deviations, +states that VT125 and VT240 did not scroll in this situation. +The standard does not mention VT330/VT340 or VT382. +Nor does it document DECSDM. .LP Here are the relevant standards: .bP +.\" https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub86.pdf +\fIAdditional Controls for Use with American National Standard Code for Information Interchange, ANSI X3.64-1979\fP +.br +FIPS Publication 86. July 18, 1979. +.br +American National Standards Institute, Inc. +.bP .\" https://www.ecma-international.org/publications/standards/Ecma-035.htm \fIECMA-35: Character Code Structure and Extension Techniques\fP .br @@ -4024,7 +4256,7 @@ and added a few new ones. .TS l l l l l _ _ _ _ _ -l c c c l. +l | c | c | c | l. \fBCode\fR \fBSun\fR \fBCDE \*(XT Description\fP \*(Cs\*1\*t yes yes yes de-iconify \*(Cs\*2\*t yes yes yes iconify @@ -4057,6 +4289,7 @@ l c c c l. \*(Os\*I\*(ST yes yes yes set icon to file \*(Os\*l\*(ST yes yes yes set window title \*(Os\*L\*(ST yes yes yes set icon label +_ .TE .br Besides the Sun-derived OSC controls for setting window title and icon label, @@ -4066,18 +4299,20 @@ The \fICDE\fP source was unavailable for inspection until 2012, so that clarification of the details of the window operations relied upon \fIvttest\fP. .bP -The control sequences for saving/restoring the cursor and -for saving/restoring \*(``DEC Private Mode Values\*('' may appear to be +The SCOSC/SCORC control sequences for saving/restoring the cursor and +for saving/restoring \*(``DEC Private Mode Values\*('' +(XTSAVE and XTRESTORE) +may appear to be related (since the \*(``save\*('' controls both end with \*(cs), but that is coincidental. -The latter was introduced in X10.4: +The latter was introduced in X10.4 (December 1986): .iP .RS .ft C .na -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 +Most Dec Private mode settings can be saved away internally using \\E[?\fIn\fPs, +where \fIn\fP is the same number to set or reset the Dec Private mode. The +mode can be restored using \\E[?\fIn\fPr. This can be used in termcap for \fBvi\fP, for example, to turn off saving of lines, but restore whatever the original state was on exit. .ad @@ -4086,6 +4321,47 @@ state was on exit. .IP while the SCOSC/SCORC pair was added in 1995 by XFree86 (and documented long afterwards). +.IP +The SCO \fIANSI\fP 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. +.IP +The SCOSC/SCORC pair is considered a \fIprivate mode\fP because the final +characters (\*(cs and \*u) fall in the range from \*(``\`\*('' to \*(``~\*('' +(octal 0140 to octal 0176). +Other \fIprivate\fP 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. +.IP +Because the XTSAVE and XTRESTORE controls are private, +other terminals may behave differently. +For example, DEC (a contributor to the early \fI\*(xt\fP 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). +.IP +In that model of the VT420, +\*(Cs\*?\*(Pm\*;\*(Pc\*s\*r +selects the \fIPC TERM\fP emulation mode. +When this mode is enabled, the keyboard sends \fIscan codes\fP +rather than characters (analogous to X keyboard events). +The first parameter of this private control +enables or disables \fIPC TERM\fP 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 into account when designing the feature. +.IP +If there were potential users, \fI\*(xt\fP could accommodate this +by a resource setting. +In retrospect (thirty years later), +there have been no uses of \fIPC TERM\fP, +while the XTRESTORE feature is still in use. .bP The \fIaixterm\fP manual page gives the format of the control sequence for foreground and background colors 8-15, diff --git a/app/xterm/ctlseqs.txt b/app/xterm/ctlseqs.txt index 75a239b41..68939f5a4 100644 --- a/app/xterm/ctlseqs.txt +++ b/app/xterm/ctlseqs.txt @@ -21,7 +21,7 @@ Thomas Dickey XFree86 Project (1996-2006) invisible-island.net (2006-2021) - updated for XTerm Patch #367 (2021/03/23) + updated for XTerm Patch #369 (2021/09/11) @@ -178,7 +178,7 @@ ESC _ These control characters are used in the vtXXX emulation. -VT100 Mode +VT100-related terminals In this document, "VT100" refers not only to VT100/VT102, but also to the succession of upward-compatible terminals produced by DEC (Digital @@ -197,7 +197,7 @@ provides for this will affect all windows. There are additional control sequences to provide xterm-dependent functions, such as the scrollbar or window size. Where the function is -specified by DEC or ECMA-48, the code assigned to it is given in +specified by DEC or ECMA-48, the mnemonic assigned to it is given in parentheses. The escape codes to designate and invoke character sets are specified by @@ -207,6 +207,9 @@ Many of the features are optional; xterm can be configured and built without support for them. +VT100 Mode + + Single-character functions BEL Bell (BEL is Ctrl-G). @@ -777,7 +780,7 @@ CSI ? Pm h VT420. This sets the backarrowKey resource to "true". Ps = 6 9 -> Enable left and right margin mode (DECLRMM), VT420 and up. - Ps = 8 0 -> Enable Sixel Scrolling (DECSDM). + Ps = 8 0 -> Disable Sixel Scrolling (DECSDM). Ps = 9 5 -> Do not clear screen when DECCOLM is set/reset (DECNCSM), VT510 and up. Ps = 1 0 0 0 -> Send Mouse X & Y on button press and @@ -906,7 +909,7 @@ CSI ? Pm l VT420. This sets the backarrowKey resource to "false". Ps = 6 9 -> Disable left and right margin mode (DECLRMM), VT420 and up. - Ps = 8 0 -> Disable Sixel Scrolling (DECSDM). + Ps = 8 0 -> Enable Sixel Scrolling (DECSDM). Ps = 9 5 -> Clear screen when DECCOLM is set/reset (DECNCSM), VT510 and up. Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and @@ -1325,6 +1328,11 @@ CSI ? Pm r of Ps previously saved is restored. Ps values are the same as for DECSET. + Like Restore Cursor (DECRC), this uses a one-level cache. + Unlike Restore Cursor, specific settings can be saved and + restored independently. Only those modes listed as parameters + are restored. + CSI Pt ; Pl ; Pb ; Pr ; Ps $ r Change Attributes in Rectangular Area (DECCARA), VT400 and up. Pt ; Pl ; Pb ; Pr denotes the rectangle. @@ -1358,6 +1366,11 @@ CSI ? Pm s Save DEC Private Mode Values (XTSAVE), xterm. Ps values are the same as for DECSET. + Like Save Cursor (DECSC), this uses a one-level cache. Unlike + Save Cursor, specific settings can be saved and restored + independently. Only those modes listed as parameters are + saved. + CSI Ps ; Ps ; Ps t Window manipulation (XTWINOPS), dtterm, extended by xterm. These controls may be disabled using the allowWindowOps @@ -1690,11 +1703,13 @@ OSC Ps ; Pt ST in the form "prop=value", or just "prop" to delete the property. Ps = 4 ; c ; spec -> Change Color Number c to the color - specified by spec. This can be a name or RGB specification as - per XParseColor. Any number of c/spec pairs may be given. - The color numbers correspond to the ANSI colors 0-7, their - bright versions 8-15, and if supported, the remainder of the - 88-color or 256-color table. + specified by spec. + + The spec can be a name or RGB specification as per + XParseColor. Any number of c/spec pairs may be given. The + color numbers correspond to the ANSI colors 0-7, their bright + versions 8-15, and if supported, the remainder of the 88-color + or 256-color table. If a "?" is given rather than a name or RGB specification, xterm replies with a control sequence of the same form which @@ -1703,11 +1718,12 @@ OSC Ps ; Pt ST control sequence, xterm can make more than one reply. Ps = 5 ; c ; spec -> Change Special Color Number c to the - color specified by spec. This can be a name or RGB - specification as per XParseColor. Any number of c/spec pairs - may be given. The special colors can also be set by adding - the maximum number of colors to these codes in an OSC 4 - control: + color specified by spec. + + The spec parameter can be a name or RGB specification as per + XParseColor. Any number of c/spec pairs may be given. The + special colors can also be set by adding the maximum number of + colors (e.g., 88 or 256) to these codes in an OSC 4 control: Pc = 0 <- resource colorBD (BOLD). Pc = 1 <- resource colorUL (UNDERLINE). @@ -1720,6 +1736,8 @@ OSC Ps ; Pt ST color mode if nonzero, disable it if zero. OSC 6 is the same as OSC 1 0 6 . + If no parameters are given, this control has no effect. + The 10 colors (below) which may be set or queried using 1 0 through 1 9 are denoted dynamic colors, since the corresponding control sequences were the first means for @@ -1780,13 +1798,14 @@ OSC Ps ; Pt ST be disabled using the allowWindowOps resource. The parameter Pt is parsed as Pc ; Pd + The first, Pc, may contain zero or more characters from the set c , p , q , s , 0 , 1 , 2 , 3 , 4 , 5 , 6 , and 7 . It is used to construct a list of selection parameters for - clipboard, primary, secondary, select, or cut buffers 0 + clipboard, primary, secondary, select, or cut-buffers 0 through 7 respectively, in the order given. If the parameter is empty, xterm uses s 0 , to specify the configurable - primary/clipboard selection and cut buffer 0. + primary/clipboard selection and cut-buffer 0. The second parameter, Pd, gives the selection data. Normally this is a string encoded in base64 (RFC-4648). The data @@ -1815,6 +1834,8 @@ OSC Ps ; Pt ST 5 control (or by adding the maximum number of colors using an OSC 4 control). + If no parameters are given, all special colors will be reset. + Ps = 1 0 6 ; c ; f -> Enable/disable Special Color Number c. The second parameter tells xterm to enable the corresponding color mode if nonzero, disable it if zero. @@ -1826,6 +1847,8 @@ OSC Ps ; Pt ST Pc = 4 <- resource colorITMode (ITALIC). Pc = 5 <- resource colorAttrMode (Override ANSI). + If no parameters are given, this control has no effect. + The dynamic colors can also be reset to their default (resource) values: Ps = 1 1 0 -> Reset VT100 text foreground color. @@ -1854,6 +1877,33 @@ PM Pt ST xterm implements no PM functions; Pt is ignored. Pt need not be printable characters. +Special Keyboard Keys + +Terminal keyboards have two types of keys: + +o ordinary keys, which you would use as data, e.g., in a text file, + and + +o special keys, which you would use to tell xterm to perform some + action. + +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 Special keys may be handled with other resources. However, xterm + also has built-in logic to map commonly-used special keys into + characters which your keypress sends to the application running in + xterm. + +Special keyboard keys send control characters or escape sequences. This +is a convention, making it convenient for applications to detect these +keys, rather than a standard. + + Alt and Meta Keys Many keyboards have keys labeled "Alt". Few have keys labeled "Meta". @@ -1909,7 +1959,6 @@ The table shows the result for a given character "x" with modifiers according to the default translations with the resources set on or off. This assumes altIsNotMeta is set: - ----------------------------------------------------------- key altSendsEscape metaSendsEscape result -----------+----------------+-----------------+------------ x | off | off | x @@ -2242,6 +2291,43 @@ Similarly, xterm can be compiled to support HP keyboards. See the xterm-hp terminfo entry for details. +Non-Function Keys + +On a DEC terminal keyboard, some of the keys which one would expect to +see labeled as function keys had special names. The keys actually send +character sequences as if they were the expected function keys, but the +special names are used in documentation. Because other keyboards may +use those names, xterm maps the X key symbols which have the +corresponding names into the character sequences which the original DEC +keyboard would send. + +These mappings are used for the DEC (VT220) and other keyboards: + + Label DEC SUN HP SCO + --------------+------------+--------------+----------+---------- + Up | SS3 A | SS3 A | ESC A | CSI A + Down | SS3 B | SS3 B | ESC B | CSI B + Right | SS3 C | SS3 C | ESC C | CSI C + Left | SS3 D | SS3 D | ESC D | CSI D + Clear | - | - | ESC J | - + Find | CSI 1 ~ | CSI 1 z | ESC h | - + Insert | CSI 2 ~ | CSI 2 z | ESC Q | CSI L + Delete | CSI 3 ~ | CSI 3 z | ESC P | - + Keypad Insert | CSI 2 ~ | CSI 2 z | ESC Q | CSI L + Keypad Delete | CSI 3 ~ | CSI 3 z | ESC P | - + Remove | CSI 3 ~ | CSI 3 z | ESC P | - + Select | CSI 4 ~ | CSI 4 z | ESC F | - + Prior | CSI 5 ~ | CSI 2 1 6 z | ESC T | CSI I + Next | CSI 6 ~ | CSI 2 2 2 z | ESC S | CSI G + Help | CSI 2 8 ~ | CSI 1 9 6 z | - | - + Menu | CSI 2 9 ~ | CSI 1 9 7 z | - | - + Home | - | CSI 2 1 4 z | ESC h | CSI H + End | - | CSI 2 2 0 z | ESC F | CSI F + Begin | - | CSI 2 1 8 z | - | CSI E + --------------+------------+--------------+----------+---------- + + + The Alternate Screen Buffer XTerm maintains two screen buffers. The Normal Screen Buffer allows you @@ -2607,6 +2693,9 @@ SGR-Pixels (1016) report position in pixels rather than character cells. +Graphics + + Sixel Graphics If xterm is configured as VT240, VT241, VT330, VT340 or VT382 using the @@ -2675,6 +2764,9 @@ DCS Pm p Pr..Pr ST Pm = 3 -> start new command, use command display mode. +Non-VT100 Modes + + Tektronix 4014 Mode Most of these sequences are standard Tektronix 4014 control sequences. @@ -2864,8 +2956,8 @@ the technical references were limited to EK-VT220-HR-002 and EK- VT420-UG.002. Shortly after, Richard Shuford sent a copy of EK-VT3XX- TP-001. Still later (beginning in 2003), Paul Williams' vt100.net site provided EK-VT102-UG-003, EK-VT220-RM-002, EK-VT420-RM-002, EK-VT520-RM -A01, EK-VT100-TM-003, and EK-VT102-UG-003. The remaining documents were -found on the bitsavers site. +A01, EK-VT100-TM-003, and EK-VT102-UG-003. In addition, several +documents were found on the bitsavers site. o DECscope User's Manual. Digital Equipment Corporation (EK-VT5X-OP-001 1975). @@ -2896,6 +2988,18 @@ o VT330/VT340 Programmer Reference Manual Volume 2: Graphics Programming. Digital Equipment Corporation (EK-VT3XX-GP-001, March 1987). +o VT330/VT340 Programmer Reference Manual + Volume 2: Graphics Programming. + Digital Equipment Corporation (EK-VT3XX-GP-002, May 1988). + +o VT382 Kanji Display Terminal + Programmer Reference Manual. + Digital Equipment Corporation (EK-VT382-RM-001). + +o VT382 Thai Display Terminal + Installing and Using Manual. + Digital Equipment Corporation (EK-VT38T-UG-001, August 1989). + o Installing and Using The VT420 Video Terminal (North American Model). @@ -2916,6 +3020,11 @@ o Digital ANSI-Compliant Printing Protocol Level 2 Programming Reference Manual Digital Equipment Corporation (EK-PPLV2-PM B01, August 1994). +o Disk Operating System + DOS 2.00 + Microsoft, Inc. + First edition, January 1983. + o 4014 and 4014-1 Computer Display Terminal User's Manual. Tektronix, Inc. (070-1647-00, November 1979). @@ -2926,7 +3035,24 @@ 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. +not found in ECMA-48. On the other hand, ECMA-48 was not intended to +all-encompassing. Quoting from the second edition: + + Full conformance to a standard means that all its requirements are + met. For such conformance to be unique the standard must contain no + options. This is typically the case for hardware standards, for + instance Standard ECMA-10 for data interchange on punched tapes. + + This Standard ECMA-48 is of a different nature and as a result, it + is only practicable to envisage limited conformance to it, as + defined hereunder. + + This Standard addresses a whole class of devices which can vary + greatly from each other depending on the application for which a + device has been specifically designed. Obviously, a product which + implements all facilities described in this standard - thus being in + "full conformance" with it - whilst theoretically possible, would be + technically and economically unthinkable. Again, it is possible to find discrepancies in the standards: @@ -2941,14 +3067,85 @@ o The printed ECMA-48 5th edition (1991) and the first PDF produced use T , and later in 2008 provided PDFs of the earlier editions which used T . +o The first edition of ECMA-48 has not been available, to compare. As + of September 2021, ECMA's website provides a copy of ECMA-46 in its + place. + + Earlier versions of ISO 6429 have never been available. The first + three editions of ISO 6429 were issued in 1983, 1988, and 1992. + +o ANSI X3.64-1979 does not list color as a feature of the SGR sequence + (page 49). + + In Appendix A, it mentions ECMA-48: + + (8) This document represents a coordinated effort to develop a + single technical standard in the United States and Europe (see + ECMA-48 standard entitled Additional Controls for Character + Imaging Input/Output Devices). + + Appendix H clarifies the relationship between these documents + somewhat though it confuses the first two editions of ECMA-48. The + typo for "work" versus "owkr" appears in the original document: + + 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 + 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 + standards use different language, the intent is that the subset + is technically identical. X3.64 was balloted and forwarded + prior to the final resolution of ISO 6429 and does not + incorporate the owkr of IS0/TC97/SC2 in completing ISO 6429. + Revision of X3.64 will attempt to incorporate those elements and + assumptions of X3.64. + + ANSI X3.64 goes on to say that the SGR codes 8, 30-47 are in ISO + 6429. It includes 38 and 39, but omits 48 and 49. At the time, ISO + 6429's first edition was still four years in the future. The writer + probably was referring to the ongoing process of making ECMA-48 + second edition into the ISO standard. + o The VT320, VT420, VT520 manuals claim that DECSCL does a hard reset (RIS). Both the VT220 manual and DEC STD 070 (which documents levels 1-4 in detail) state that it is a soft reset, e.g., DECSTR. +o The VT330/VT340 reference manual for graphics programming documents + sixel scrolling in some detail in chapter 14. The VT382 Kanji and + Thai manuals provide less information, but differ in their comment + about the private mode DECSDM (CSI ? 8 0 h ), which each manual + agrees should set the Sixel Scrolling feature. However, the + VT330/VT340 manual says + + When sixel display mode is set, the Sixel Scrolling + feature is enabled. + + while the VT382 Kanji manual (page 6-6) says + + Disable sixel scroll + + and the VT382 Thai manual (page C-30) says + + No Sixel scrolling + + The standard (DEC STD 070) in chapter 9 (August 3, 1990) states on + page 17 that video devices will scroll when advancing the Sixel + active position past the bottom margin, but on page 19, in the + section on deviations, states that VT125 and VT240 did not scroll in + this situation. The standard does not mention VT330/VT340 or VT382. + Nor does it document DECSDM. + Here are the relevant standards: +o Additional Controls for Use with American National Standard Code for + Information Interchange, ANSI X3.64-1979 + FIPS Publication 86. July 18, 1979. + American National Standards Institute, Inc. + o ECMA-35: Character Code Structure and Extension Techniques (6th Edition, December 1994). @@ -3005,38 +3202,39 @@ o XTerm supports control sequences for manipulating its window which those, and added a few new ones. Code Sun CDE XTerm Description - ----------------------------------------------------------------- - CSI 1 t yes yes yes de-iconify - CSI 2 t yes yes yes iconify - CSI 3 t yes yes yes move window to pixel-position - CSI 4 t yes yes yes resize window in pixels - CSI 5 t yes yes yes raise window to front of stack - CSI 6 t yes yes yes raise window to back of stack - CSI 7 t yes yes yes refresh window - CSI 8 t yes yes yes resize window in chars - CSI 9 t - - yes maximize/unmaximize window - CSI 1 0 t - - yes to/from full-screen - CSI 1 1 t yes yes yes report if window is iconified - CSI 1 2 t - - - - - CSI 1 3 t yes yes yes report window position - CSI 1 4 t yes yes yes report window size in pixels - CSI 1 5 t - - yes report screen size in pixels - CSI 1 6 t - - yes report character cell in pixels - CSI 1 7 t - - - - - CSI 1 8 t yes yes yes report window size in chars - CSI 1 9 t - - yes report screen size in chars - CSI 2 0 t - yes yes report icon label - CSI 2 1 t - yes yes report window title - CSI 2 2 t - - yes save window/icon title - CSI 2 3 t - - yes restore window/icon title - CSI 2 4 t - - yes resize window (DECSLPP) - OSC 0 ST - yes yes set window and icon title - OSC 1 ST - yes yes set icon label - OSC 2 ST - yes yes set window title - OSC 3 ST - n/a yes set X server property - OSC I ST yes yes yes set icon to file - OSC l ST yes yes yes set window title - OSC L ST yes yes yes set icon label + -----------+-----+-----+-------+--------------------------------- + CSI 1 t | yes | yes | yes | de-iconify + CSI 2 t | yes | yes | yes | iconify + CSI 3 t | yes | yes | yes | move window to pixel-position + CSI 4 t | yes | yes | yes | resize window in pixels + CSI 5 t | yes | yes | yes | raise window to front of stack + CSI 6 t | yes | yes | yes | raise window to back of stack + CSI 7 t | yes | yes | yes | refresh window + CSI 8 t | yes | yes | yes | resize window in chars + CSI 9 t | - | - | yes | maximize/unmaximize window + CSI 1 0 t | - | - | yes | to/from full-screen + CSI 1 1 t | yes | yes | yes | report if window is iconified + CSI 1 2 t | - | - | - | - + CSI 1 3 t | yes | yes | yes | report window position + CSI 1 4 t | yes | yes | yes | report window size in pixels + CSI 1 5 t | - | - | yes | report screen size in pixels + CSI 1 6 t | - | - | yes | report character cell in pixels + CSI 1 7 t | - | - | - | - + CSI 1 8 t | yes | yes | yes | report window size in chars + CSI 1 9 t | - | - | yes | report screen size in chars + CSI 2 0 t | - | yes | yes | report icon label + CSI 2 1 t | - | yes | yes | report window title + CSI 2 2 t | - | - | yes | save window/icon title + CSI 2 3 t | - | - | yes | restore window/icon title + CSI 2 4 t | - | - | yes | resize window (DECSLPP) + OSC 0 ST | - | yes | yes | set window and icon title + OSC 1 ST | - | yes | yes | set icon label + OSC 2 ST | - | yes | yes | set window title + OSC 3 ST | - | n/a | yes | set X server property + OSC I ST | yes | yes | yes | set icon to file + OSC l ST | yes | yes | yes | set window title + OSC L ST | yes | yes | yes | set icon label + -----------+-----+-----+-------+--------------------------------- Besides the Sun-derived OSC controls for setting window title and icon label, dtterm also supported the xterm controls for the same @@ -3046,10 +3244,11 @@ o XTerm supports control sequences for manipulating its window which clarification of the details of the window operations relied upon vttest. -o The control sequences for saving/restoring the cursor and for - saving/restoring "DEC Private Mode Values" may appear to be related - (since the "save" controls both end with s ), but that is - coincidental. The latter was introduced in X10.4: +o The SCOSC/SCORC control sequences for saving/restoring the cursor + and for saving/restoring "DEC Private Mode Values" (XTSAVE and + XTRESTORE) may appear to be related (since the "save" controls both + end with s ), but that is coincidental. The latter was introduced + in X10.4 (December 1986): 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 @@ -3060,6 +3259,38 @@ o The control sequences for saving/restoring the cursor and for 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 + supported by SCO and other vendors. + + 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 + 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 + 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 + 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 + 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 + 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 diff --git a/app/xterm/data.c b/app/xterm/data.c index deb835889..d2786d83d 100644 --- a/app/xterm/data.c +++ b/app/xterm/data.c @@ -1,7 +1,7 @@ -/* $XTermId: data.c,v 1.98 2017/12/18 23:38:05 tom Exp $ */ +/* $XTermId: data.c,v 1.100 2021/05/27 22:29:26 tom Exp $ */ /* - * Copyright 2002-2016,2017 by Thomas E. Dickey + * Copyright 2002-2017,2021 by Thomas E. Dickey * * All Rights Reserved * @@ -68,6 +68,7 @@ jmp_buf Tekend; #endif char *ProgramName; +char *ProgramPath; Arg ourTopLevelShellArgs[] = { @@ -114,8 +115,11 @@ char *xterm_cursor_theme; #if OPT_SESSION_MGT int ice_fd = -1; +char **restart_command; #endif +int restart_params = 0; + #ifdef USE_IGNORE_RC int ignore_unused; #endif diff --git a/app/xterm/data.h b/app/xterm/data.h index 41d16e890..8c5fbf1df 100644 --- a/app/xterm/data.h +++ b/app/xterm/data.h @@ -1,4 +1,4 @@ -/* $XTermId: data.h,v 1.139 2021/03/09 01:08:15 tom Exp $ */ +/* $XTermId: data.h,v 1.141 2021/05/27 22:29:12 tom Exp $ */ /* * Copyright 2002-2019,2021 by Thomas E. Dickey @@ -104,7 +104,12 @@ extern PtySelect Select_mask; extern PtySelect X_mask; extern PtySelect pty_mask; +#if OPT_SESSION_MGT extern int ice_fd; +extern char **restart_command; +#endif + +extern int restart_params; extern XtermWidget term; @@ -124,7 +129,8 @@ extern SIG_ATOMIC_T caught_intr; #define XkbBI_MarginBell 10 #endif -extern char *ProgramName; +extern char *ProgramName; /* just the last part of name, maybe alias */ +extern char *ProgramPath; /* full pathname which can be executed */ extern Arg ourTopLevelShellArgs[]; extern Cardinal number_ourTopLevelShellArgs; extern Atom wm_delete_window; diff --git a/app/xterm/fontutils.c b/app/xterm/fontutils.c index c1c8943b0..770b33682 100644 --- a/app/xterm/fontutils.c +++ b/app/xterm/fontutils.c @@ -1,4 +1,4 @@ -/* $XTermId: fontutils.c,v 1.703 2021/03/02 00:25:24 tom Exp $ */ +/* $XTermId: fontutils.c,v 1.706 2021/09/12 18:38:50 Martijn.van.Duren Exp $ */ /* * Copyright 1998-2020,2021 by Thomas E. Dickey @@ -2442,7 +2442,7 @@ dumpXft(XtermWidget xw, XTermXftFonts *data) #endif for (c = first; c <= last; ++c) { if (FcCharSetHasChar(xft->charset, c)) { - int width = CharWidth(c); + int width = CharWidth(screen, c); XGlyphInfo extents; Boolean big_x; Boolean big_y; @@ -2610,7 +2610,7 @@ checkXftWidth(XtermWidget xw, XTermXftFonts *target, XTermXftFonts *source) * Ignore control characters - their extent information is misleading. */ for (c = 32; c < 256; ++c) { - if (CharWidth(c) <= 0) + if (CharWidth(TScreenOf(xw), c) <= 0) continue; if (FcCharSetHasChar(source->font->charset, c)) { (void) checkedXftWidth(XtDisplay(xw), @@ -3626,8 +3626,7 @@ xtermMissingChar(unsigned ch, XTermFonts * font) #endif if (pc == 0 || CI_NONEXISTCHAR(pc)) { - TRACE2(("xtermMissingChar %#04x (!exists), %d cells\n", - ch, CharWidth(ch))); + TRACE2(("xtermMissingChar %#04x (!exists)\n", ch)); result = True; } if (ch < KNOWN_MISSING) { @@ -4054,7 +4053,7 @@ foundXftGlyph(XtermWidget xw, XftFont *font, unsigned wc) if (font != 0 && XftGlyphExists(screen->display, font, wc)) { int expect; - if ((expect = CharWidth(wc)) > 0) { + if ((expect = CharWidth(screen, wc)) > 0) { XGlyphInfo gi; int actual; diff --git a/app/xterm/graphics.c b/app/xterm/graphics.c index ab23021f8..cde00e842 100644 --- a/app/xterm/graphics.c +++ b/app/xterm/graphics.c @@ -1,4 +1,4 @@ -/* $XTermId: graphics.c,v 1.94 2021/02/25 23:42:01 tom Exp $ */ +/* $XTermId: graphics.c,v 1.95 2021/09/19 18:57:09 tom Exp $ */ /* * Copyright 2013-2020,2021 by Ross Combs @@ -852,7 +852,7 @@ get_new_or_matching_graphic(XtermWidget xw, return graphic; } -#define ScaleForXColor(s) (unsigned short) ((long)(s) * MAX_U_COLOR / CHANNEL_MAX) +#define ScaleForXColor(s) (unsigned short) ((unsigned long)(s) * MAX_U_COLOR / CHANNEL_MAX) static int save_allocated_color(const ColorRegister *reg, XtermWidget xw, Pixel *pix) diff --git a/app/xterm/graphics_sixel.c b/app/xterm/graphics_sixel.c index 304fa8f22..8d580b71c 100644 --- a/app/xterm/graphics_sixel.c +++ b/app/xterm/graphics_sixel.c @@ -1,8 +1,8 @@ -/* $XTermId: graphics_sixel.c,v 1.28 2020/08/06 20:32:33 Ben.Wong Exp $ */ +/* $XTermId: graphics_sixel.c,v 1.29 2021/08/10 00:39:26 tom Exp $ */ /* - * Copyright 2014-2016,2020 by Ross Combs - * Copyright 2014-2016,2020 by Thomas E. Dickey + * Copyright 2014-2020,2021 by Ross Combs + * Copyright 2014-2020,2021 by Thomas E. Dickey * * All Rights Reserved * @@ -229,7 +229,7 @@ finished_parsing(XtermWidget xw, Graphic *graphic) if (screen->scroll_amt) FlushScroll(xw); - if (xw->keyboard.flags & MODE_DECSDM) { + if (SixelScrolling(xw)) { int new_row, new_col; if (screen->sixel_scrolls_right) { @@ -340,7 +340,7 @@ parse_sixel(XtermWidget xw, ANSI *params, char const *string) /* default isn't white on the VT240, but not sure what it is */ context.current_register = 3; /* FIXME: using green, but not sure what it should be */ - if (xw->keyboard.flags & MODE_DECSDM) { + if (SixelScrolling(xw)) { TRACE(("sixel scrolling enabled: inline positioning for graphic at %d,%d\n", screen->cur_row, screen->cur_col)); graphic = get_new_graphic(xw, screen->cur_row, screen->cur_col, 0U); @@ -487,7 +487,7 @@ parse_sixel(XtermWidget xw, ANSI *params, char const *string) * the remainder of the graphic depending on this setting. */ if (scroll_lines > 0) { - if (xw->keyboard.flags & MODE_DECSDM) { + if (SixelScrolling(xw)) { Display *display = screen->display; xtermScroll(xw, scroll_lines); XSync(display, False); diff --git a/app/xterm/html.c b/app/xterm/html.c index 1292676b9..c7c34939f 100644 --- a/app/xterm/html.c +++ b/app/xterm/html.c @@ -1,4 +1,4 @@ -/* $XTermId: html.c,v 1.21 2021/02/25 23:19:16 tom Exp $ */ +/* $XTermId: html.c,v 1.23 2021/09/19 18:30:48 tom Exp $ */ /* * Copyright 2018-2020,2021 Thomas E. Dickey @@ -175,8 +175,8 @@ dumpHtmlLine(XtermWidget xw, int row, FILE *fp) } #endif - XQueryColor(xw->screen.display, xw->core.colormap, &fgcolor); - XQueryColor(xw->screen.display, xw->core.colormap, &bgcolor); + (void) QueryOneColor(xw, &fgcolor); + (void) QueryOneColor(xw, &bgcolor); xevents(xw); if (ld->attribs[col] & BLINK) { @@ -291,8 +291,9 @@ PixelToCSSColor(XtermWidget xw, Pixel p) static char rgb[sizeof "rgb(100.00%, 100.00%, 100.00%)"]; XColor c; + (void) xw; c.pixel = p; - XQueryColor(xw->screen.display, xw->core.colormap, &c); + (void) QueryOneColor(xw, &c); sprintf(rgb, "rgb(%.2f%%, %.2f%%, %.2f%%)", RGBPCT(c)); return rgb; } diff --git a/app/xterm/input.c b/app/xterm/input.c index 82ad56d4c..e74fd6894 100644 --- a/app/xterm/input.c +++ b/app/xterm/input.c @@ -1,7 +1,7 @@ -/* $XTermId: input.c,v 1.365 2020/10/12 19:21:53 tom Exp $ */ +/* $XTermId: input.c,v 1.368 2021/09/12 18:20:03 tom Exp $ */ /* - * Copyright 1999-2019,2020 by Thomas E. Dickey + * Copyright 1999-2020,2021 by Thomas E. Dickey * * All Rights Reserved * @@ -999,10 +999,14 @@ Input(XtermWidget xw, } } #ifdef XK_ISO_Left_Tab - else if (IsTabKey(kd.keysym) - && kd.nbytes <= 1 - && modify_parm == (MOD_NONE + MOD_SHIFT)) { - kd.keysym = XK_ISO_Left_Tab; + else if (IsTabKey(kd.keysym) && kd.nbytes <= 1) { + if (allowModifierParm(xw, &kd)) { + if (modify_parm == (MOD_NONE + MOD_SHIFT)) { + kd.keysym = XK_ISO_Left_Tab; + } + } else if (evt_state & ShiftMask) { + kd.keysym = XK_ISO_Left_Tab; + } } #endif #endif /* OPT_MOD_FKEYS */ @@ -1458,9 +1462,6 @@ decfuncvalue(KEY_DATA * kd) MAP(XK_Select, 4); MAP(XK_Prior, 5); MAP(XK_Next, 6); -#ifdef XK_ISO_Left_Tab - MAP(XK_ISO_Left_Tab, 'Z'); -#endif MAP(XK_Help, 28); MAP(XK_Menu, 29); default: diff --git a/app/xterm/linedata.c b/app/xterm/linedata.c index f478a92c7..22f5908f3 100644 --- a/app/xterm/linedata.c +++ b/app/xterm/linedata.c @@ -1,4 +1,4 @@ -/* $XTermId: linedata.c,v 1.99 2021/03/08 00:24:12 tom Exp $ */ +/* $XTermId: linedata.c,v 1.100 2021/08/22 20:02:23 tom Exp $ */ /* * Copyright 2009-2019,2021 by Thomas E. Dickey @@ -51,14 +51,8 @@ getLineData(TScreen *screen, int row) if (row >= 0) { buffer = screen->visbuf; } else { -#if OPT_FIFO_LINES buffer = 0; result = getScrollback(screen, row); -#else - buffer = screen->saveBuf_index; - row += screen->savelines; - max_row += screen->savelines; -#endif } if (row >= 0 && row <= max_row) { result = (LineData *) scrnHeadAddr(screen, buffer, (unsigned) row); diff --git a/app/xterm/main.c b/app/xterm/main.c index c74ca0286..7bfb7fcac 100644 --- a/app/xterm/main.c +++ b/app/xterm/main.c @@ -1,4 +1,4 @@ -/* $XTermId: main.c,v 1.877 2021/03/21 22:09:06 tom Exp $ */ +/* $XTermId: main.c,v 1.882 2021/09/16 19:49:13 tom Exp $ */ /* * Copyright 2002-2020,2021 by Thomas E. Dickey @@ -2221,7 +2221,10 @@ main(int argc, char *argv[]ENVP_ARG) Xaw3dXftData *xaw3dxft_data; #endif - ProgramName = argv[0]; + ProgramName = x_strdup(x_basename(argv[0])); + ProgramPath = xtermFindShell(argv[0], True); + if (ProgramPath != NULL) + argv[0] = ProgramPath; #ifdef HAVE_POSIX_SAVED_IDS save_euid = geteuid(); @@ -2269,6 +2272,7 @@ main(int argc, char *argv[]ENVP_ARG) /* Do these first, since we may not be able to open the display */ TRACE_OPTS(xtermOptions, optionDescList, XtNumber(optionDescList)); TRACE_ARGV("Before XtOpenApplication", argv); + restart_params = 0; if (argc > 1) { XrmOptionDescRec *option_ptr; char *option_value; @@ -2289,10 +2293,12 @@ main(int argc, char *argv[]ENVP_ARG) if (explicit_shname == 0) exit(0); TRACE(("...explicit shell %s\n", explicit_shname)); + restart_params = (argc - n); } else if (!strcmp(option_ptr->option, "-e")) { command_to_exec = (argv + n + 1); if (!command_to_exec[0]) Syntax(argv[n]); + restart_params = (argc - n); break; } else if (!strcmp(option_ptr->option, "-version")) { Version(); @@ -2473,6 +2479,8 @@ main(int argc, char *argv[]ENVP_ARG) fallback_resources, sessionShellWidgetClass, NULL, 0); + TRACE(("created toplevel widget %p, window %#lx\n", + (void *) toplevel, XtWindow(toplevel))); XtGetApplicationResources(toplevel, (XtPointer) &resource, application_resources, @@ -2652,6 +2660,8 @@ main(int argc, char *argv[]ENVP_ARG) XtNmenuHeight, menu_high, #endif (XtPointer) 0); + TRACE(("created vt100 widget %p, window %#lx\n", + (void *) term, XtWindow(term))); decode_keyboard_type(term, &resource); screen = TScreenOf(term); @@ -2866,7 +2876,7 @@ main(int argc, char *argv[]ENVP_ARG) #endif xtermEmbedWindow(winToEmbedInto); -#if OPT_COLOR_RES + TRACE(("checking reverseVideo before rv %s fg %s, bg %s\n", term->misc.re_verse0 ? "reverse" : "normal", NonNull(TScreenOf(term)->Tcolors[TEXT_FG].resource), @@ -2887,7 +2897,6 @@ main(int argc, char *argv[]ENVP_ARG) NonNull(TScreenOf(term)->Tcolors[TEXT_FG].resource), NonNull(TScreenOf(term)->Tcolors[TEXT_BG].resource))); } -#endif /* OPT_COLOR_RES */ #if OPT_MAXIMIZE if (resource.maximized) diff --git a/app/xterm/main.h b/app/xterm/main.h index a9fc18f77..41cb4b243 100644 --- a/app/xterm/main.h +++ b/app/xterm/main.h @@ -1,7 +1,7 @@ -/* $XTermId: main.h,v 1.74 2020/12/19 00:19:51 tom Exp $ */ +/* $XTermId: main.h,v 1.77 2021/08/24 09:45:41 tom Exp $ */ /* - * Copyright 2000-2019,2020 by Thomas E. Dickey + * Copyright 2000-2020,2021 by Thomas E. Dickey * * All Rights Reserved * @@ -167,6 +167,10 @@ #define DEF_BACKARO_BS True #endif +#ifndef DEF_CD_XTRA_SCROLL +#define DEF_CD_XTRA_SCROLL "False" +#endif + #ifndef DEF_ALT_SENDS_ESC #define DEF_ALT_SENDS_ESC False #endif @@ -227,6 +231,10 @@ #define DEF_TITLE_MODES 0 #endif +#ifndef DEF_TI_XTRA_SCROLL +#define DEF_TI_XTRA_SCROLL "False" +#endif + #ifndef DEF_XFT_CACHE #define DEF_XFT_CACHE 50 #endif diff --git a/app/xterm/menu.c b/app/xterm/menu.c index a846bb161..baf38ee72 100644 --- a/app/xterm/menu.c +++ b/app/xterm/menu.c @@ -1,4 +1,4 @@ -/* $XTermId: menu.c,v 1.365 2021/03/21 20:03:03 tom Exp $ */ +/* $XTermId: menu.c,v 1.367 2021/06/03 21:23:40 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -695,6 +695,8 @@ create_menu(Widget w, XtermWidget xw, MenuIndex num) simpleMenuWidgetClass, toplevel, NULL, 0); + TRACE(("created popupShell(%s) widget %p, window %#lx\n", + data->internal_name, list->w, XtWindow(list->w))); #endif if (list->w != 0) { Boolean *unused = unusedEntries(xw, num); @@ -718,6 +720,8 @@ create_menu(Widget w, XtermWidget xw, MenuIndex num) : smeLineObjectClass), list->w, &arg, (Cardinal) 1); + TRACE(("created menuEntry[%d] widget %p, window %#lx\n", + n, (void *) entries[n].widget, XtWindow(entries[n].widget))); list->entries++; } } @@ -3031,6 +3035,8 @@ SetupShell(Widget *menus, MenuList * shell, int n, int m) *menus, XtNgeometry, NULL, (XtPointer) 0); + TRACE(("created popupShel widget %p, window %#lx\n", + (void *) shell[n].w, XtWindow(shell[n].w))); XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name); XtVaGetValues(shell[n].w, @@ -3052,6 +3058,8 @@ SetupShell(Widget *menus, MenuList * shell, int n, int m) XtNmenuName, menu_names[n].internal_name, XtNlabel, external_name, (XtPointer) 0); + TRACE(("created menuButton[%d] widget %p, window %#lx\n", + n, (void *) shell[n].b, XtWindow(shell[n].b))); XtVaGetValues(shell[n].b, XtNheight, &button_height, XtNborderWidth, &button_border, @@ -3085,6 +3093,8 @@ SetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension *menu_high) *forms = XtVaCreateManagedWidget("form", formWidgetClass, shell, (XtPointer) 0); + TRACE(("created form widget %p, window %#lx\n", + (void *) *forms, XtWindow(*forms))); xtermAddInput(*forms); /* @@ -3105,6 +3115,8 @@ SetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension *menu_high) } else { *menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5); } + TRACE(("created menubar widget %p, window %#lx\n", + (void *) *menus, XtWindow(*menus))); /* * The toolbar widget's height is not necessarily known yet. If the diff --git a/app/xterm/misc.c b/app/xterm/misc.c index 43a7ef57a..12b88ded2 100644 --- a/app/xterm/misc.c +++ b/app/xterm/misc.c @@ -1,4 +1,4 @@ -/* $XTermId: misc.c,v 1.979 2021/03/24 00:27:48 tom Exp $ */ +/* $XTermId: misc.c,v 1.1001 2021/09/19 19:49:40 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -2593,7 +2593,7 @@ maskToWidth(unsigned long mask) return result; } -int +XVisualInfo * getVisualInfo(XtermWidget xw) { #define MYFMT "getVisualInfo \ @@ -2646,7 +2646,7 @@ rgb masks (%04lx/%04lx/%04lx)\n" xw->rgb_shifts[2])); } } - return (xw->visInfo != 0) && (xw->numVisuals > 0); + return (xw->visInfo != 0) && (xw->numVisuals > 0) ? xw->visInfo : NULL; #undef MYFMT #undef MYARG } @@ -2659,12 +2659,11 @@ ReportAnsiColorRequest(XtermWidget xw, int opcode, int colornum, int final) if (AllowColorOps(xw, ecGetAnsiColor)) { XColor color; - Colormap cmap = xw->core.colormap; char buffer[80]; TRACE(("ReportAnsiColorRequest %d\n", colornum)); color.pixel = GET_COLOR_RES(xw, TScreenOf(xw)->Acolors[colornum]); - XQueryColor(TScreenOf(xw)->display, cmap, &color); + (void) QueryOneColor(xw, &color); sprintf(buffer, "%d;%d;rgb:%04x/%04x/%04x", opcode, (opcode == 5) ? (colornum - NUM_ANSI_COLORS) : colornum, @@ -2731,6 +2730,75 @@ loadColorTable(XtermWidget xw, unsigned length) return result; } +/***====================================================================***/ + +/* + * Call this function with def->{red,green,blue} initialized, to obtain a pixel + * value. + */ +Boolean +AllocOneColor(XtermWidget xw, XColor *def) +{ + TScreen *screen = TScreenOf(xw); + XVisualInfo *visInfo; + Boolean result = True; + +#define MaskIt(name,nn) \ + ((unsigned long) ((def->name >> (16 - xw->rgb_widths[nn])) \ + << xw->rgb_shifts[nn]) \ + & xw->visInfo->name ##_mask) + + if ((visInfo = getVisualInfo(xw)) != NULL && visInfo->class == TrueColor) { + def->pixel = MaskIt(red, 0) | MaskIt(green, 1) | MaskIt(blue, 2); + } else { + Display *dpy = screen->display; + if (!XAllocColor(dpy, xw->core.colormap, def)) { + /* + * Decide between foreground and background by a grayscale + * approximation. + */ + int bright = def->red * 3 + def->green * 10 + def->blue; + int levels = 14 * 0x8000; + def->pixel = ((bright >= levels) + ? xw->dft_background + : xw->dft_foreground); + result = False; + } + } + return result; +} + +/***====================================================================***/ + +/* + * Call this function with def->pixel set to the color that we want to convert + * to separate red/green/blue. + */ +Boolean +QueryOneColor(XtermWidget xw, XColor *def) +{ + XVisualInfo *visInfo; + Boolean result = True; + +#define UnMaskIt(name,nn) \ + ((unsigned short)((def->pixel & xw->visInfo->name ##_mask) >> xw->rgb_shifts[nn])) +#define UnMaskIt2(name,nn) \ + ((unsigned short)((UnMaskIt(name,nn) << 8) \ + |UnMaskIt(name,nn))) + + if ((visInfo = getVisualInfo(xw)) != NULL && visInfo->class == TrueColor) { + /* *INDENT-EQLS* */ + def->red = UnMaskIt2(red, 0); + def->green = UnMaskIt2(green, 1); + def->blue = UnMaskIt2(blue, 2); + } else if (!XQueryColor(TScreenOf(xw)->display, xw->core.colormap, def)) { + result = False; + } + return result; +} + +/***====================================================================***/ + /* * Find closest color for "def" in "cmap". * Set "def" to the resulting color. @@ -2742,7 +2810,7 @@ loadColorTable(XtermWidget xw, unsigned length) * Return False if not able to find or allocate a color. */ static Boolean -allocateClosestRGB(XtermWidget xw, Colormap cmap, XColor *def) +allocateClosestRGB(XtermWidget xw, XColor *def) { TScreen *screen = TScreenOf(xw); Boolean result = False; @@ -2796,8 +2864,7 @@ allocateClosestRGB(XtermWidget xw, Colormap cmap, XColor *def) } } } - if (XAllocColor(screen->display, cmap, - &screen->cmap_data[bestInx]) != 0) { + if (AllocOneColor(xw, &screen->cmap_data[bestInx])) { *def = screen->cmap_data[bestInx]; TRACE(("...closest %x/%x/%x\n", def->red, def->green, def->blue)); @@ -2822,193 +2889,6 @@ allocateClosestRGB(XtermWidget xw, Colormap cmap, XColor *def) #define ULONG_MAX (unsigned long)(~(0L)) #endif -#define CheckColor(result, value) \ - result = 0; \ - if (value.red) \ - result |= 1; \ - if (value.green) \ - result |= 2; \ - if (value.blue) \ - result |= 4 - -#define SelectColor(state, value, result) \ - switch (state) { \ - default: \ - case 1: \ - result = value.red; \ - break; \ - case 2: \ - result = value.green; \ - break; \ - case 4: \ - result = value.blue; \ - break; \ - } - -/* - * Check if the color map consists of values in exactly one of the red, green - * or blue columns. If it is not, we do not know how to use it for the exact - * match. - */ -static int -simpleColors(XColor *colortable, unsigned length) -{ - unsigned n; - int state = 0; - int check; - - for (n = 0; n < length; ++n) { - if (state > 0) { - CheckColor(check, colortable[n]); - if (check > 0 && check != state) { - state = 0; - break; - } - } else { - CheckColor(state, colortable[n]); - } - } - switch (state) { - case 1: - case 2: - case 4: - break; - default: - state = 0; - break; - } - return state; -} - -/* - * Shift the mask left or right to put its most significant bit at the 16-bit - * mark. - */ -static unsigned -normalizeMask(unsigned mask) -{ - while (mask < 0x8000) { - mask <<= 1; - } - while (mask >= 0x10000) { - mask >>= 1; - } - return mask; -} - -static unsigned -searchColors(XColor *colortable, unsigned mask, unsigned length, unsigned - color, int state) -{ - unsigned result = 0; - unsigned n; - unsigned long best = ULONG_MAX; - unsigned value; - - mask = normalizeMask(mask); - for (n = 0; n < length; ++n) { - unsigned long diff; - - SelectColor(state, colortable[n], value); - diff = ((color & mask) - (value & mask)); - diff *= diff; - if (diff < best) { -#if 0 - TRACE(("...%d:looking for %x, found %x/%x/%x (%lx)\n", - n, color, - colortable[n].red, - colortable[n].green, - colortable[n].blue, - diff)); -#endif - result = n; - best = diff; - } - } - SelectColor(state, colortable[result], value); - return value; -} - -/* - * This is a workaround for a longstanding defect in the X libraries. - * - * According to - * http://www.unix.com/man-page/all/3x/XAllocColoA/ - * - * XAllocColor() acts differently on static and dynamic visuals. On Pseu- - * doColor, DirectColor, and GrayScale visuals, XAllocColor() fails if - * there are no unallocated colorcells and no allocated read-only cell - * exactly matches the requested RGB values. On StaticColor, TrueColor, - * and StaticGray visuals, XAllocColor() returns the closest RGB values - * available in the colormap. The colorcell_in_out structure returns the - * actual RGB values allocated. - * - * That is, XAllocColor() should suffice unless the color map is full. In that - * case, allocateClosestRGB() is useful for the dynamic display classes such as - * PseudoColor. It is not useful for TrueColor, since XQueryColors() does not - * return regular RGB triples (unless a different scheme was used for - * specifying the pixel values); only the blue value is filled in. However, it - * is filled in with the colors that the server supports. - * - * Also (the reason for this function), XAllocColor() does not really work as - * described. For some TrueColor configurations it merely returns a close - * approximation, but not the closest. - */ -static Boolean -allocateExactRGB(XtermWidget xw, Colormap cmap, XColor *def) -{ - XColor save = *def; - TScreen *screen = TScreenOf(xw); - Boolean result = (Boolean) (XAllocColor(screen->display, cmap, def) != 0); - - /* - * If this is a statically allocated display with too many items to store - * in our array, i.e., TrueColor, see if we can improve on the result by - * using the color values actually supported by the server. - */ - if (result) { - unsigned cmap_type; - unsigned cmap_size; - - getColormapInfo(xw, &cmap_type, &cmap_size); - - if (cmap_type == TrueColor) { - XColor temp = *def; - int state; - - if (loadColorTable(xw, cmap_size) - && (state = simpleColors(screen->cmap_data, cmap_size)) > 0) { -#define SearchColors(which) \ - temp.which = (unsigned short) searchColors(screen->cmap_data, \ - (unsigned) xw->visInfo->which##_mask,\ - cmap_size, \ - save.which, \ - state) - SearchColors(red); - SearchColors(green); - SearchColors(blue); - if (XAllocColor(screen->display, cmap, &temp) != 0) { -#if OPT_TRACE - if (temp.red != save.red - || temp.green != save.green - || temp.blue != save.blue) { - TRACE(("...improved %x/%x/%x ->%x/%x/%x\n", - save.red, save.green, save.blue, - temp.red, temp.green, temp.blue)); - } else { - TRACE(("...no improvement for %x/%x/%x\n", - save.red, save.green, save.blue)); - } -#endif - *def = temp; - } - } - } - } - - return result; -} - /* * Allocate a color for the "ANSI" colors. That actually includes colors up * to 256. @@ -3027,11 +2907,8 @@ AllocateAnsiColor(XtermWidget xw, XColor def; if (xtermAllocColor(xw, &def, spec)) { - if ( -#if OPT_COLOR_RES - res->mode == True && -#endif - EQL_COLOR_RES(res, def.pixel)) { + if (res->mode == True && + EQL_COLOR_RES(res, def.pixel)) { result = 0; } else { result = 1; @@ -3045,11 +2922,9 @@ AllocateAnsiColor(XtermWidget xw, def.green, def.blue, def.pixel)); -#if OPT_COLOR_RES if (!res->mode) result = 0; res->mode = True; -#endif } } else { TRACE(("AllocateAnsiColor %s (failed)\n", spec)); @@ -3058,7 +2933,6 @@ AllocateAnsiColor(XtermWidget xw, return (result); } -#if OPT_COLOR_RES Pixel xtermGetColorRes(XtermWidget xw, ColorRes * res) { @@ -3086,7 +2960,6 @@ xtermGetColorRes(XtermWidget xw, ColorRes * res) } return result; } -#endif static int ChangeOneAnsiColor(XtermWidget xw, int color, const char *name) @@ -3225,16 +3098,15 @@ ResetAnsiColorRequest(XtermWidget xw, char *buf, int start) return repaint; } #else -#define allocateClosestRGB(xw, cmap, def) 0 -#define allocateExactRGB(xw, cmap, def) XAllocColor(TScreenOf(xw)->display, cmap, def) +#define allocateClosestRGB(xw, def) 0 #endif /* OPT_ISO_COLORS */ Boolean allocateBestRGB(XtermWidget xw, XColor *def) { - Colormap cmap = xw->core.colormap; - - return allocateExactRGB(xw, cmap, def) || allocateClosestRGB(xw, cmap, def); + (void) xw; + (void) def; + return AllocOneColor(xw, def) || allocateClosestRGB(xw, def); } static Boolean @@ -3247,7 +3119,7 @@ xtermAllocColor(XtermWidget xw, XColor *def, const char *spec) if (have == 0 || have > MAX_U_STRING) { if (resource.reportColors) { - printf("color (ignored, length %lu)\n", have); + printf("color (ignored, length %lu)\n", (unsigned long) have); } } else if (XParseColor(screen->display, cmap, spec, def)) { XColor save_def = *def; @@ -3284,7 +3156,7 @@ int xtermClosestColor(XtermWidget xw, int find_red, int find_green, int find_blue) { int result = -1; -#if OPT_COLOR_RES && OPT_ISO_COLORS +#if OPT_ISO_COLORS int n; int best_index = -1; unsigned long best_value = 0; @@ -3319,6 +3191,7 @@ xtermClosestColor(XtermWidget xw, int find_red, int find_green, int find_blue) } TRACE(("...best match at %d with diff %lx\n", best_index, best_value)); result = best_index; + #else (void) xw; (void) find_red; @@ -3688,7 +3561,6 @@ ReportColorRequest(XtermWidget xw, int ndx, int final) if (AllowColorOps(xw, ecGetColor)) { XColor color; - Colormap cmap = xw->core.colormap; char buffer[80]; /* @@ -3700,7 +3572,7 @@ ReportColorRequest(XtermWidget xw, int ndx, int final) GetOldColors(xw); color.pixel = xw->work.oldColors->colors[ndx]; - XQueryColor(TScreenOf(xw)->display, cmap, &color); + (void) QueryOneColor(xw, &color); sprintf(buffer, "%d;rgb:%04x/%04x/%04x", i + 10, color.red, color.green, @@ -3841,8 +3713,6 @@ ResetColorsRequest(XtermWidget xw, (void) code; TRACE(("ResetColorsRequest code=%d\n", code)); - -#if OPT_COLOR_RES if (GetOldColors(xw)) { ScrnColors newColors; const char *thisName; @@ -3868,7 +3738,6 @@ ResetColorsRequest(XtermWidget xw, } result = True; } -#endif return result; } @@ -6989,11 +6858,75 @@ getXtermWidget(Widget w) } #if OPT_SESSION_MGT + +#if OPT_TRACE +static void +trace_1_SM(const char *tag, String name) +{ + Arg args[1]; + char *buf = 0; + + XtSetArg(args[0], name, &buf); + XtGetValues(toplevel, args, 1); + + if (strstr(name, "Path") || strstr(name, "Directory")) { + TRACE(("%s %s: %s\n", tag, name, NonNull(buf))); + } else if (strstr(name, "Command")) { + if (buf != NULL) { + char **vec = (char **) (void *) buf; + int n; + TRACE(("%s %s:\n", tag, name)); + for (n = 0; vec[n] != NULL; ++n) { + TRACE((" arg[%d] = %s\n", n, vec[n])); + } + } else { + TRACE(("%s %s: %p\n", tag, name, buf)); + } + } else { + TRACE(("%s %s: %p\n", tag, name, buf)); + } +} + +static void +trace_SM_props(void) +{ + /* *INDENT-OFF* */ + static struct { String app, cls; } table[] = { + { XtNcurrentDirectory, XtCCurrentDirectory }, + { XtNdieCallback, XtNdiscardCommand }, + { XtCDiscardCommand, XtNenvironment }, + { XtCEnvironment, XtNinteractCallback }, + { XtNjoinSession, XtCJoinSession }, + { XtNprogramPath, XtCProgramPath }, + { XtNresignCommand, XtCResignCommand }, + { XtNrestartCommand, XtCRestartCommand }, + { XtNrestartStyle, XtCRestartStyle }, + { XtNsaveCallback, XtNsaveCompleteCallback }, + { XtNsessionID, XtCSessionID }, + { XtNshutdownCommand, XtCShutdownCommand }, + }; + /* *INDENT-ON* */ + Cardinal n; + TRACE(("Session properties:\n")); + for (n = 0; n < XtNumber(table); ++n) { + trace_1_SM("app", table[n].app); + trace_1_SM("cls", table[n].cls); + } +} +#define TRACE_SM_PROPS() trace_SM_props() +#else +#define TRACE_SM_PROPS() /* nothing */ +#endif + static void die_callback(Widget w GCC_UNUSED, XtPointer client_data GCC_UNUSED, XtPointer call_data GCC_UNUSED) { + TRACE(("die_callback client=%p, call=%p\n", + (void *) client_data, + (void *) call_data)); + TRACE_SM_PROPS(); NormalExit(); } @@ -7003,7 +6936,19 @@ save_callback(Widget w GCC_UNUSED, XtPointer call_data) { XtCheckpointToken token = (XtCheckpointToken) call_data; - /* we have nothing to save */ + TRACE(("save_callback:\n")); + TRACE(("... save_type <-%d\n", token->save_type)); + TRACE(("... interact_style <-%d\n", token->interact_style)); + TRACE(("... shutdown <-%s\n", BtoS(token->shutdown))); + TRACE(("... fast <-%s\n", BtoS(token->fast))); + TRACE(("... cancel_shutdown <-%s\n", BtoS(token->cancel_shutdown))); + TRACE(("... phase <-%d\n", token->phase)); + TRACE(("... interact_dialog_type ->%d\n", token->interact_dialog_type)); + TRACE(("... request_cancel ->%s\n", BtoS(token->request_cancel))); + TRACE(("... request_next_phase ->%s\n", BtoS(token->request_next_phase))); + TRACE(("... save_success ->%s\n", BtoS(token->save_success))); + xtermUpdateRestartCommand(term); + /* we have nothing more to save */ token->save_success = True; } @@ -7029,6 +6974,8 @@ xtermOpenSession(void) TRACE(("Enabling session-management callbacks\n")); XtAddCallback(toplevel, XtNdieCallback, die_callback, NULL); XtAddCallback(toplevel, XtNsaveCallback, save_callback, NULL); + + TRACE_SM_PROPS(); } } @@ -7037,6 +6984,267 @@ xtermCloseSession(void) { IceRemoveConnectionWatch(icewatch, NULL); } + +typedef enum { + B_ARG = 0, + I_ARG, + D_ARG, + S_ARG +} ParamType; + +#define Barg(name, field) { name, B_ARG, XtOffsetOf(XtermWidgetRec, field) } +#define Iarg(name, field) { name, I_ARG, XtOffsetOf(XtermWidgetRec, field) } +#define Darg(name, field) { name, D_ARG, XtOffsetOf(XtermWidgetRec, field) } +#define Sarg(name, field) { name, S_ARG, XtOffsetOf(XtermWidgetRec, field) } + +typedef struct { + const char name[30]; + ParamType type; + Cardinal offset; +} FontParams; + +/* *INDENT-OFF* */ +static const FontParams fontParams[] = { + Iarg(XtNinitialFont, screen.menu_font_number), /* "-fc" */ + Barg(XtNallowBoldFonts, screen.allowBoldFonts), /* menu */ +#if OPT_BOX_CHARS + Barg(XtNforceBoxChars, screen.force_box_chars), /* "-fbx" */ + Barg(XtNforcePackedFont, screen.force_packed), /* menu */ +#endif +#if OPT_DEC_CHRSET + Barg(XtNfontDoublesize, screen.font_doublesize), /* menu */ +#endif +#if OPT_WIDE_CHARS + Barg(XtNutf8Fonts, screen.utf8_fonts), /* menu */ +#endif +#if OPT_RENDERFONT + Darg(XtNfaceSize, misc.face_size[0]), /* "-fs" */ + Sarg(XtNfaceName, misc.default_xft.f_n), /* "-fa" */ + Sarg(XtNrenderFont, misc.render_font_s), /* (resource) */ +#endif +}; +/* *INDENT-ON* */ + +#define RESTART_PARAMS (int)(XtNumber(fontParams) * 2) +#define TypedPtr(type) *(type *)(void *)((char *) xw + parameter->offset) + +/* + * If no widget is given, no value is used. + */ +static char * +formatFontParam(char *result, XtermWidget xw, const FontParams * parameter) +{ + sprintf(result, "%s*%s:", ProgramName, parameter->name); + if (xw != None) { + char *next = result + strlen(result); + switch (parameter->type) { + case B_ARG: + sprintf(next, "%s", *(Boolean *) ((char *) xw + parameter->offset) + ? "true" + : "false"); + break; + case I_ARG: + sprintf(next, "%d", TypedPtr(int)); + break; + case D_ARG: + sprintf(next, "%.1f", TypedPtr(float)); + break; + case S_ARG: + strcpy(next, TypedPtr(char *)); +#if OPT_RENDERFONT + if (!strcmp(parameter->name, XtNfaceName)) { + if (IsEmpty(next) + && xw->work.render_font) { + strcpy(next, DEFFACENAME_AUTO); + } + } else if (!strcmp(parameter->name, XtNrenderFont)) { + if (xw->work.render_font == erDefault + && IsEmpty(xw->misc.default_xft.f_n)) { + strcpy(next, "DefaultOff"); + } + } +#endif + break; + } + } + return result; +} + +#if OPT_TRACE +static void +dumpFontParams(XtermWidget xw) +{ + char buffer[1024]; + Cardinal n; + + TRACE(("FontParams:\n")); + for (n = 0; n < XtNumber(fontParams); ++n) { + TRACE(("%3d:%s\n", n, formatFontParam(buffer, xw, fontParams + n))); + } +} +#else +#define dumpFontParams(xw) /* nothing */ +#endif + +static Boolean +findFontParams(int argc, char **argv) +{ + Boolean result = False; + + if (argc > RESTART_PARAMS && (argc - restart_params) > RESTART_PARAMS) { + int n; + + for (n = 0; n < RESTART_PARAMS; ++n) { + int my_index = argc - restart_params - n - 1; + int my_param = (RESTART_PARAMS - n - 1) / 2; + char *actual = argv[my_index]; + char expect[1024]; + Boolean value = (Boolean) ((n % 2) == 0); + + result = False; + TRACE(("...index: %d\n", my_index)); + TRACE(("...param: %d\n", my_param)); + TRACE(("...actual %s\n", actual)); + if (IsEmpty(actual)) + break; + + if (value) { + formatFontParam(expect, None, fontParams + my_param); + } else { + strcpy(expect, "-xrm"); + } + + TRACE(("...expect %s\n", expect)); + + if (value) { + if (strlen(expect) >= strlen(actual)) + break; + if (strncmp(expect, actual, strlen(expect))) + break; + } else { + if (strcmp(actual, expect)) + break; + } + TRACE(("fixme/ok:%d\n", n)); + result = True; + } + TRACE(("findFontParams: %s (tested %d of %d parameters)\n", + BtoS(result), n + 1, RESTART_PARAMS)); + } + return result; +} + +static int +insertFontParams(XtermWidget xw, int *targetp, Bool first) +{ + int changed = 0; + int n; + int target = *targetp; + char buffer[1024]; + const char *option = "-xrm"; + + for (n = 0; n < (int) XtNumber(fontParams); ++n) { + formatFontParam(buffer, xw, fontParams + n); + TRACE(("formatted %3d ->%3d:%s\n", n, target, buffer)); + if (restart_command[target] == NULL) + restart_command[target] = x_strdup(option); + ++target; + if (first) { + restart_command[target] = x_strdup(buffer); + ++changed; + } else if (restart_command[target] == NULL + || strcmp(restart_command[target], buffer)) { + free(restart_command[target]); + restart_command[target] = x_strdup(buffer); + ++changed; + } + ++target; + } + *targetp = target; + return changed; +} + +void +xtermUpdateRestartCommand(XtermWidget xw) +{ + if (resource.sessionMgt) { + Arg args[1]; + char **argv = 0; + + XtSetArg(args[0], XtNrestartCommand, &argv); + XtGetValues(toplevel, args, 1); + if (argv != NULL) { + static int my_params = 0; + + int changes = 0; + Boolean first = False; + int argc; + int want; + int source, target; + + TRACE(("xtermUpdateRestartCommand\n")); + dumpFontParams(xw); + for (argc = 0; argv[argc] != NULL; ++argc) { + TRACE((" arg[%d] = %s\n", argc, argv[argc])); + ; + } + want = argc - (restart_params + RESTART_PARAMS); + + TRACE((" argc: %d\n", argc)); + TRACE((" restart_params: %d\n", restart_params)); + TRACE((" want to insert: %d\n", want)); + + /* + * If we already have the font-choice option, do not add it again. + */ + if (findFontParams(argc, argv)) { + my_params = (want); + } else { + first = True; + my_params = (argc - restart_params); + } + TRACE((" my_params: %d\n", my_params)); + + if (my_params > argc) { + TRACE((" re-allocate restartCommand\n")); + FreeAndNull(restart_command); + } + + if (restart_command == NULL) { + int need = argc + RESTART_PARAMS + 1; + + restart_command = TypeCallocN(char *, need); + + TRACE(("..inserting font-parameters\n")); + for (source = target = 0; source < argc; ++source) { + if (source == my_params) { + changes += insertFontParams(xw, &target, first); + if (!first) { + source += (RESTART_PARAMS - 1); + continue; + } + } + if (argv[source] == NULL) + break; + restart_command[target++] = x_strdup(argv[source]); + } + restart_command[target] = NULL; + } else { + TRACE(("..replacing font-parameters\n")); + target = my_params; + changes += insertFontParams(xw, &target, first); + } + if (changes) { + TRACE(("..%d parameters changed\n", changes)); + XtSetArg(args[0], XtNrestartCommand, restart_command); + XtSetValues(toplevel, args, 1); + } else { + TRACE(("..NO parameters changed\n")); + } + } + TRACE_SM_PROPS(); + } +} #endif /* OPT_SESSION_MGT */ Widget @@ -7205,12 +7413,23 @@ update_winsize(int fd, int rows, int cols, int height, int width) #ifdef TTYSIZE_STRUCT static int last_rows = -1; static int last_cols = -1; + static int last_high = -1; + static int last_wide = -1; + + TRACE(("update_winsize %dx%d (%dx%d) -> %dx%d (%dx%d)\n", + last_rows, last_cols, last_high, last_wide, + rows, cols, height, width)); - if (rows != last_rows || cols != last_cols) { + if (rows != last_rows + || cols != last_cols + || last_high != height + || last_wide != width) { TTYSIZE_STRUCT ts; last_rows = rows; last_cols = cols; + last_high = height; + last_wide = width; setup_winsize(ts, rows, cols, height, width); TRACE_RC(code, SET_TTYSIZE(fd, ts)); trace_winsize(ts, "from SET_TTYSIZE"); diff --git a/app/xterm/package/debian/changelog b/app/xterm/package/debian/changelog index 2e076f2c0..56e05dbee 100644 --- a/app/xterm/package/debian/changelog +++ b/app/xterm/package/debian/changelog @@ -1,3 +1,15 @@ +xterm-dev (369) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 10 Jun 2021 04:13:52 -0400 + +xterm-dev (368) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 27 Apr 2021 20:02:52 -0400 + xterm-dev (367) unstable; urgency=low * maintenance updates diff --git a/app/xterm/package/freebsd/Makefile b/app/xterm/package/freebsd/Makefile index 8bf41f3f3..54e6b2506 100644 --- a/app/xterm/package/freebsd/Makefile +++ b/app/xterm/package/freebsd/Makefile @@ -1,4 +1,4 @@ -# $XTermId: Makefile,v 1.88 2021/02/22 21:18:59 tom Exp $ +# $XTermId: Makefile,v 1.90 2021/06/10 08:13:52 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= 367 +PORTVERSION= 369 CATEGORIES= x11 MASTER_SITES= ftp://ftp.invisible-island.net/xterm/:src1 \ https://invisible-mirror.net/archives/xterm/:src1 diff --git a/app/xterm/package/pkgsrc/Makefile b/app/xterm/package/pkgsrc/Makefile index d94dec8f3..cf24008e2 100644 --- a/app/xterm/package/pkgsrc/Makefile +++ b/app/xterm/package/pkgsrc/Makefile @@ -1,6 +1,6 @@ # $NetBSD: Makefile,v 1.117 2018/03/12 11:18:00 wiz Exp $ -DISTNAME= xterm-367 +DISTNAME= xterm-369 PKGREVISION= 1 CATEGORIES= x11 MASTER_SITES= ftp://ftp.invisible-island.net/xterm/ diff --git a/app/xterm/package/xterm.spec b/app/xterm/package/xterm.spec index 5784416c0..e98bbd023 100644 --- a/app/xterm/package/xterm.spec +++ b/app/xterm/package/xterm.spec @@ -1,11 +1,11 @@ -# $XTermId: xterm.spec,v 1.142 2021/02/22 21:18:59 tom Exp $ +# $XTermId: xterm.spec,v 1.144 2021/06/10 08:13:52 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: 367 +Version: 369 Release: 1 License: X11 Group: User Interface/X diff --git a/app/xterm/ptyx.h b/app/xterm/ptyx.h index 3218bd98a..14100f1d5 100644 --- a/app/xterm/ptyx.h +++ b/app/xterm/ptyx.h @@ -1,4 +1,4 @@ -/* $XTermId: ptyx.h,v 1.1030 2021/03/21 22:11:10 tom Exp $ */ +/* $XTermId: ptyx.h,v 1.1040 2021/09/16 20:43:29 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -552,10 +552,6 @@ typedef enum { #define OPT_COLOR_CLASS 1 /* true if xterm uses separate color-resource classes */ #endif -#ifndef OPT_COLOR_RES -#define OPT_COLOR_RES 1 /* true if xterm delays color-resource evaluation */ -#endif - #ifndef OPT_DABBREV #define OPT_DABBREV 0 /* dynamic abbreviations */ #endif @@ -616,10 +612,6 @@ typedef enum { #define OPT_EXTRA_PASTE 1 #endif -#ifndef OPT_FIFO_LINES -#define OPT_FIFO_LINES 1 /* optimize save-lines feature using FIFO */ -#endif - #ifndef OPT_FOCUS_EVENT #define OPT_FOCUS_EVENT 1 /* focus in/out events */ #endif @@ -752,10 +744,6 @@ typedef enum { #define OPT_SAME_NAME 1 /* suppress redundant updates of title, icon, etc. */ #endif -#ifndef OPT_SAVE_LINES -#define OPT_SAVE_LINES OPT_FIFO_LINES /* optimize save-lines feature */ -#endif - #ifndef OPT_SCO_FUNC_KEYS #define OPT_SCO_FUNC_KEYS 0 /* true if xterm supports SCO-style function keys */ #endif @@ -860,21 +848,6 @@ typedef enum { #define OPT_AIX_COLORS 0 #endif -#if OPT_COLOR_RES && !OPT_ISO_COLORS -/* You must have ANSI/ISO colors to support ColorRes logic */ -#undef OPT_COLOR_RES -#define OPT_COLOR_RES 0 -#endif - -#if OPT_256_COLORS && (OPT_WIDE_CHARS || OPT_RENDERFONT || OPT_XMC_GLITCH) -/* It's actually more complicated than that - but by trimming options you can - * have 256 color resources though. - */ -#define OPT_COLOR_RES2 1 -#else -#define OPT_COLOR_RES2 0 -#endif - #if OPT_PC_COLORS && !OPT_ISO_COLORS /* You must have ANSI/ISO colors to support PC colors */ #undef OPT_PC_COLORS @@ -1532,13 +1505,8 @@ typedef enum { #define COLOR_RES_CLASS(root) XtCForeground #endif -#if OPT_COLOR_RES #define COLOR_RES(root,offset,value) Sres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset.resource, value) #define COLOR_RES2(name,class,offset,value) Sres(name, class, offset.resource, value) -#else -#define COLOR_RES(root,offset,value) Cres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset, value) -#define COLOR_RES2(name,class,offset,value) Cres(name, class, offset, value) -#endif #define CLICK_RES_NAME(count) "on" count "Clicks" #define CLICK_RES_CLASS(count) "On" count "Clicks" @@ -1946,6 +1914,7 @@ typedef enum { erFalse = 0 , erTrue , erDefault + , erDefaultOff , erLast } RenderFont; @@ -2095,16 +2064,12 @@ typedef enum { #define NUM_POPUP_MENUS 4 -#if OPT_COLOR_RES typedef struct { String resource; Pixel value; unsigned short red, green, blue; int mode; /* -1=invalid, 0=unset, 1=set */ } ColorRes; -#else -#define ColorRes Pixel -#endif /* these are set in getPrinterFlags */ typedef struct { @@ -2731,6 +2696,7 @@ typedef struct { #if OPT_SCROLL_LOCK Boolean allowScrollLock;/* ScrollLock mode */ Boolean allowScrollLock0;/* initial ScrollLock mode */ + Boolean autoScrollLock; /* Auto ScrollLock mode */ Boolean scroll_lock; /* true to keep buffer in view */ Boolean scroll_dirty; /* scrolling makes screen dirty */ #endif @@ -3019,6 +2985,13 @@ typedef enum { /* legal values for screen.eight_bit_meta */ , ebLast } ebMetaModeTypes; +typedef enum { /* legal values for misc.cdXtraScroll */ + edFalse = 0 + , edTrue = 1 + , edTrim = 2 + , edLast +} edXtraScrollTypes; + #define NAME_OLD_KT " legacy" #if OPT_HP_FUNC_KEYS @@ -3137,10 +3110,12 @@ typedef struct _Misc { Boolean useRight; #endif Boolean titeInhibit; - Boolean tiXtraScroll; /* scroll on ti/te */ - Boolean cdXtraScroll; /* scroll on cd (clear-display) */ Boolean appcursorDefault; Boolean appkeypadDefault; + int cdXtraScroll; /* scroll on cd (clear-display) */ + char *cdXtraScroll_s; + int tiXtraScroll; /* scroll on ti/te (init/end-cup) */ + char *tiXtraScroll_s; #if OPT_INPUT_METHOD char* f_x; /* font for XIM */ char* input_method; @@ -3407,7 +3382,6 @@ typedef struct _TekWidgetRec { /* The following attribute is used in the argument of xtermSpecialFont etc */ #define NORESOLUTION DrawBIT(5) /* find the font without resolution */ - /* * Groups of attributes */ @@ -3434,6 +3408,11 @@ typedef struct _TekWidgetRec { #endif /* + * Sixel-scrolling is backwards, perhaps from an error in the hardware design. + */ +#define SixelScrolling(xw) (!((xw)->keyboard.flags & MODE_DECSDM)) + +/* * Per-line flags */ #define LINEWRAPPED AttrBIT(0) diff --git a/app/xterm/run-tic.sh b/app/xterm/run-tic.sh index 49bd7418b..343edd67d 100644 --- a/app/xterm/run-tic.sh +++ b/app/xterm/run-tic.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $XTermId: run-tic.sh,v 1.13 2021/01/27 01:04:54 tom Exp $ +# $XTermId: run-tic.sh,v 1.14 2021/09/21 08:03:03 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # @@ -84,6 +84,8 @@ case "x$VER" in case "$VER" in *\ [7-9].*|*\ 6.[1-9].20[12][0-9]*) check=`echo "$VER" | sed -e 's/^.*\.//' -e 's/[^0-9].*$//'` + [ "$check" -ge "20210626" ] && \ + [ "$check" -lt "20210828" ] && use_ncurses6 [ "$check" -lt "$USE_NCURSES" ] && use_ncurses6 ;; *) diff --git a/app/xterm/screen.c b/app/xterm/screen.c index 756173cf4..ed4234754 100644 --- a/app/xterm/screen.c +++ b/app/xterm/screen.c @@ -1,4 +1,4 @@ -/* $XTermId: screen.c,v 1.598 2021/03/01 08:54:26 tom Exp $ */ +/* $XTermId: screen.c,v 1.602 2021/08/22 20:30:10 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -98,11 +98,7 @@ screen->save_ptr, \ (size_t) scrnHeadSize(screen, (unsigned) (len))) -#if OPT_SAVE_LINES #define VisBuf(screen) screen->editBuf_index[screen->whichBuf] -#else -#define VisBuf(screen) scrnHeadAddr(screen, screen->saveBuf_index, (unsigned) savelines) -#endif /* * ScrnPtr's can point to different types of data. @@ -363,26 +359,20 @@ allocScrnBuf(XtermWidget xw, unsigned nrow, unsigned ncol, Char **addr) return (base); } -#if OPT_SAVE_LINES /* * Copy line-data from the visible (edit) buffer to the save-lines buffer. */ static void -saveEditBufLines(TScreen *screen, ScrnBuf sb, unsigned n) +saveEditBufLines(TScreen *screen, unsigned n) { unsigned j; TRACE(("...copying %d lines from editBuf to saveBuf\n", n)); -#if OPT_FIFO_LINES - (void) sb; -#endif + for (j = 0; j < n; ++j) { -#if OPT_FIFO_LINES + LineData *dst = addScrollback(screen); -#else - unsigned k = (screen->savelines + j - n); - LineData *dst = (LineData *) scrnHeadAddr(screen, sb, k); -#endif + LineData *src = getLineData(screen, (int) j); copyLineData(dst, src); } @@ -400,7 +390,7 @@ unsaveEditBufLines(TScreen *screen, ScrnBuf sb, unsigned n) for (j = 0; j < n; ++j) { int extra = (int) (n - j); LineData *dst = (LineData *) scrnHeadAddr(screen, sb, j); -#if OPT_FIFO_LINES + CLineData *src; if (extra > screen->saved_fifo || extra > screen->savelines) { @@ -408,15 +398,10 @@ unsaveEditBufLines(TScreen *screen, ScrnBuf sb, unsigned n) continue; } src = getScrollback(screen, -extra); -#else - unsigned k = (screen->savelines - extra); - CLineData *src = CLineData *scrnHeadAddr(screen, - screen->saveBuf_index, k); -#endif + copyLineData(dst, src); } } -#endif /* * This is called when the screen is resized. @@ -496,13 +481,7 @@ Reallocate(XtermWidget xw, } setupLineData(screen, newBufHead, *sbufaddr, nrow, ncol); - extractScrnData(screen, newBufHead, oldBufHead, minrows, -#if OPT_SAVE_LINES - 0 -#else - (unsigned) move_down -#endif - ); + extractScrnData(screen, newBufHead, oldBufHead, minrows, 0); /* Now free the old data */ free(oldBufData); @@ -588,7 +567,6 @@ ReallocateBufOffsets(XtermWidget xw, TRACE(("ReallocateBufOffsets %dx%d ->%p\n", nrow, ncol, *sbufaddr)); } -#if OPT_FIFO_LINES /* * Allocate a new FIFO index. */ @@ -623,7 +601,6 @@ ReallocateFifoIndex(XtermWidget xw) screen->saveBuf_index = newBufHead; } } -#endif /* * This function dynamically adds support for wide-characters. @@ -640,13 +617,6 @@ ChangeToWide(XtermWidget xw) if (xtermLoadWideFonts(xw, True)) { int whichBuf = screen->whichBuf; -#if !OPT_FIFO_LINES || !OPT_SAVE_LINES - int savelines = screen->scrollWidget ? screen->savelines : 0; - - if (savelines < 0) - savelines = 0; -#endif - /* * If we're displaying the alternate screen, switch the pointers back * temporarily so ReallocateBufOffsets() will operate on the proper @@ -655,16 +625,8 @@ ChangeToWide(XtermWidget xw) if (screen->whichBuf) SwitchBufPtrs(screen, 0); -#if OPT_SAVE_LINES -#if OPT_FIFO_LINES ReallocateFifoIndex(xw); -#else - ReallocateBufOffsets(xw, - &screen->saveBuf_index, - &screen->saveBuf_data, - (unsigned) savelines, - (unsigned) MaxCols(screen)); -#endif + if (screen->editBuf_index[0]) { ReallocateBufOffsets(xw, &screen->editBuf_index[0], @@ -672,13 +634,7 @@ ChangeToWide(XtermWidget xw) (unsigned) MaxRows(screen), (unsigned) MaxCols(screen)); } -#else - ReallocateBufOffsets(xw, - &screen->saveBuf_index, - &screen->saveBuf_data, - (unsigned) (MaxRows(screen) + savelines), - (unsigned) MaxCols(screen)); -#endif + if (screen->editBuf_index[1]) { ReallocateBufOffsets(xw, &screen->editBuf_index[1], @@ -1117,11 +1073,8 @@ ScrnClearLines(XtermWidget xw, ScrnBuf sb, int where, unsigned n, unsigned size) * We're always ensured of having a visible buffer, but may not have saved * lines. Check the pointer that's sure to work. */ -#if OPT_SAVE_LINES + #define OkAllocBuf(screen) (screen->editBuf_index[0] != 0) -#else -#define OkAllocBuf(screen) (screen->saveBuf_index != 0) -#endif void ScrnAllocBuf(XtermWidget xw) @@ -1130,25 +1083,14 @@ ScrnAllocBuf(XtermWidget xw) if (!OkAllocBuf(screen)) { int nrows = MaxRows(screen); -#if !OPT_SAVE_LINES - int savelines = screen->scrollWidget ? screen->savelines : 0; -#endif TRACE(("ScrnAllocBuf %dx%d (%d)\n", nrows, MaxCols(screen), screen->savelines)); -#if OPT_SAVE_LINES if (screen->savelines != 0) { -#if OPT_FIFO_LINES /* for FIFO, we only need space for the index - addScrollback inits */ screen->saveBuf_index = allocScrnHead(screen, (unsigned) (screen->savelines)); -#else - screen->saveBuf_index = allocScrnBuf(xw, - (unsigned) screen->savelines, - (unsigned) MaxCols(screen), - &screen->saveBuf_data); -#endif } else { screen->saveBuf_index = 0; } @@ -1156,12 +1098,6 @@ ScrnAllocBuf(XtermWidget xw) (unsigned) nrows, (unsigned) MaxCols(screen), &screen->editBuf_data[0]); -#else /* !OPT_SAVE_LINES */ - screen->saveBuf_index = allocScrnBuf(xw, - (unsigned) (nrows + screen->savelines), - (unsigned) (MaxCols(screen)), - &screen->saveBuf_data); -#endif /* OPT_SAVE_LINES */ screen->visbuf = VisBuf(screen); } return; @@ -1254,43 +1190,15 @@ ScrnDeleteLine(XtermWidget xw, ScrnBuf sb, int last, int where, unsigned n) /* move up lines */ last -= ((int) n - 1); -#if OPT_SAVE_LINES + if (inSaveBuf(screen, sb, where)) { -#if !OPT_FIFO_LINES - int from = where + n; -#endif /* we shouldn't be editing the saveBuf, only scroll into it */ assert(last >= screen->savelines); if (sb != 0) { -#if OPT_FIFO_LINES /* copy lines from editBuf to saveBuf (allocating as we go...) */ - saveEditBufLines(screen, sb, n); -#else - ScrnClearLines(xw, sb, where, n, size); - - /* move the pointers within saveBuf */ - TRACE(("...%smoving pointers in saveBuf (compare %d %d)\n", - ((screen->savelines > from) - ? "" - : "SKIP "), - screen->savelines, - from)); - if (screen->savelines > from) { - MoveLineData(sb, - (unsigned) where, - (unsigned) from, - (unsigned) (screen->savelines - from)); - } - - /* reuse storage in saveBuf */ - TRACE(("...reuse %d lines storage in saveBuf\n", n)); - RestoreLineData(sb, (unsigned) screen->savelines - n, n); - - /* copy lines from editBuf to saveBuf (into the reused storage) */ - saveEditBufLines(screen, sb, n); -#endif + saveEditBufLines(screen, n); } /* adjust variables to fall-thru into changes only to editBuf */ @@ -1299,7 +1207,7 @@ ScrnDeleteLine(XtermWidget xw, ScrnBuf sb, int last, int where, unsigned n) where = 0; sb = screen->visbuf; } -#endif + /* * Scroll the visible buffer (editBuf). */ @@ -2014,9 +1922,6 @@ ScreenResize(XtermWidget xw, /* update buffers if the screen has changed size */ if (MaxRows(screen) != rows || MaxCols(screen) != cols) { -#if !OPT_SAVE_LINES - int whichBuf = 0; -#endif int delta_rows = rows - MaxRows(screen); #if OPT_TRACE int delta_cols = cols - MaxCols(screen); @@ -2026,14 +1931,9 @@ ScreenResize(XtermWidget xw, rows, cols, delta_rows, delta_cols)); if (screen->is_running) { -#if !OPT_FIFO_LINES - int savelines = (screen->scrollWidget - ? screen->savelines - : 0); -#endif if (screen->cursor_state) HideCursor(xw); -#if OPT_SAVE_LINES + /* * The non-visible buffer is simple, since we will not copy data * to/from the saved-lines. Do that first. @@ -2058,61 +1958,16 @@ ScreenResize(XtermWidget xw, if (delta_rows < 0) { unsigned move_up = (unsigned) (-delta_rows); - ScrnBuf dst = screen->saveBuf_index; - -#if OPT_FIFO_LINES int amount = ((MaxRows(screen) - (int) move_up - 1) - screen->cur_row); if (amount < 0) { /* move line-data from visible-buffer to save-buffer */ - saveEditBufLines(screen, dst, (unsigned) -amount); + saveEditBufLines(screen, (unsigned) -amount); move_down_by = amount; } else { move_down_by = 0; } -#else /* !OPT_FIFO_LINES */ - int amount = screen->savelines - (int) move_up; - - TRACE_SCRNBUF("before save", screen, dst, screen->savelines); - - /* shift lines in save-buffer to make room */ - TRACE(("...%smoving pointers in saveBuf (compare %d %d)\n", - (amount > 0 - ? "" - : "SKIP "), - screen->savelines, - move_up)); - if (amount > 0) { - SaveLineData(dst, 0, move_up); - - MoveLineData(dst, - 0, - move_up, - (unsigned) amount); - - TRACE(("...reuse %d lines storage in saveBuf\n", move_up)); - RestoreLineData(dst, - (unsigned) amount, - move_up); - TRACE_SCRNBUF("restoresave", screen, dst, screen->savelines); - } - - /* copy line-data from visible-buffer to save-buffer */ - saveEditBufLines(screen, dst, move_up); - - /* after data is copied, reallocate saved-lines */ - (void) Reallocate(xw, - &screen->saveBuf_index, - &screen->saveBuf_data, - (unsigned) savelines, - (unsigned) cols, - (unsigned) savelines); - TRACE_SCRNBUF("reallocSAVE", - screen, - screen->saveBuf_index, - savelines); -#endif /* OPT_FIFO_LINES */ /* decrease size of visible-buffer */ (void) Reallocate(xw, @@ -2127,11 +1982,7 @@ ScreenResize(XtermWidget xw, rows); } else { unsigned move_down = (unsigned) delta_rows; -#if OPT_FIFO_LINES long unsave_fifo; -#else - ScrnBuf src = screen->saveBuf_index; -#endif ScrnBuf dst; int amount; @@ -2179,7 +2030,6 @@ ScreenResize(XtermWidget xw, unsaveEditBufLines(screen, dst, move_down); TRACE_SCRNBUF("copied", screen, dst, rows); -#if OPT_FIFO_LINES unsave_fifo = (long) move_down; if (screen->saved_fifo < (int) unsave_fifo) unsave_fifo = screen->saved_fifo; @@ -2188,42 +2038,10 @@ ScreenResize(XtermWidget xw, while (unsave_fifo-- > 0) { deleteScrollback(screen); } -#else - amount = (screen->savelines - (int) move_down); - TRACE(("...%smoving pointers in saveBuf (compare %d %d)\n", - (amount > 0 - ? "" - : "SKIP "), - rows, - move_down)); - if (amount > 0) { - /* shift lines in save-buffer to account for copy */ - src = screen->saveBuf_index; - SaveLineData(src, amount, move_down); - - MoveLineData(src, - move_down, - 0, - (unsigned) amount); - - TRACE(("...reuse %d lines storage in saveBuf\n", move_down)); - RestoreLineData(src, - 0, - move_down); - } -#endif /* recover storage in save-buffer */ } } else { -#if !OPT_FIFO_LINES - (void) Reallocate(xw, - &screen->saveBuf_index, - &screen->saveBuf_data, - (unsigned) savelines, - (unsigned) cols, - (unsigned) savelines); -#endif (void) Reallocate(xw, &screen->editBuf_index[screen->whichBuf], &screen->editBuf_data[screen->whichBuf], @@ -2231,29 +2049,7 @@ ScreenResize(XtermWidget xw, (unsigned) cols, (unsigned) MaxRows(screen)); } -#else /* !OPT_SAVE_LINES */ - if (screen->whichBuf - && GravityIsSouthWest(xw)) { - /* swap buffer pointers back to make this work */ - whichBuf = screen->whichBuf; - SwitchBufPtrs(screen, 0); - } else { - whichBuf = 0; - } - if (screen->editBuf_index[1]) - (void) Reallocate(xw, - &screen->editBuf_index[1], - &screen->editBuf_data[1], - (unsigned) rows, - (unsigned) cols, - (unsigned) MaxRows(screen)); - move_down_by = Reallocate(xw, - &screen->saveBuf_index, - &screen->saveBuf_data, - (unsigned) (rows + savelines), - (unsigned) cols, - (unsigned) (MaxRows(screen) + savelines)); -#endif /* OPT_SAVE_LINES */ + screen->visbuf = VisBuf(screen); } @@ -2273,11 +2069,6 @@ ScreenResize(XtermWidget xw, set_cur_row(screen, screen->cur_row + move_down_by); screen->cursorp.row += move_down_by; ScrollSelection(screen, move_down_by, True); - -#if !OPT_SAVE_LINES - if (whichBuf) - SwitchBufPtrs(screen, whichBuf); /* put the pointers back */ -#endif } } @@ -2791,7 +2582,7 @@ ScrnMarkRectangle(XtermWidget xw, (exact ? ((target->right - target->left) + 1) : (getMaxCol(screen) - getMinCol(screen) + 1)), - False); + True); } } diff --git a/app/xterm/scrollbar.c b/app/xterm/scrollbar.c index 0bec7cd99..f3d5c8730 100644 --- a/app/xterm/scrollbar.c +++ b/app/xterm/scrollbar.c @@ -1,4 +1,4 @@ -/* $XTermId: scrollbar.c,v 1.211 2021/02/02 00:19:32 tom Exp $ */ +/* $XTermId: scrollbar.c,v 1.212 2021/06/06 23:14:52 Stelios.Bounanos Exp $ */ /* * Copyright 2000-2020,2021 by Thomas E. Dickey @@ -379,7 +379,9 @@ WindowScroll(XtermWidget xw, int top, Bool always) (void) always; #if OPT_SCROLL_LOCK - if (screen->allowScrollLock && (screen->scroll_lock && !always)) { + if (((screen->allowScrollLock && screen->scroll_lock) + || (screen->autoScrollLock && top < 0)) + && !always) { if (screen->scroll_dirty) { screen->scroll_dirty = False; ScrnRefresh(xw, 0, 0, MaxRows(screen), MaxCols(screen), False); diff --git a/app/xterm/svg.c b/app/xterm/svg.c index 96ba14e5e..73207e2af 100644 --- a/app/xterm/svg.c +++ b/app/xterm/svg.c @@ -1,4 +1,4 @@ -/* $XTermId: svg.c,v 1.19 2021/02/25 23:20:05 tom Exp $ */ +/* $XTermId: svg.c,v 1.21 2021/09/19 18:22:57 tom Exp $ */ /* * Copyright 2017-2020,2021 Thomas E. Dickey @@ -166,8 +166,8 @@ dumpSvgLine(XtermWidget xw, int row, FILE *fp) } #endif - XQueryColor(xw->screen.display, xw->core.colormap, &fgcolor); - XQueryColor(xw->screen.display, xw->core.colormap, &bgcolor); + (void) QueryOneColor(xw, &fgcolor); + (void) QueryOneColor(xw, &bgcolor); xevents(xw); if (ld->attribs[col] & BLINK) { diff --git a/app/xterm/terminfo b/app/xterm/terminfo index b6dfcd17e..00827a50c 100644 --- a/app/xterm/terminfo +++ b/app/xterm/terminfo @@ -1,4 +1,4 @@ -# $XTermId: terminfo,v 1.197 2021/02/28 12:02:56 tom Exp $ +# $XTermId: terminfo,v 1.200 2021/09/21 20:22:27 tom Exp $ # # Updates/notes/new entries (e.g., xterm-8bit, xterm-16color, xterm-256color) # - Thomas E. Dickey @@ -147,8 +147,9 @@ xterm-new|modern xterm terminal emulator, # Left/right margins are supported in xterm since patch #279 (2012/05/10) vt420+lrmm|VT420 left/right margins, - mgc=\E[?69l, + mgc=\E[?69l, smglp=\E[?69h\E[%i%p1%ds, 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, @@ -1347,8 +1348,27 @@ xterm-sun|xterm with sun function keys, knp=\E[222z, kpp=\E[216z, kund=\E[195z, + use=xterm+nopcfkeys, use=xterm+nofkeys, -# + +# Note: normally xterm supports modified function-keys as described in +# XTerm - "Other" modified keys +# https://invisible-island.net/xterm/modified-keys.html +# +# However, xterm-hp, xterm-sco and xterm-sun assume no modifiers. Here is +# a simple script which demonstrates these descriptions: +# #!/bin/sh +# export TERM=xterm-$1 +# xterm \ +# -kt $1 \ +# -fs 16 -fa mono \ +# -title $TERM \ +# -tn $TERM \ +# -xrm '*modifyCursorKeys:-1' \ +# -xrm '*modifyFunctionKeys:-1' \ +# -e tack +# e.g., "foo sun" if the script is named "foo" -TD + xterm-hp|xterm with hpterm function keys, kclr=\EJ, kcub1=\ED, @@ -1370,6 +1390,7 @@ xterm-hp|xterm with hpterm function keys, knp=\ES, kpp=\ET, use=xterm+nofkeys, + use=xterm+nopcfkeys, # # scoterm implements 48 function-keys using shift- and control-modifiers to # multiple 12 function-keys. X has a hard-coded limit of 35 function-keys, @@ -1579,6 +1600,58 @@ xterm+alt+title|xterm 90 and 251 features combined, rmcup=\E[?1049l\E[23;0;0t, smcup=\E[?1049h\E[22;0;0t, +# The xterm ctrlFKeys resource defaults to 10, so without the "pc-style" +# feature, e.g., setting the modifyCursorKeys and modifyFunctionKeys resources +# to -1 to disable them, one gets 42 function-keys on a 12-function-key +# keyboard, e.g., +# kf1 = \E[11~ +# kf11 shift f1 = \E[23~ +# kf21 control f1 = \E[42~ +# kf31 shift control f1 = \E[52~ +xterm+nopcfkeys|fragment without PC-style fkeys, + kf1=\E[11~, + kf10=\E[21~, + kf11=\E[23~, + kf12=\E[24~, + kf13=\E[25~, + kf14=\E[26~, + kf15=\E[28~, + kf16=\E[29~, + kf17=\E[31~, + kf18=\E[32~, + kf19=\E[33~, + kf2=\E[12~, + kf20=\E[34~, + kf21=\E[42~, + kf22=\E[43~, + kf23=\E[44~, + kf24=\E[45~, + kf25=\E[46~, + kf26=\E[47~, + kf27=\E[48~, + kf28=\E[49~, + kf29=\E[50~, + kf3=\E[13~, + kf30=\E[51~, + kf31=\E[52~, + kf32=\E[53~, + kf33=\E[54~, + kf34=\E[55~, + kf35=\E[56~, + kf36=\E[57~, + kf37=\E[58~, + kf38=\E[59~, + kf39=\E[60~, + kf4=\E[14~, + kf40=\E[61~, + kf41=\E[62~, + kf42=\E[63~, + kf5=\E[15~, + kf6=\E[17~, + kf7=\E[18~, + kf8=\E[19~, + kf9=\E[20~, + # from development after ncurses 6.1: # Xterm's emulation of the VT100 numeric keypad on a PC-keyboard runs into the # problem that the keypad layout is different, and that the natural choice for @@ -1593,19 +1666,32 @@ xterm+alt+title|xterm 90 and 251 features combined, # | NumLock | / | * | - | # | | $Oo | $Oj | $OS | # |_________|__kpDIV__|__kpMUL__|__kpSUB__| -# | 7 8 9 | | -# | $Ow | $Ox | $Oy | + | -# |_ka1__K1_|_________|_ka3__K3_| $Ok | -# | 4 | 5 | 6 | kpADD | +# | 7 8 9 | + | +# | $Ow | $Ox | $Oy | $Ok | +# |_ka1__K1_|_________|_ka3__K3_| kpADD | +# | 4 | 5 | 6 | | # | $Ot | $Ou | $Ov | | # |_________|_kb2__K2_|_________|_________| # | 1 | 2 | 3 | | # | $Oq | $Or | $Os | | # |_kc1__K4_|_________|_kc3__K5_| enter | -# | 0 | . | $OM | -# | $Op | $On | | -# |___________________|_________|_kent_@8_| +# | 0 | . | $OM | +# | $Op | $On | | +# |_______kpZRO_______|__kpDOT__|_kent_@8_| +# +# ka2, kb1, kb3 and kc2 are extensions, as are the mixed-case names. +# There are no termcap equivalents for these extensions. +# +# kpCMA (comma) is used here for the VT100 keypad, which xterm emulates with +# shifted-keypad-plus, though normally that invokes a font-size change. +# +# Old versions of xterm, e.g., xterm-xfree86, documented \EOE as kb2, which +# does not fit into this layout. The extension kp5 fits, but is not visible +# to termcap applications. As an alternative, kbeg (which does have a termcap +# equivalent) is provided. + xterm+keypad|xterm emulating VT100/VT220 numeric keypad, + kbeg=\EOE, kp5=\EOE, kpADD=\EOk, kpCMA=\EOl, @@ -1884,7 +1970,7 @@ xterm+256color|original xterm 256-color feature, colors#0x100, pairs#0x10000, initc=\E]4; - %p1%d;rgb:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, + %p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, oc=\E]104\007, setab=\E[ %? @@ -1918,7 +2004,7 @@ xterm+256color2|xterm 256-color feature, %e %p1%{16}%< %t10%p1%{8}%-%d - %e48:5: + %e48\:5\: %p1%d %; m, @@ -1929,7 +2015,7 @@ xterm+256color2|xterm 256-color feature, %e %p1%{16}%< %t9%p1%{8}%-%d - %e38:5: + %e38\:5\: %p1%d %; m, @@ -1968,16 +2054,16 @@ xterm+direct|xterm with direct-color indexing, %? %p1%{8}%< %t4%p1%d - %e48:2:: - %p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%d + %e48\:2\:\: + %p1%{65536}%/%d\:%p1%{256}%/%{255}%&%d\:%p1%{255}%&%d %; m, setaf=\E[ %? %p1%{8}%< %t3%p1%d - %e38:2:: - %p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%d + %e38\:2\:\: + %p1%{65536}%/%d\:%p1%{256}%/%{255}%&%d\:%p1%{255}%&%d %; m, setb@, diff --git a/app/xterm/trace.c b/app/xterm/trace.c index 32ce1abe4..377faede1 100644 --- a/app/xterm/trace.c +++ b/app/xterm/trace.c @@ -1,4 +1,4 @@ -/* $XTermId: trace.c,v 1.233 2021/03/09 01:14:50 tom Exp $ */ +/* $XTermId: trace.c,v 1.234 2021/09/14 20:09:56 tom Exp $ */ /* * Copyright 1997-2020,2021 by Thomas E. Dickey @@ -914,6 +914,13 @@ TraceEvent(const char *tag, XEvent *ev, String *params, Cardinal *num_params) ev->xnoexpose.major_code, ev->xnoexpose.minor_code)); break; + case GraphicsExpose: + TRACE((" send_event:%d display %p major:%d minor:%d", + ev->xgraphicsexpose.send_event, + (void *) ev->xgraphicsexpose.display, + ev->xgraphicsexpose.major_code, + ev->xgraphicsexpose.minor_code)); + break; case SelectionClear: TRACE((" selection:%s", TraceAtomName(ev->xselectionclear.display, diff --git a/app/xterm/util.c b/app/xterm/util.c index db7ca67a8..2cc80bda1 100644 --- a/app/xterm/util.c +++ b/app/xterm/util.c @@ -1,4 +1,4 @@ -/* $XTermId: util.c,v 1.877 2021/03/21 21:27:08 tom Exp $ */ +/* $XTermId: util.c,v 1.887 2021/09/19 18:22:57 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -80,6 +80,13 @@ #include <graphics.h> +#define IncrementSavedLines(amount) \ + if (screen->savedlines < screen->savelines) { \ + if ((screen->savedlines += amount) > screen->savelines) \ + screen->savedlines = screen->savelines; \ + ScrollBarDrawThumb(xw, 1); \ + } + static int handle_translated_exposure(XtermWidget xw, int rect_x, int rect_y, @@ -228,15 +235,7 @@ FlushScroll(XtermWidget xw) refreshheight = screen->scroll_amt; } } - i = screen->savedlines; - if (i < screen->savelines) { - i += screen->scroll_amt; - if (i > screen->savelines) { - i = screen->savelines; - } - screen->savedlines = i; - ScrollBarDrawThumb(xw, 1); - } + IncrementSavedLines(screen->scroll_amt); } else { scrolltop = screen->top_marg + shift; i = bot - (screen->bot_marg - screen->refresh_amt + screen->scroll_amt); @@ -611,7 +610,8 @@ xtermScroll(XtermWidget xw, int amount) && screen->top_marg == 0); Boolean scroll_full_line = ((left == 0) && (right == screen->max_col)); - TRACE(("xtermScroll count=%d\n", amount)); + TRACE(("xtermScroll count=%d (top %d, saved %d)\n", amount, + screen->topline, screen->savelines)); screen->cursor_busy += 1; screen->cursor_moved = True; @@ -627,7 +627,8 @@ xtermScroll(XtermWidget xw, int amount) refreshheight = 0; } else #if OPT_SCROLL_LOCK - if (screen->allowScrollLock && screen->scroll_lock) { + if ((screen->allowScrollLock && screen->scroll_lock) + || (screen->autoScrollLock && screen->topline < 0)) { refreshheight = 0; screen->scroll_amt = 0; screen->refresh_amt = 0; @@ -686,12 +687,7 @@ xtermScroll(XtermWidget xw, int amount) scrolltop = 0; if ((scrollheight += shift) > i) scrollheight = i; - if ((i = screen->savedlines) < screen->savelines) { - if ((i += amount) > screen->savelines) - i = screen->savelines; - screen->savedlines = i; - ScrollBarDrawThumb(xw, 1); - } + IncrementSavedLines(amount); } else { scrolltop = screen->top_marg + shift; if ((i = screen->bot_marg - bot) > 0) { @@ -769,6 +765,8 @@ xtermScroll(XtermWidget xw, int amount) done: screen->do_wrap = save_wrap; screen->cursor_busy -= 1; + TRACE(("...xtermScroll count=%d (top %d, saved %d)\n", amount, + screen->topline, screen->savelines)); return; } @@ -1304,7 +1302,7 @@ InsertLine(XtermWidget xw, int n) * at the cursor's position, lines added at bottom margin are blank. */ void -DeleteLine(XtermWidget xw, int n) +DeleteLine(XtermWidget xw, int n, Bool canSave) { TScreen *screen = TScreenOf(xw); int i; @@ -1340,8 +1338,10 @@ DeleteLine(XtermWidget xw, int n) if (screen->scroll_amt >= 0 && screen->cur_row == screen->top_marg) { if (screen->refresh_amt + n > MaxRows(screen)) FlushScroll(xw); - screen->scroll_amt += n; - screen->refresh_amt += n; + if (canSave) { + screen->scroll_amt += n; + screen->refresh_amt += n; + } } else { if (screen->scroll_amt) FlushScroll(xw); @@ -1352,7 +1352,7 @@ DeleteLine(XtermWidget xw, int n) if (n > 0) { if (left > 0 || right < screen->max_col) { scrollInMargins(xw, n, screen->cur_row); - } else if (scroll_all_lines) { + } else if (canSave && scroll_all_lines) { ScrnDeleteLine(xw, screen->saveBuf_index, screen->bot_marg + screen->savelines, @@ -1386,16 +1386,11 @@ DeleteLine(XtermWidget xw, int n) if ((refreshtop = screen->bot_marg - refreshheight + 1 + shift) > (i = screen->max_row - refreshheight + 1)) refreshtop = i; - if (scroll_all_lines) { + if (canSave && scroll_all_lines) { scrolltop = 0; if ((scrollheight += shift) > i) scrollheight = i; - if ((i = screen->savedlines) < screen->savelines) { - if ((i += n) > screen->savelines) - i = screen->savelines; - screen->savedlines = i; - ScrollBarDrawThumb(xw, 1); - } + IncrementSavedLines(n); } else { scrolltop = screen->cur_row + shift; if ((i = screen->bot_marg - bot) > 0) { @@ -2013,6 +2008,25 @@ do_erase_display(XtermWidget xw, int param, int mode) } static Boolean +row_has_data(TScreen *screen, int row) +{ + Boolean result = False; + CLineData *ld; + + if ((ld = getLineData(screen, row)) != 0) { + int col; + + for (col = 0; col < screen->max_col; ++col) { + if (ld->attribs[col] & CHARDRAWN && ld->charData[col] != ' ') { + result = True; + break; + } + } + } + return result; +} + +static Boolean screen_has_data(XtermWidget xw) { TScreen *screen = TScreenOf(xw); @@ -2020,39 +2034,69 @@ screen_has_data(XtermWidget xw) int row; for (row = 0; row < screen->max_row; ++row) { - CLineData *ld; + if (row_has_data(screen, row)) { + result = True; + break; + } + } + return result; +} - if ((ld = getLineData(screen, row)) != 0) { - int col; +static void +do_extra_scroll(XtermWidget xw, Bool trimmed) +{ + TScreen *screen = TScreenOf(xw); + int row; - for (col = 0; col < screen->max_col; ++col) { - if (ld->attribs[col] & CHARDRAWN) { - result = True; - break; + if (screen_has_data(xw)) { + TRACE(("do_extra_scroll buffer=%d, trimmed=%s\n", screen->whichBuf, + BtoS(trimmed))); + if (trimmed) { + Boolean hadData = ((screen->saved_fifo > 0) + ? row_has_data(screen, -1) + : False); + + for (row = 0; row < screen->max_row; ++row) { + Boolean hasData = row_has_data(screen, row); + if (hasData || hadData) { + LineData *dst = addScrollback(screen); + LineData *src = getLineData(screen, row); + copyLineData(dst, src); + IncrementSavedLines(1); } + hadData = hasData; } + } else { + xtermScroll(xw, screen->max_row); + FlushScroll(xw); } - if (result) - break; + xtermRepaint(xw); } - return result; } /* - * Like tiXtraScroll, perform a scroll up of the page contents. In this case, - * it happens for the special case when erasing the whole display starting from - * the upper-left corner of the screen. + * Like tiXtraScroll, perform a scroll up of the page contents. + * + * In this case, it happens for the special case when erasing the whole + * display, e.g., an erase-below starting from the upper-left corner of the + * screen, or if the erasure applies to the whole screen. */ void -do_cd_xtra_scroll(XtermWidget xw) +do_cd_xtra_scroll(XtermWidget xw, int param) { TScreen *screen = TScreenOf(xw); + TRACE(("do_cd_xtra_scroll param %d, @%d,%d vs %d,%d\n", param, + screen->cur_row, + screen->cur_col, + ScrnTopMargin(xw), + ScrnLeftMargin(xw))); if (xw->misc.cdXtraScroll - && screen->cur_col == 0 - && screen->cur_row == 0 - && screen_has_data(xw)) { - xtermScroll(xw, screen->max_row); + && (param == 2 || + (param == 0 + && screen->cur_col <= ScrnLeftMargin(xw) + && screen->cur_row <= ScrnTopMargin(xw)))) { + do_extra_scroll(xw, (xw->misc.cdXtraScroll == edTrim)); } } @@ -2063,10 +2107,8 @@ do_cd_xtra_scroll(XtermWidget xw) void do_ti_xtra_scroll(XtermWidget xw) { - TScreen *screen = TScreenOf(xw); - if (xw->misc.tiXtraScroll) { - xtermScroll(xw, screen->max_row); + do_extra_scroll(xw, False); } } @@ -2708,13 +2750,8 @@ swapLocally(ToSwap * list, int *count, ColorRes * fg, ColorRes * bg hc_param) ColorRes tmp; Boolean found = False; -#if OPT_COLOR_RES Pixel fg_color = fg->value; Pixel bg_color = bg->value; -#else - Pixel fg_color = *fg; - Pixel bg_color = *bg; -#endif #if OPT_HIGHLIGHT_COLOR if ((fg_color != bg_color) || !hilite_color) @@ -2911,7 +2948,7 @@ getXftColor(XtermWidget xw, Pixel pixel) if (!found) { i = oldest; color.pixel = pixel; - XQueryColor(TScreenOf(xw)->display, xw->core.colormap, &color); + (void) QueryOneColor(xw, &color); cache[i].color.color.red = color.red; cache[i].color.color.green = color.green; cache[i].color.color.blue = color.blue; @@ -2937,14 +2974,14 @@ getXftColor(XtermWidget xw, Pixel pixel) ? (((ch) >= 128 && (ch) < 160) \ ? (TScreenOf(xw)->c1_printable ? 1 : 0) \ : 1) \ - : CharWidth(ch))) + : CharWidth(TScreenOf(xw), ch))) #else #define XtermCellWidth(xw, ch) \ (((ch) == 0 || (ch) == 127) \ ? 0 \ : (((ch) < 256) \ ? 1 \ - : CharWidth(ch))) + : CharWidth(TScreenOf(xw), ch))) #endif #endif /* OPT_RENDERWIDE */ @@ -3247,7 +3284,7 @@ ucs_workaround(XTermDraw * params, IChar eqv = (IChar) AsciiEquivs(ch); if (eqv != (IChar) ch) { - int width = CharWidth(ch); + int width = CharWidth(screen, ch); do { drawXtermText(params, @@ -3939,7 +3976,7 @@ drawXtermText(XTermDraw * params, unsigned ch = (unsigned) text[last]; int filler = 0; #if OPT_WIDE_CHARS - int needed = forceDbl ? 2 : CharWidth(ch); + int needed = forceDbl ? 2 : CharWidth(screen, ch); XftFont *currFont = pickXftFont(needed, font, wfont); XftFont *tempFont = 0; #define CURR_TEMP (tempFont ? tempFont : currFont) @@ -4210,7 +4247,7 @@ drawXtermText(XTermDraw * params, drewBoxes = True; continue; } - ch_width = CharWidth(ch); + ch_width = CharWidth(screen, ch); isMissing = IsXtermMissingChar(screen, ch, ((recur.on_wide || ch_width > 1) @@ -4335,7 +4372,7 @@ drawXtermText(XTermDraw * params, if (!needWide && !IsIcon(screen) - && ((recur.on_wide || CharWidth(ch) > 1) + && ((recur.on_wide || CharWidth(screen, ch) > 1) && okFont(NormalWFont(screen)))) { needWide = True; } @@ -4996,9 +5033,9 @@ getXtermForeground(XtermWidget xw, unsigned attr_flags, int color) && ((color >= 0) || (result != (Pixel) color))) { XColor work; - work.pixel = result; last_in = result; - if (XQueryColor(TScreenOf(xw)->display, xw->core.colormap, &work)) { + work.pixel = result; + if (QueryOneColor(xw, &work)) { DIM_IT(red); DIM_IT(green); DIM_IT(blue); @@ -5059,7 +5096,7 @@ addXtermCombining(TScreen *screen, int row, int col, unsigned ch) size_t off; TRACE(("addXtermCombining %d,%d U+%04X (%d)\n", - row, col, ch, CharWidth(ch))); + row, col, ch, CharWidth(screen, ch))); for_each_combData(off, ld) { if (!ld->combData[off][col]) { diff --git a/app/xterm/version.h b/app/xterm/version.h index 03a6df1ee..cf303f275 100644 --- a/app/xterm/version.h +++ b/app/xterm/version.h @@ -1,4 +1,4 @@ -/* $XTermId: version.h,v 1.512 2021/03/26 22:59:42 tom Exp $ */ +/* $XTermId: version.h,v 1.516 2021/09/21 23:46:34 tom Exp $ */ /* * Copyright 1998-2020,2021 by Thomas E. Dickey @@ -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 367 -#define XTERM_DATE 2021-03-26 +#define XTERM_PATCH 369 +#define XTERM_DATE 2021-09-21 #ifndef __vendorversion__ #define __vendorversion__ "XTerm/OpenBSD" diff --git a/app/xterm/wcwidth.c b/app/xterm/wcwidth.c index 658b3ac15..a94c9db0d 100644 --- a/app/xterm/wcwidth.c +++ b/app/xterm/wcwidth.c @@ -1,9 +1,9 @@ -/* $XTermId: wcwidth.c,v 1.57 2020/04/27 21:45:06 tom Exp $ */ +/* $XTermId: wcwidth.c,v 1.58 2021/06/12 13:08:53 tom Exp $ */ /* $XFree86: xc/programs/xterm/wcwidth.c,v 1.9 2006/06/19 00:36:52 dickey Exp $ */ /* - * Copyright 2002-2019,2020 by Thomas E. Dickey + * Copyright 2002-2020,2021 by Thomas E. Dickey * * All Rights Reserved * @@ -47,7 +47,7 @@ * * Since then, additional updates have been made: * + data-type fixes - * + new Unicode releases (6.2.0, 9.0.0), + * + new Unicode releases (6.2.0, 9.0.0, etc), * + additional special symbol blocks have been added to the special cases. * + soft-hyphen behavior has been made configurable. * + added table shows when a character is not part of Unicode. @@ -112,6 +112,7 @@ * disclaims all warranties with regard to this software. * * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + *----------------------------------------------------------------------------- */ #ifdef TEST_DRIVER @@ -225,20 +226,21 @@ int mk_wcwidth(wchar_t ucs) { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x07FD, 0x07FD }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0859, 0x085B }, - { 0x08D3, 0x0902 }, { 0x093A, 0x093A }, { 0x093C, 0x093C }, - { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0957 }, - { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, - { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, - { 0x09FE, 0x09FE }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, - { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, - { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, - { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, - { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, - { 0x0AFA, 0x0AFF }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, - { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, - { 0x0B55, 0x0B56 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, - { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C00, 0x0C00 }, - { 0x0C04, 0x0C04 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, + { 0x0890, 0x0891 }, { 0x0898, 0x089F }, { 0x08CA, 0x0902 }, + { 0x093A, 0x093A }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, + { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x09FE, 0x09FE }, + { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, + { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0AFA, 0x0AFF }, + { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, + { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, { 0x0B55, 0x0B56 }, + { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, { 0x0C00, 0x0C00 }, { 0x0C04, 0x0C04 }, + { 0x0C3C, 0x0C3C }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C81 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, @@ -255,45 +257,46 @@ int mk_wcwidth(wchar_t ucs) { 0x105E, 0x1060 }, { 0x1071, 0x1074 }, { 0x1082, 0x1082 }, { 0x1085, 0x1086 }, { 0x108D, 0x108D }, { 0x109D, 0x109D }, { 0x1160, 0x11FF }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, - { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, + { 0x1732, 0x1733 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, - { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180E }, + { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180F }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A1B, 0x1A1B }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, - { 0x1AB0, 0x1AC0 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, + { 0x1AB0, 0x1ACE }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BAB, 0x1BAD }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, - { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF9 }, - { 0x1DFB, 0x1DFF }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, - { 0x2060, 0x2064 }, { 0x2066, 0x206F }, { 0x20D0, 0x20F0 }, - { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, - { 0x302A, 0x302D }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, - { 0xA674, 0xA67D }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, - { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, - { 0xA825, 0xA826 }, { 0xA82C, 0xA82C }, { 0xA8C4, 0xA8C5 }, - { 0xA8E0, 0xA8F1 }, { 0xA8FF, 0xA8FF }, { 0xA926, 0xA92D }, - { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, - { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BD }, { 0xA9E5, 0xA9E5 }, - { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, - { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA7C, 0xAA7C }, - { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, - { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAAEC, 0xAAED }, - { 0xAAF6, 0xAAF6 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, - { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, - { 0xFE20, 0xFE2F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, - { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, - { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, - { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, - { 0x10D24, 0x10D27 }, { 0x10EAB, 0x10EAC }, { 0x10F46, 0x10F50 }, - { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11081 }, - { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110BD, 0x110BD }, + { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DFF }, + { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, + { 0x2066, 0x206F }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, + { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302D }, + { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, + { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, + { 0xA82C, 0xA82C }, { 0xA8C4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, + { 0xA8FF, 0xA8FF }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, + { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, + { 0xA9BC, 0xA9BD }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA2E }, + { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4C }, { 0xAA7C, 0xAA7C }, { 0xAAB0, 0xAAB0 }, + { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, + { 0xAAC1, 0xAAC1 }, { 0xAAEC, 0xAAED }, { 0xAAF6, 0xAAF6 }, + { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, + { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, + { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x101FD, 0x101FD }, + { 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 }, { 0x110BD, 0x110BD }, { 0x110C2, 0x110C2 }, { 0x110CD, 0x110CD }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111C9, 0x111CC }, { 0x111CF, 0x111CF }, @@ -321,12 +324,13 @@ int mk_wcwidth(wchar_t ucs) { 0x11D97, 0x11D97 }, { 0x11EF3, 0x11EF4 }, { 0x13430, 0x13438 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F }, { 0x16F8F, 0x16F92 }, { 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E }, - { 0x1BCA0, 0x1BCA3 }, { 0x1D167, 0x1D169 }, { 0x1D173, 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 }, { 0x1E130, 0x1E136 }, + { 0x1BCA0, 0x1BCA3 }, { 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, + { 0x1D167, 0x1D169 }, { 0x1D173, 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 }, { 0x1E130, 0x1E136 }, { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; @@ -343,42 +347,42 @@ int mk_wcwidth(wchar_t ucs) { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0530, 0x0530 }, { 0x0557, 0x0558 }, { 0x058B, 0x058C }, { 0x0590, 0x0590 }, { 0x05C8, 0x05CF }, { 0x05EB, 0x05EE }, { 0x05F5, 0x05FF }, - { 0x061D, 0x061D }, { 0x070E, 0x070E }, { 0x074B, 0x074C }, - { 0x07B2, 0x07BF }, { 0x07FB, 0x07FC }, { 0x082E, 0x082F }, - { 0x083F, 0x083F }, { 0x085C, 0x085D }, { 0x085F, 0x085F }, - { 0x086B, 0x089F }, { 0x08B5, 0x08B5 }, { 0x08C8, 0x08D2 }, - { 0x0984, 0x0984 }, { 0x098D, 0x098E }, { 0x0991, 0x0992 }, - { 0x09A9, 0x09A9 }, { 0x09B1, 0x09B1 }, { 0x09B3, 0x09B5 }, - { 0x09BA, 0x09BB }, { 0x09C5, 0x09C6 }, { 0x09C9, 0x09CA }, - { 0x09CF, 0x09D6 }, { 0x09D8, 0x09DB }, { 0x09DE, 0x09DE }, - { 0x09E4, 0x09E5 }, { 0x09FF, 0x0A00 }, { 0x0A04, 0x0A04 }, - { 0x0A0B, 0x0A0E }, { 0x0A11, 0x0A12 }, { 0x0A29, 0x0A29 }, - { 0x0A31, 0x0A31 }, { 0x0A34, 0x0A34 }, { 0x0A37, 0x0A37 }, - { 0x0A3A, 0x0A3B }, { 0x0A3D, 0x0A3D }, { 0x0A43, 0x0A46 }, - { 0x0A49, 0x0A4A }, { 0x0A4E, 0x0A50 }, { 0x0A52, 0x0A58 }, - { 0x0A5D, 0x0A5D }, { 0x0A5F, 0x0A65 }, { 0x0A77, 0x0A80 }, - { 0x0A84, 0x0A84 }, { 0x0A8E, 0x0A8E }, { 0x0A92, 0x0A92 }, - { 0x0AA9, 0x0AA9 }, { 0x0AB1, 0x0AB1 }, { 0x0AB4, 0x0AB4 }, - { 0x0ABA, 0x0ABB }, { 0x0AC6, 0x0AC6 }, { 0x0ACA, 0x0ACA }, - { 0x0ACE, 0x0ACF }, { 0x0AD1, 0x0ADF }, { 0x0AE4, 0x0AE5 }, - { 0x0AF2, 0x0AF8 }, { 0x0B00, 0x0B00 }, { 0x0B04, 0x0B04 }, - { 0x0B0D, 0x0B0E }, { 0x0B11, 0x0B12 }, { 0x0B29, 0x0B29 }, - { 0x0B31, 0x0B31 }, { 0x0B34, 0x0B34 }, { 0x0B3A, 0x0B3B }, - { 0x0B45, 0x0B46 }, { 0x0B49, 0x0B4A }, { 0x0B4E, 0x0B54 }, - { 0x0B58, 0x0B5B }, { 0x0B5E, 0x0B5E }, { 0x0B64, 0x0B65 }, - { 0x0B78, 0x0B81 }, { 0x0B84, 0x0B84 }, { 0x0B8B, 0x0B8D }, - { 0x0B91, 0x0B91 }, { 0x0B96, 0x0B98 }, { 0x0B9B, 0x0B9B }, - { 0x0B9D, 0x0B9D }, { 0x0BA0, 0x0BA2 }, { 0x0BA5, 0x0BA7 }, - { 0x0BAB, 0x0BAD }, { 0x0BBA, 0x0BBD }, { 0x0BC3, 0x0BC5 }, - { 0x0BC9, 0x0BC9 }, { 0x0BCE, 0x0BCF }, { 0x0BD1, 0x0BD6 }, - { 0x0BD8, 0x0BE5 }, { 0x0BFB, 0x0BFF }, { 0x0C0D, 0x0C0D }, - { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C3A, 0x0C3C }, - { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, - { 0x0C57, 0x0C57 }, { 0x0C5B, 0x0C5F }, { 0x0C64, 0x0C65 }, + { 0x070E, 0x070E }, { 0x074B, 0x074C }, { 0x07B2, 0x07BF }, + { 0x07FB, 0x07FC }, { 0x082E, 0x082F }, { 0x083F, 0x083F }, + { 0x085C, 0x085D }, { 0x085F, 0x085F }, { 0x086B, 0x086F }, + { 0x088F, 0x088F }, { 0x0892, 0x0897 }, { 0x0984, 0x0984 }, + { 0x098D, 0x098E }, { 0x0991, 0x0992 }, { 0x09A9, 0x09A9 }, + { 0x09B1, 0x09B1 }, { 0x09B3, 0x09B5 }, { 0x09BA, 0x09BB }, + { 0x09C5, 0x09C6 }, { 0x09C9, 0x09CA }, { 0x09CF, 0x09D6 }, + { 0x09D8, 0x09DB }, { 0x09DE, 0x09DE }, { 0x09E4, 0x09E5 }, + { 0x09FF, 0x0A00 }, { 0x0A04, 0x0A04 }, { 0x0A0B, 0x0A0E }, + { 0x0A11, 0x0A12 }, { 0x0A29, 0x0A29 }, { 0x0A31, 0x0A31 }, + { 0x0A34, 0x0A34 }, { 0x0A37, 0x0A37 }, { 0x0A3A, 0x0A3B }, + { 0x0A3D, 0x0A3D }, { 0x0A43, 0x0A46 }, { 0x0A49, 0x0A4A }, + { 0x0A4E, 0x0A50 }, { 0x0A52, 0x0A58 }, { 0x0A5D, 0x0A5D }, + { 0x0A5F, 0x0A65 }, { 0x0A77, 0x0A80 }, { 0x0A84, 0x0A84 }, + { 0x0A8E, 0x0A8E }, { 0x0A92, 0x0A92 }, { 0x0AA9, 0x0AA9 }, + { 0x0AB1, 0x0AB1 }, { 0x0AB4, 0x0AB4 }, { 0x0ABA, 0x0ABB }, + { 0x0AC6, 0x0AC6 }, { 0x0ACA, 0x0ACA }, { 0x0ACE, 0x0ACF }, + { 0x0AD1, 0x0ADF }, { 0x0AE4, 0x0AE5 }, { 0x0AF2, 0x0AF8 }, + { 0x0B00, 0x0B00 }, { 0x0B04, 0x0B04 }, { 0x0B0D, 0x0B0E }, + { 0x0B11, 0x0B12 }, { 0x0B29, 0x0B29 }, { 0x0B31, 0x0B31 }, + { 0x0B34, 0x0B34 }, { 0x0B3A, 0x0B3B }, { 0x0B45, 0x0B46 }, + { 0x0B49, 0x0B4A }, { 0x0B4E, 0x0B54 }, { 0x0B58, 0x0B5B }, + { 0x0B5E, 0x0B5E }, { 0x0B64, 0x0B65 }, { 0x0B78, 0x0B81 }, + { 0x0B84, 0x0B84 }, { 0x0B8B, 0x0B8D }, { 0x0B91, 0x0B91 }, + { 0x0B96, 0x0B98 }, { 0x0B9B, 0x0B9B }, { 0x0B9D, 0x0B9D }, + { 0x0BA0, 0x0BA2 }, { 0x0BA5, 0x0BA7 }, { 0x0BAB, 0x0BAD }, + { 0x0BBA, 0x0BBD }, { 0x0BC3, 0x0BC5 }, { 0x0BC9, 0x0BC9 }, + { 0x0BCE, 0x0BCF }, { 0x0BD1, 0x0BD6 }, { 0x0BD8, 0x0BE5 }, + { 0x0BFB, 0x0BFF }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, + { 0x0C29, 0x0C29 }, { 0x0C3A, 0x0C3B }, { 0x0C45, 0x0C45 }, + { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, + { 0x0C5B, 0x0C5C }, { 0x0C5E, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C76 }, { 0x0C8D, 0x0C8D }, { 0x0C91, 0x0C91 }, { 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB }, { 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 }, - { 0x0CD7, 0x0CDD }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 }, + { 0x0CD7, 0x0CDC }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 }, { 0x0CF0, 0x0CF0 }, { 0x0CF3, 0x0CFF }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D80 }, @@ -400,42 +404,41 @@ int mk_wcwidth(wchar_t ucs) { 0x12C6, 0x12C7 }, { 0x12D7, 0x12D7 }, { 0x1311, 0x1311 }, { 0x1316, 0x1317 }, { 0x135B, 0x135C }, { 0x137D, 0x137F }, { 0x139A, 0x139F }, { 0x13F6, 0x13F7 }, { 0x13FE, 0x13FF }, - { 0x169D, 0x169F }, { 0x16F9, 0x16FF }, { 0x170D, 0x170D }, - { 0x1715, 0x171F }, { 0x1737, 0x173F }, { 0x1754, 0x175F }, - { 0x176D, 0x176D }, { 0x1771, 0x1771 }, { 0x1774, 0x177F }, - { 0x17DE, 0x17DF }, { 0x17EA, 0x17EF }, { 0x17FA, 0x17FF }, - { 0x180F, 0x180F }, { 0x181A, 0x181F }, { 0x1879, 0x187F }, - { 0x18AB, 0x18AF }, { 0x18F6, 0x18FF }, { 0x191F, 0x191F }, - { 0x192C, 0x192F }, { 0x193C, 0x193F }, { 0x1941, 0x1943 }, - { 0x196E, 0x196F }, { 0x1975, 0x197F }, { 0x19AC, 0x19AF }, - { 0x19CA, 0x19CF }, { 0x19DB, 0x19DD }, { 0x1A1C, 0x1A1D }, - { 0x1A5F, 0x1A5F }, { 0x1A7D, 0x1A7E }, { 0x1A8A, 0x1A8F }, - { 0x1A9A, 0x1A9F }, { 0x1AAE, 0x1AAF }, { 0x1AC1, 0x1AFF }, - { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BF4, 0x1BFB }, - { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C89, 0x1C8F }, - { 0x1CBB, 0x1CBC }, { 0x1CC8, 0x1CCF }, { 0x1CFB, 0x1CFF }, - { 0x1DFA, 0x1DFA }, { 0x1F16, 0x1F17 }, { 0x1F1E, 0x1F1F }, + { 0x169D, 0x169F }, { 0x16F9, 0x16FF }, { 0x1716, 0x171E }, + { 0x1737, 0x173F }, { 0x1754, 0x175F }, { 0x176D, 0x176D }, + { 0x1771, 0x1771 }, { 0x1774, 0x177F }, { 0x17DE, 0x17DF }, + { 0x17EA, 0x17EF }, { 0x17FA, 0x17FF }, { 0x181A, 0x181F }, + { 0x1879, 0x187F }, { 0x18AB, 0x18AF }, { 0x18F6, 0x18FF }, + { 0x191F, 0x191F }, { 0x192C, 0x192F }, { 0x193C, 0x193F }, + { 0x1941, 0x1943 }, { 0x196E, 0x196F }, { 0x1975, 0x197F }, + { 0x19AC, 0x19AF }, { 0x19CA, 0x19CF }, { 0x19DB, 0x19DD }, + { 0x1A1C, 0x1A1D }, { 0x1A5F, 0x1A5F }, { 0x1A7D, 0x1A7E }, + { 0x1A8A, 0x1A8F }, { 0x1A9A, 0x1A9F }, { 0x1AAE, 0x1AAF }, + { 0x1ACF, 0x1AFF }, { 0x1B4D, 0x1B4F }, { 0x1B7F, 0x1B7F }, + { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, + { 0x1C89, 0x1C8F }, { 0x1CBB, 0x1CBC }, { 0x1CC8, 0x1CCF }, + { 0x1CFB, 0x1CFF }, { 0x1F16, 0x1F17 }, { 0x1F1E, 0x1F1F }, { 0x1F46, 0x1F47 }, { 0x1F4E, 0x1F4F }, { 0x1F58, 0x1F58 }, { 0x1F5A, 0x1F5A }, { 0x1F5C, 0x1F5C }, { 0x1F5E, 0x1F5E }, { 0x1F7E, 0x1F7F }, { 0x1FB5, 0x1FB5 }, { 0x1FC5, 0x1FC5 }, { 0x1FD4, 0x1FD5 }, { 0x1FDC, 0x1FDC }, { 0x1FF0, 0x1FF1 }, { 0x1FF5, 0x1FF5 }, { 0x1FFF, 0x1FFF }, { 0x2028, 0x2029 }, { 0x2065, 0x2065 }, { 0x2072, 0x2073 }, { 0x208F, 0x208F }, - { 0x209D, 0x209F }, { 0x20C0, 0x20CF }, { 0x20F1, 0x20FF }, + { 0x209D, 0x209F }, { 0x20C1, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218C, 0x218F }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, - { 0x2B74, 0x2B75 }, { 0x2B96, 0x2B96 }, { 0x2C2F, 0x2C2F }, - { 0x2C5F, 0x2C5F }, { 0x2CF4, 0x2CF8 }, { 0x2D26, 0x2D26 }, - { 0x2D28, 0x2D2C }, { 0x2D2E, 0x2D2F }, { 0x2D68, 0x2D6E }, - { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, - { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, - { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, - { 0x2DDF, 0x2DDF }, { 0x2E53, 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 }, { 0xA7C0, 0xA7C1 }, { 0xA7CB, 0xA7F4 }, + { 0x2B74, 0x2B75 }, { 0x2B96, 0x2B96 }, { 0x2CF4, 0x2CF8 }, + { 0x2D26, 0x2D26 }, { 0x2D28, 0x2D2C }, { 0x2D2E, 0x2D2F }, + { 0x2D68, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, + { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, + { 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 }, @@ -447,24 +450,27 @@ int mk_wcwidth(wchar_t ucs) { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xDFFF }, { 0xFA6E, 0xFA6F }, { 0xFADA, 0xFAFF }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB37, 0xFB37 }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, - { 0xFB42, 0xFB42 }, { 0xFB45, 0xFB45 }, { 0xFBC2, 0xFBD2 }, - { 0xFD40, 0xFD4F }, { 0xFD90, 0xFD91 }, { 0xFDC8, 0xFDEF }, - { 0xFDFE, 0xFDFF }, { 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 }, { 0x10570, 0x105FF }, - { 0x10737, 0x1073F }, { 0x10756, 0x1075F }, { 0x10768, 0x107FF }, + { 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 }, @@ -479,49 +485,52 @@ int mk_wcwidth(wchar_t ucs) { 0x10CB3, 0x10CBF }, { 0x10CF3, 0x10CF9 }, { 0x10D28, 0x10D2F }, { 0x10D3A, 0x10E5F }, { 0x10E7F, 0x10E7F }, { 0x10EAA, 0x10EAA }, { 0x10EAE, 0x10EAF }, { 0x10EB2, 0x10EFF }, { 0x10F28, 0x10F2F }, - { 0x10F5A, 0x10FAF }, { 0x10FCC, 0x10FDF }, { 0x10FF7, 0x10FFF }, - { 0x1104E, 0x11051 }, { 0x11070, 0x1107E }, { 0x110C2, 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 }, { 0x116B9, 0x116BF }, - { 0x116CA, 0x116FF }, { 0x1171B, 0x1171C }, { 0x1172C, 0x1172F }, - { 0x11740, 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, 0x11ABF }, { 0x11AF9, 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 }, { 0x11FB1, 0x11FBF }, - { 0x11FF2, 0x11FFE }, { 0x1239A, 0x123FF }, { 0x1246F, 0x1246F }, - { 0x12475, 0x1247F }, { 0x12544, 0x12FFF }, { 0x1342F, 0x1342F }, - { 0x13439, 0x143FF }, { 0x14647, 0x167FF }, { 0x16A39, 0x16A3F }, - { 0x16A5F, 0x16A5F }, { 0x16A6A, 0x16A6D }, { 0x16A70, 0x16ACF }, + { 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 }, + { 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 }, + { 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, 0x1AFFF }, { 0x1B11F, 0x1B14F }, + { 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, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, - { 0x1D127, 0x1D128 }, { 0x1D1E9, 0x1D1FF }, { 0x1D246, 0x1D2DF }, + { 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 }, @@ -530,11 +539,13 @@ int mk_wcwidth(wchar_t ucs) { 0x1D51D, 0x1D51D }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D545, 0x1D545 }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D6A6, 0x1D6A7 }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, - { 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DFFF }, { 0x1E007, 0x1E007 }, - { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 }, { 0x1E025, 0x1E025 }, - { 0x1E02B, 0x1E0FF }, { 0x1E12D, 0x1E12F }, { 0x1E13E, 0x1E13F }, - { 0x1E14A, 0x1E14D }, { 0x1E150, 0x1E2BF }, { 0x1E2FA, 0x1E2FE }, - { 0x1E300, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, + { 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DEFF }, { 0x1DF1F, 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 }, + { 0x1E7E7, 0x1E7E7 }, { 0x1E7EC, 0x1E7EC }, { 0x1E7EF, 0x1E7EF }, + { 0x1E7FF, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, { 0x1E94C, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EC70 }, { 0x1ECB5, 0x1ED00 }, { 0x1ED3E, 0x1EDFF }, { 0x1EE04, 0x1EE04 }, { 0x1EE20, 0x1EE20 }, { 0x1EE23, 0x1EE23 }, { 0x1EE25, 0x1EE26 }, @@ -552,17 +563,17 @@ 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, 0x1F6DF }, { 0x1F6ED, 0x1F6EF }, { 0x1F6FD, 0x1F6FF }, - { 0x1F774, 0x1F77F }, { 0x1F7D9, 0x1F7DF }, { 0x1F7EC, 0x1F7FF }, - { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F }, { 0x1F85A, 0x1F85F }, - { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F8AF }, { 0x1F8B2, 0x1F8FF }, - { 0x1F979, 0x1F979 }, { 0x1F9CC, 0x1F9CC }, { 0x1FA54, 0x1FA5F }, - { 0x1FA6E, 0x1FA6F }, { 0x1FA75, 0x1FA77 }, { 0x1FA7B, 0x1FA7F }, - { 0x1FA87, 0x1FA8F }, { 0x1FAA9, 0x1FAAF }, { 0x1FAB7, 0x1FABF }, - { 0x1FAC3, 0x1FACF }, { 0x1FAD7, 0x1FAFF }, { 0x1FB93, 0x1FB93 }, - { 0x1FBCB, 0x1FBEF }, { 0x1FBFA, 0x1FFFF }, { 0x2A6D7, 0x2F7FF }, - { 0x2FA1E, 0xE0000 }, { 0xE0002, 0xE001F }, { 0xE0080, 0xE00FF }, - { 0xE01F0, 0x10FFFD } + { 0x1F6D8, 0x1F6DC }, { 0x1F6ED, 0x1F6EF }, { 0x1F6FD, 0x1F6FF }, + { 0x1F774, 0x1F77F }, { 0x1F7D9, 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 } }; /* *INDENT-ON* */ @@ -594,7 +605,8 @@ int mk_wcwidth(wchar_t ucs) { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFF01, 0xFF60 }, { 0xFFE0, 0xFFE6 }, { 0x16FE0, 0x16FE3 }, { 0x16FF0, 0x16FF1 }, { 0x17000, 0x187F7 }, - { 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1B000, 0x1B11E }, + { 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 }, @@ -606,12 +618,13 @@ int mk_wcwidth(wchar_t ucs) { 0x1F54B, 0x1F54E }, { 0x1F550, 0x1F567 }, { 0x1F57A, 0x1F57A }, { 0x1F595, 0x1F596 }, { 0x1F5A4, 0x1F5A4 }, { 0x1F5FB, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F6CC, 0x1F6CC }, { 0x1F6D0, 0x1F6D2 }, - { 0x1F6D5, 0x1F6D7 }, { 0x1F6EB, 0x1F6EC }, { 0x1F6F4, 0x1F6FC }, - { 0x1F7E0, 0x1F7EB }, { 0x1F90C, 0x1F93A }, { 0x1F93C, 0x1F945 }, - { 0x1F947, 0x1F978 }, { 0x1F97A, 0x1F9CB }, { 0x1F9CD, 0x1F9FF }, - { 0x1FA70, 0x1FA74 }, { 0x1FA78, 0x1FA7A }, { 0x1FA80, 0x1FA86 }, - { 0x1FA90, 0x1FAA8 }, { 0x1FAB0, 0x1FAB6 }, { 0x1FAC0, 0x1FAC2 }, - { 0x1FAD0, 0x1FAD6 }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD } + { 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 } }; /* *INDENT-ON* */ diff --git a/app/xterm/xterm.appdata.xml b/app/xterm/xterm.appdata.xml index 660951cd4..460df3422 100644 --- a/app/xterm/xterm.appdata.xml +++ b/app/xterm/xterm.appdata.xml @@ -35,7 +35,7 @@ <keyword>terminal</keyword> </keywords> <releases> - <release version="367" date="2021-03-26"/> + <release version="369" date="2021-09-21"/> </releases> <url type="homepage">https://invisible-island.net/xterm/</url> <update_contact>dickey@invisible-island.net</update_contact> diff --git a/app/xterm/xterm.h b/app/xterm/xterm.h index ff884b646..80a1b2ac4 100644 --- a/app/xterm/xterm.h +++ b/app/xterm/xterm.h @@ -1,4 +1,4 @@ -/* $XTermId: xterm.h,v 1.890 2021/03/21 22:44:36 tom Exp $ */ +/* $XTermId: xterm.h,v 1.902 2021/09/19 18:27:35 tom Exp $ */ /* * Copyright 1999-2020,2021 by Thomas E. Dickey @@ -456,6 +456,7 @@ extern char **environ; #define XtNappkeypadDefault "appkeypadDefault" #define XtNassumeAllChars "assumeAllChars" #define XtNautoWrap "autoWrap" +#define XtNautoScrollLock "autoScrollLock" #define XtNawaitInput "awaitInput" #define XtNbackarrowKey "backarrowKey" #define XtNbellIsUrgent "bellIsUrgent" @@ -670,6 +671,7 @@ extern char **environ; #define XtCAppkeypadDefault "AppkeypadDefault" #define XtCAssumeAllChars "AssumeAllChars" #define XtCAutoWrap "AutoWrap" +#define XtCAutoScrollLock "AutoScrollLock" #define XtCAwaitInput "AwaitInput" #define XtCBackarrowKey "BackarrowKey" #define XtCBellIsUrgent "BellIsUrgent" @@ -963,7 +965,9 @@ extern void report_char_class(XtermWidget); #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(n) (my_wcwidth((wchar_t) (n))) +#define CharWidth(screen, n) ((!((screen)->utf8_mode) && ((n) < 256)) \ + ? (IsLatin1(n) ? 1 : 0) \ + : my_wcwidth((wchar_t) (n))) #else #define WideCells(n) 1 #define CharWidth(n) (IsLatin1(n) ? 1 : 0) @@ -1165,6 +1169,7 @@ extern Window WMFrameWindow (XtermWidget /* xw */); extern XtInputMask xtermAppPending (void); extern XrmOptionDescRec * sortedOptDescs (XrmOptionDescRec *, Cardinal); extern XtermWidget getXtermWidget (Widget /* w */); +extern XVisualInfo *getVisualInfo (XtermWidget /* xw */); extern char *udk_lookup (XtermWidget /* xw */, int /* keycode */, int * /* len */); extern char *xtermEnvEncoding (void); extern char *xtermFindShell (char * /* leaf */, Bool /* warning */); @@ -1175,7 +1180,6 @@ extern int ResetAnsiColorRequest (XtermWidget, char *, int); extern int XStrCmp (char * /* s1 */, char * /* s2 */); extern int creat_as (uid_t /* uid */, gid_t /* gid */, Bool /* append */, char * /* pathname */, unsigned /* mode */); extern int getVisualDepth (XtermWidget /* xw */); -extern int getVisualInfo (XtermWidget /* xw */); extern int ignore_x11_error(Display * /* dpy */, XErrorEvent * /* event */); extern int open_userfile (uid_t /* uid */, gid_t /* gid */, char * /* path */, Bool /* append */); extern int update_winsize(int /* fd */, int /* rows */, int /* cols */, int /* height */, int /* width */); @@ -1263,6 +1267,14 @@ extern char *ProcGetCWD(pid_t /* pid */); #define ProcGetCWD(pid) NULL #endif +#if OPT_ISO_COLORS +extern Boolean AllocOneColor(XtermWidget /* xw */, XColor * /* def */); +extern Boolean QueryOneColor(XtermWidget /* xw */, XColor * /* def */); +#else +#define AllocOneColor(xw, def) ((def)->pixel = 0) +#define QueryOneColor(xw, def) ((def)->red = (def)->green = (def)->blue = 0) +#endif + #if OPT_MAXIMIZE extern int QueryMaximize (XtermWidget /* xw */, unsigned * /* width */, unsigned * /* height */); extern void HandleDeIconify PROTO_XT_ACTIONS_ARGS; @@ -1302,9 +1314,11 @@ extern void HandleInsertSelectable PROTO_XT_ACTIONS_ARGS; #if OPT_SESSION_MGT extern void xtermCloseSession (void); extern void xtermOpenSession (void); +extern void xtermUpdateRestartCommand(XtermWidget /* xw */); #else #define xtermCloseSession() /* nothing */ #define xtermOpenSession() /* nothing */ +#define xtermUpdateRestartCommand(xw) /* nothing */ #endif #if OPT_WIDE_CHARS @@ -1560,7 +1574,7 @@ extern void ChangeColors (XtermWidget /* xw */, ScrnColors * /* pNew */); 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 */); +extern void DeleteLine (XtermWidget /* xw */, int /* n */, Bool /* canSave */); extern void FlushScroll (XtermWidget /* xw */); extern void GetColors (XtermWidget /* xw */, ScrnColors * /* pColors */); extern void InsertChar (XtermWidget /* xw */, unsigned /* n */); @@ -1570,7 +1584,7 @@ extern void ReverseVideo (XtermWidget /* xw */); extern void WriteText (XtermWidget /* xw */, IChar * /* str */, Cardinal /* len */); extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */); extern void decode_wcwidth (XtermWidget /* xw */); -extern void do_cd_xtra_scroll (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 */); @@ -1613,18 +1627,11 @@ extern void ClearCurBackground (XtermWidget /* xw */, int /* top */, int /* le #define xtermColorPair(xw) makeColorPair(xw) -#if OPT_COLOR_RES #define GET_COLOR_RES(xw, res) xtermGetColorRes(xw, &(res)) #define SET_COLOR_RES(res,color) (res)->value = color #define EQL_COLOR_RES(res,color) (res)->value == color #define T_COLOR(v,n) (v)->Tcolors[n].value extern Pixel xtermGetColorRes(XtermWidget /* xw */, ColorRes * /* res */); -#else -#define GET_COLOR_RES(xw, res) res -#define SET_COLOR_RES(res,color) *res = color -#define EQL_COLOR_RES(res,color) *res == color -#define T_COLOR(v,n) (v)->Tcolors[n] -#endif #define ExtractForeground(color) (unsigned) GetCellColorFG(color) #define ExtractBackground(color) (unsigned) GetCellColorBG(color) @@ -1691,7 +1698,7 @@ extern void discardRenderDraw(TScreen * /* screen */); #define extract_bg(xw, color, flags) (unsigned) (xw)->cur_background /* FIXME: Reverse-Video? */ -#define T_COLOR(v,n) (v)->Tcolors[n] +#define T_COLOR(v,n) (v)->Tcolors[n].value #define xtermColorPair(xw) 0 #define checkVeryBoldColors(flags, fg) /* nothing */ diff --git a/app/xterm/xterm.log.html b/app/xterm/xterm.log.html index a70f7ca53..a87f84f83 100644 --- a/app/xterm/xterm.log.html +++ b/app/xterm/xterm.log.html @@ -30,7 +30,7 @@ * sale, use or other dealings in this Software without prior written * * authorization. * ***************************************************************************** - $XTermId: xterm.log.html,v 1.2326 2021/03/26 23:02:54 tom Exp $ + $XTermId: xterm.log.html,v 1.2358 2021/09/21 23:48:07 tom Exp $ --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> @@ -70,6 +70,10 @@ CHANGELOG</a>).</p> <ul> + <li><a href="#xterm_369">Patch #369 - 2021/09/21</a></li> + + <li><a href="#xterm_368">Patch #368 - 2021/06/07</a></li> + <li><a href="#xterm_367">Patch #367 - 2021/03/26</a></li> <li><a href="#xterm_366">Patch #366 - 2021/02/10</a></li> @@ -1012,6 +1016,103 @@ <li><a href="#xterm_01">Patch #1 - 1996/1/6</a></li> </ul> + <h1><a name="xterm_369" id="xterm_369">Patch #369 - + 2021/09/21</a></h1> + + <ul> + <li>modify <code>run-tic.sh</code> to work around bug in + development version of ncurses which was packaged in FreeBSD + ports.</li> + + <li>remove ifdef's for <code>OPT_COLOR_RES</code> and + <code>OPT_COLOR_RES2</code>.</li> + + <li>improve performance over slow connections (report by Harald + Dunkel).</li> + + <li>update cursor if restoring mode for DECTCEM.</li> + + <li>modify <code>CharWidth</code> macro to ensure that the + shortcut for Latin-1 is only applied when UTF-8 is not enabled, + to fix a bug in handling soft-hyphen from <a href= + "#xterm_334">patch #334</a> changes (patch by Martijn van + Duren).</li> + + <li>improve terminfo: + <ul> + <li>fill-in function-keys in terminfo which are not Sun/HP + keyboards using <code>xterm+nopcfkeys</code> + building-block.</li> + + <li>add kbeg to xterm+keypad to accommodate termcap + applications</li> + + <li>add smglp and smgrp to vt420+lrmm, to provide useful + data for the "tabs" <code><strong>+m</strong></code> + option</li> + </ul> + </li> + + <li>support shift-tab in Sun, HP and SCO keyboards.</li> + + <li>document some legacy features in <code>ctlseqs.ms</code> + (prompted by discussion with Jimmy Aguilar Mena "Ergus").</li> + + <li>add “trim” option to <code>cdXtraScroll</code> + and <code>tiXtraScroll</code>.</li> + + <li>remove support for non-fifo save-lines configuration.</li> + + <li>extend <code>cdXtraScroll</code> to check if the cursor is + at the upper-left of the scrolling region when the erasure is + for the remainder of the screen versus the whole screen + (prompted by discussion with Jörg Breitbart).</li> + + <li>add workaround for broken pcre2 package in Debian 10.</li> + + <li>change screen-refresh call used for <code>DECCARA</code> + and <code>DECRARA</code> to ensure that trailing blanks which + are part of the rectangle are repainted (report/analysis by + Dennis Filder).</li> + + <li>when resetting the terminal, ensure that the cursor shape + also is reset, e.g., if <code>DECSCUSR</code> has been used to + modify the cursor shape for an xterm which was started with the + underlined cursor option (report/analysis by Luis Javier + Merino).</li> + + <li>prevent <code>DECSCUSR</code> from blinking the cursor if + the <code>cursorBlink</code> resource is “never” + (report by Vladimir D Seleznev).</li> + + <li>invert the sense of <code>DECSDM</code>, to correspond with + VT382 manuals (lsix #41).</li> + + <li>update tables in <code>wcwidth.c</code> based on Unicode + 14.0.0</li> + </ul> + + <h1><a name="xterm_368" id="xterm_368">Patch #368 - + 2021/06/07</a></h1> + + <ul> + <li>add <code>DefaultOff</code> option to + <code>RenderFont</code> resource, as part of the + session-management feature.</li> + + <li>add auto-scroll-lock feature (patch by Stelios + Bounanos).</li> + + <li>update the window-size information returned via + <code>TIOCGWINSZ</code> when rows/columns are unchanged but the + font-size changes (report by Nick Black).</li> + + <li>improve session-management feature by saving/restoring the + font settings.</li> + + <li>update config.guess, config.sub</li> + </ul> + <h1><a name="xterm_367" id="xterm_367">Patch #367 - 2021/03/26</a></h1> @@ -11331,9 +11432,10 @@ Klanderman). rather than individually ascent and descent, and allows the bold font to be one pixel smaller than the normal font (addresses a report by Alan Citterman <alan@mticket.com>, - who says that something in patches #146 to #148 made xterm more - likely to overstrike bold fonts, and indirectly Debian bug - report #76404, which reports the opposite).</li> + who says that something in patches <a href= + "#xterm_146">#146</a> to <a href="#xterm_148">#148</a> made + xterm more likely to overstrike bold fonts, and indirectly + Debian bug report #76404, which reports the opposite).</li> <li>make configure script use $CFLAGS and $CPPFLAGS consistently, including removing a chunk from configure.in @@ -11962,9 +12064,9 @@ Klanderman). <li>modified <code>creat_as()</code> a little more, retaining the ability to append to a logfile If the user specifies the - name. Also, check if the opened file (which patch #130 ensures - is owned by the effective user) is not writable by other - users.</li> + name. Also, check if the opened file (which <a href= + "#xterm_130">patch #130</a> ensures is owned by the effective + user) is not writable by other users.</li> <li>use <code>creat_as()</code> logic to make tek4014 screen-copy more secure (noted by Branden Robinson).</li> @@ -12934,9 +13036,10 @@ Klanderman). <ul> <li>correct selection logic: I omitted an offset that accounts for the distance into the scrollback buffer when rewriting this - for patch #101. Also fixed a similar problem for selecting - double size characters from the scrollback buffer (first was - reported by D Roland Walker <walker@pobox.com>).</li> + for <a href="#xterm_101">patch #101</a>. Also fixed a similar + problem for selecting double size characters from the + scrollback buffer (first was reported by D Roland Walker + <walker@pobox.com>).</li> <li>improved support for Unix98 PTY's, using patch in Debian bug report #35650, by J.H.M. Dassen @@ -12970,9 +13073,9 @@ Klanderman). XFree86 3.9Pm</a></h1> <ul> - <li>revert change to openpty call in patch #101; this causes - xterm to fail on DEC-Alpha OSF/1 4.0B (reported by H Merijn - Brand).</li> + <li>revert change to openpty call in <a href="#xterm_101">patch + #101</a>; this causes xterm to fail on DEC-Alpha OSF/1 4.0B + (reported by H Merijn Brand).</li> <li>modify print.c to move include of stdio.h after the autoconf'd xtermcfg.h since HP's ANSI C compiler otherwise sees @@ -13591,13 +13694,14 @@ Klanderman). <h1><a name="xterm_88" id="xterm_88">Patch #88 - 1998/10/31 - XFree86 3.9Nk and 3.3.2h</a></h1> - <p>This refines my #85 patch by checking for a case where the - font server returns a bold font that does not quite correspond to - the normal font. When I asked for a bold version of the 6x12 - font, the font server returned a near equivalent where the ascent - and descent values did not match, causing xterm to leave lines - across the display. This patch makes xterm reject that type of - mismatch, falling back to the old font behavior.</p> + <p>This refines my <a href="#xterm_85">patch #85</a> by checking + for a case where the font server returns a bold font that does + not quite correspond to the normal font. When I asked for a bold + version of the 6x12 font, the font server returned a near + equivalent where the ascent and descent values did not match, + causing xterm to leave lines across the display. This patch makes + xterm reject that type of mismatch, falling back to the old font + behavior.</p> <h1><a name="xterm_87" id="xterm_87">Patch #87 - 1998/10/21 - XFree86 3.9Nj and 3.3.2f</a></h1> @@ -13700,7 +13804,8 @@ Klanderman). <h1><a name="sync_83" id="sync_83">Resync #83 - 1998/10/7 - XFree86 3.3.2e</a></h1> - <p>Merge changes through patch #83 with the 3.3.2e version.</p> + <p>Merge changes through <a href="#xterm_83">patch #83</a> with + the 3.3.2e version.</p> <p>This follows a change from XFree86 CVS which adds checks for non-null return from malloc (patch by Matthieu Herrb).</p> @@ -13740,7 +13845,7 @@ Klanderman). <h1><a name="xterm_82" id="xterm_82">Patch #82 - 1998/7/15 - XFree86 3.9Aj</a></h1> - <p>Bug fix for patch #81:</p> + <p>Bug fix for <a href="#xterm_81">patch #81</a>:</p> <ul> <li>remove an #undef for NBBY, which caused compile problem on @@ -14180,8 +14285,8 @@ Klanderman). Olivier Calle <olivier@tc.fluke.com> as well as some other people after the XFree86 3.3.2 release.</p> - <p>The error was introduced by my patch #53 in XFree86 3.9r - (October 1997).</p> + <p>The error was introduced by my <a href="#xterm_53">patch + #53</a> in XFree86 3.9r (October 1997).</p> <p>The correction removes the reset of setuid/setgid before the main event loop, and solves the problem which I had worked around @@ -14646,7 +14751,8 @@ Klanderman). ANSI colors, where exposure events would occasionally pick up the former (e.g., colorBD) rather than ANSI colors. Testing the colorAttrMode made this apparent, though it has been in the - code since 3.2A (patch #35 in Jan 1997).</li> + code since 3.2A (<a href="#xterm_35">patch #35</a> in Jan + 1997).</li> <li>correct two problems with the optional logging support. On Linux at least, the waitpid call in creat_as hangs when the @@ -15011,8 +15117,8 @@ Klanderman). entries).</li> <li>some minor tidying up (e.g., signed/unsigned use bitcpy, - MODE_DECCKM, resetColor, resetCharsets). More is done in patch - #35.</li> + MODE_DECCKM, resetColor, resetCharsets). More is done in + <a href="#xterm_35">patch #35</a>.</li> </ul> <p>I got the description of DECSTR from a vt420 user's manual. diff --git a/app/xterm/xterm.man b/app/xterm/xterm.man index 81981c8b1..c9fb02495 100644 --- a/app/xterm/xterm.man +++ b/app/xterm/xterm.man @@ -1,5 +1,5 @@ '\" t -.\" $XTermId: xterm.man,v 1.844 2021/03/26 23:11:13 tom Exp $ +.\" $XTermId: xterm.man,v 1.851 2021/09/07 00:02:12 tom Exp $ .\" .\" Copyright 1996-2020,2021 by Thomas E. Dickey .\" @@ -1628,7 +1628,8 @@ The default is and is limited to the range 1 through 100. .TP 8 .B "cursorTheme\fP (class\fB CursorTheme\fP)" -The Xcursor(__miscmansuffix__) library provides a way to +The Xcursor(__miscmansuffix__) library +provides a way to change the pointer shape and size. The X11 library uses this library to extend the font- and glyph-cursor calls used by applications such as \fI\*n\fP to substitute external files for the built-in \*(``core\*('' cursors provided by X. @@ -2286,6 +2287,8 @@ user surprise. This key is generally unused in keyboard configurations, and has not acquired a standard meaning even when it is used in that manner. Consequently, users have assigned it for ad hoc purposes. +.IP +See also the \fBautoScrollLock\fP resource. .TP 8 .B "allowSendEvents\fP (class\fB AllowSendEvents\fP)" Specifies whether or not synthetic key and button events (generated using @@ -2455,6 +2458,14 @@ certain quasi-automatically generated fonts (such as the ISO-10646-1 encoding of Terminus) which have incorrect font-metrics. .TP 8 +.B "autoScrollLock\fP (class\fB AutoScrollLock\fP)" +If \*(``true\*('', \fI\*n\fR will maintain its viewport of displayed lines +whenever displaying scrollback, as if \fBallowScrollLock\fP were enabled +and the Scroll Lock key had been pressed. +The default is \*(``false\*(''. +This feature is only useful if the \fBscrollTtyOutput\fP resource is set to +\*(``false\*(''. +.TP 8 .B "autoWrap\fP (class\fB AutoWrap\fP)" Specifies whether or not auto-wraparound should be enabled. This is the same as the VT102 DECAWM. @@ -2650,6 +2661,22 @@ the whole screen. Like \fBtiXtraScroll\fP, the intent of this option is to provide a picture of the full-screen application's display on the scrollback before wiping out the text. +.IP +\fI\*N\fP accepts either a keyword (ignoring case) +or the number shown in parentheses: +.RS +.TP +false (0) +nothing is added to the scrollback. +.TP +true (1) +the current screen is added to the scrollback. +.TP +trim (2) +the current screen is added to the scrollback, +but repeated blank lines are trimmed (reduced to a single blank line). +.RE +.IP The default for this resource is \*(``false\*(''. .TP 8 .B "charClass\fP (class\fB CharClass\fP)" @@ -4811,6 +4838,12 @@ That is normally \*(``mono\*(''. If the \fBfaceName\fP resource is set, then start by using the TrueType font rather than the bitmap font. .RE +.TP 5 +defaultOff +.br +Enable the \*(``TrueType Fonts\*('' +menu entry to allow runtime switching to/from TrueType fonts, +but allow it to be initially unselected if no \fBfaceName\fP resource was given. .RE .TP 8 .B "resizeByPixel\fP (class\fB ResizeByPixel\fP)" @@ -5095,11 +5128,28 @@ The default is \*(``false\*(''. .TP 8 .B "tiXtraScroll\fP (class\fB TiXtraScroll\fP)" Specifies whether \fI\*n\fP should scroll to a new page when processing -the \fIti\fP termcap entry, i.e., the private modes 47, 1047 or 1049. +the \fIti\fP or \fIte\fP termcap strings, +i.e., the private modes 47, 1047 or 1049. This is only in effect if \fBtiteInhibit\fP is \*(``true\*('', because the intent of this option is to provide a picture of the full-screen application's display on the scrollback without wiping out the text that would be shown before the application was initialized. +.IP +\fI\*N\fP accepts either a keyword (ignoring case) +or the number shown in parentheses: +.RS +.TP +false (0) +nothing is added to the scrollback. +.TP +true (1) +the current screen is added to the scrollback. +.TP +trim (2) +the current screen is added to the scrollback, +but repeated blank lines are trimmed (reduced to a single blank line). +.RE +.IP The default for this resource is \*(``false\*(''. .TP 8 .B "titeInhibit\fP (class\fB TiteInhibit\fP)" @@ -8850,7 +8900,7 @@ Steve Pitschke (Stellar), Ron Newman (MIT-Athena), Jim Fulton (MIT X Consortium), Dave Serisky (HP), Jonathan Kamens (MIT-Athena). .PP Beginning with XFree86, there were far more identifiable contributors. -The \fITHANKS\fP file in \fI\*n\fP's source lists 228 in September 2020. +The \fITHANKS\fP file in \fI\*n\fP's source lists 234 in August 2021. Keep in mind these: Jason Bacon, Jens Schweikhardt, diff --git a/app/xterm/xtermcfg.h b/app/xterm/xtermcfg.h index e93db66d5..1a51c9170 100644 --- a/app/xterm/xtermcfg.h +++ b/app/xterm/xtermcfg.h @@ -1,4 +1,4 @@ -/* $XTermId: xtermcfg.hin,v 1.220 2020/10/05 22:42:06 tom Exp $ */ +/* $XTermId: xtermcfg.hin,v 1.223 2021/08/22 20:00:07 tom Exp $ */ /* * Copyright 1997-2019,2020 by Thomas E. Dickey @@ -88,6 +88,7 @@ /* #undef HAVE_NCURSES_TERM_H */ /* AC_CHECK_HEADERS(ncurses/term.h) */ #define HAVE_PATHS_H 1 /* CF_LASTLOG */ /* #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 */ @@ -156,7 +157,6 @@ #define OPT_DIRECT_COLOR 1 /* CF_ARG_ENABLE(direct-color) */ /* #undef OPT_DOUBLE_BUFFER */ /* CF_ARG_ENABLE(double-buffer) */ /* #undef OPT_EXEC_XTERM */ /* CF_ARG_ENABLE(exec-xterm) */ -/* #undef OPT_FIFO_LINES */ /* CF_ARG_ENABLE(fifo-lines) */ /* #undef OPT_GRAPHICS */ /* CF_ARG_ENABLE(graphics) */ /* #undef OPT_HIGHLIGHT_COLOR */ /* CF_ARG_DISABLE(highlighting) */ /* #undef OPT_HP_FUNC_KEYS */ /* CF_ARG_ENABLE(hp-fkeys) */ diff --git a/app/xterm/xtermcfg.hin b/app/xterm/xtermcfg.hin index 2e97d6011..9372f9a7a 100644 --- a/app/xterm/xtermcfg.hin +++ b/app/xterm/xtermcfg.hin @@ -1,4 +1,4 @@ -/* $XTermId: xtermcfg.hin,v 1.221 2021/03/21 19:51:33 tom Exp $ */ +/* $XTermId: xtermcfg.hin,v 1.223 2021/08/22 20:00:07 tom Exp $ */ /* * Copyright 1997-2020,2021 by Thomas E. Dickey @@ -88,6 +88,7 @@ #undef HAVE_NCURSES_TERM_H /* AC_CHECK_HEADERS(ncurses/term.h) */ #undef HAVE_PATHS_H /* CF_LASTLOG */ #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 */ #undef HAVE_POSIX_SAVED_IDS /* CF_POSIX_SAVED_IDS */ @@ -157,7 +158,6 @@ #undef OPT_DIRECT_COLOR /* CF_ARG_ENABLE(direct-color) */ #undef OPT_DOUBLE_BUFFER /* CF_ARG_ENABLE(double-buffer) */ #undef OPT_EXEC_XTERM /* CF_ARG_ENABLE(exec-xterm) */ -#undef OPT_FIFO_LINES /* CF_ARG_ENABLE(fifo-lines) */ #undef OPT_GRAPHICS /* CF_ARG_ENABLE(graphics) */ #undef OPT_HIGHLIGHT_COLOR /* CF_ARG_DISABLE(highlighting) */ #undef OPT_HP_FUNC_KEYS /* CF_ARG_ENABLE(hp-fkeys) */ |