From: Thomas E. Dickey Date: Sun, 5 Nov 2023 00:24:54 +0000 (+0000) Subject: ncurses 6.4 - patch 20231104 X-Git-Tag: v6.5~26 X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff_plain;h=135d37072755704b8d018e5de74e62ff3f28c930 ncurses 6.4 - patch 20231104 + modify reset command to avoid altering clocal if the terminal uses a modem (prompted by discussion with Werner Fink, Michal Suchanek, OpenSUSE #1201384, Debian #60377). + build-fixes for --with-caps variations. + correct a couple of section-references in INSTALL. --- diff --git a/INSTALL b/INSTALL index 9dabaa89..28110782 100644 --- a/INSTALL +++ b/INSTALL @@ -26,7 +26,7 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- --- $Id: INSTALL,v 1.251 2023/10/28 16:54:24 tom Exp $ +-- $Id: INSTALL,v 1.253 2023/11/03 20:55:47 tom Exp $ --------------------------------------------------------------------- How to install Ncurses/Terminfo on your system --------------------------------------------------------------------- @@ -47,7 +47,7 @@ If you are converting from BSD curses and do not have root access, be sure to read the BSD CONVERSION NOTES section below. If you are trying to build applications using gpm with ncurses, -read the USING NCURSES WITH GPM section below. +read the USING GPM section below. If you are cross-compiling, see the note below on BUILDING WITH A CROSS-COMPILER. @@ -80,7 +80,7 @@ INSTALLATION PROCEDURE: The --prefix option to configure changes the root directory for installing ncurses. The default is normally in subdirectories of /usr/local, except for systems where ncurses is normally installed as a system library (see - "IF YOU ARE A SYSTEM INTEGRATOR"). Use --prefix=/usr to replace your + "FOR SYSTEM INTEGRATORS"). Use --prefix=/usr to replace your default curses distribution. The package gets installed beneath the --prefix directory as follows: @@ -177,7 +177,7 @@ INSTALLATION PROCEDURE: You can make curses and terminfo fall back to an existing file of termcap definitions by configuring with --enable-termcap. If you do this, the library will search /etc/termcap before the terminfo database, and will - also interpret the contents of the TERM environment variable. See the + also interpret the contents of the $TERM environment variable. See the section BSD CONVERSION NOTES below. 3. Type 'make'. Ignore any warnings; no error messages should be produced. @@ -1275,7 +1275,7 @@ CONFIGURE OPTIONS: Specify a search-list of terminfo directories which will be compiled into the ncurses library (default: DATADIR/terminfo) - This is a colon-separated list, like the TERMINFO_DIRS environment + This is a colon-separated list, like the $TERMINFO_DIRS environment variable. --with-termlib[=XXX] diff --git a/NEWS b/NEWS index 4c04caf1..f953ea86 100644 --- a/NEWS +++ b/NEWS @@ -26,7 +26,7 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- --- $Id: NEWS,v 1.4022 2023/10/28 18:20:39 tom Exp $ +-- $Id: NEWS,v 1.4025 2023/11/04 21:45:02 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that ncurses has gone through since Zeyd started @@ -46,6 +46,13 @@ See the AUTHORS file for the corresponding full names. Changes through 1.9.9e did not credit all contributions; it is not possible to add this information. +20231104 + + modify reset command to avoid altering clocal if the terminal uses a + modem (prompted by discussion with Werner Fink, Michal Suchanek, + OpenSUSE #1201384, Debian #60377). + + build-fixes for --with-caps variations. + + correct a couple of section-references in INSTALL. + 20231028 + move xterm focus mode 1004 from xterm+sm+1006 into xterm+focus as fe/fd capabilities, like vim (vim-pr #13440). diff --git a/VERSION b/VERSION index c2f4c9b4..786852ea 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5:0:10 6.4 20231028 +5:0:10 6.4 20231104 diff --git a/dist.mk b/dist.mk index b80fe3c1..5a7c559c 100644 --- a/dist.mk +++ b/dist.mk @@ -26,7 +26,7 @@ # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# $Id: dist.mk,v 1.1574 2023/10/28 09:18:03 tom Exp $ +# $Id: dist.mk,v 1.1575 2023/11/04 10:01:01 tom Exp $ # Makefile for creating ncurses distributions. # # This only needs to be used directly as a makefile by developers, but @@ -38,7 +38,7 @@ SHELL = /bin/sh # These define the major/minor/patch versions of ncurses. NCURSES_MAJOR = 6 NCURSES_MINOR = 4 -NCURSES_PATCH = 20231028 +NCURSES_PATCH = 20231104 # We don't append the patch to the version, since this only applies to releases VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR) diff --git a/include/curses.events b/include/curses.events index 25a2583f..468bde18 100644 --- a/include/curses.events +++ b/include/curses.events @@ -50,6 +50,6 @@ typedef struct extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */ extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */ -#define KEY_EVENT 0633 /* We were interrupted by an event */ +#define KEY_EVENT 0634 /* We were interrupted by an event */ #endif /* NCURSES_WGETCH_EVENTS */ diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index 71db2a8d..f2d2bb36 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -49,7 +49,7 @@ #include #endif -MODULE_ID("$Id: lib_setup.c,v 1.229 2023/10/16 23:05:28 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.230 2023/11/04 21:02:27 tom Exp $") /**************************************************************************** * @@ -293,7 +293,7 @@ _nc_default_screensize(TERMINAL *termp, int *linep, int *colp) } } -#ifdef USE_CHECK_SIZE +#if defined(USE_CHECK_SIZE) && defined(user6) && defined(user7) static const char * skip_csi(const char *value) { @@ -408,7 +408,7 @@ _nc_check_screensize(TERMINAL *termp, int *linep, int *colp) _nc_default_screensize(termp, linep, colp); } #else /* !USE_CHECK_SIZE */ -#define _nc_check_screensize(termp, linep, colp) /* nothing */ +#define _nc_check_screensize(termp, linep, colp) /* nothing */ #endif #endif /* !(defined(USE_TERM_DRIVER) || defined(EXP_WIN32_DRIVER)) */ diff --git a/ncurses/tinfo/lib_tparm.c b/ncurses/tinfo/lib_tparm.c index 1353eb3f..5666b27b 100644 --- a/ncurses/tinfo/lib_tparm.c +++ b/ncurses/tinfo/lib_tparm.c @@ -53,7 +53,7 @@ #include #include -MODULE_ID("$Id: lib_tparm.c,v 1.152 2023/09/16 16:30:27 tom Exp $") +MODULE_ID("$Id: lib_tparm.c,v 1.153 2023/11/04 19:28:41 tom Exp $") /* * char * @@ -1120,8 +1120,10 @@ check_string_caps(TPARM_DATA *data, const char *string) want_type = 2; /* function key #1, transmit string #2 */ else if (CHECK_CAP(plab_norm)) want_type = 2; /* label #1, show string #2 */ +#ifdef pkey_plab else if (CHECK_CAP(pkey_plab)) want_type = 6; /* function key #1, type string #2, show string #3 */ +#endif #if NCURSES_XNAMES else { char *check; diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog index 150f79c0..104374a5 100644 --- a/package/debian-mingw/changelog +++ b/package/debian-mingw/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.4+20231028) unstable; urgency=low +ncurses6 (6.4+20231104) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Oct 2023 05:18:03 -0400 + -- Thomas E. Dickey Mon, 30 Oct 2023 19:59:49 -0400 ncurses6 (5.9+20131005) unstable; urgency=low diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog index 150f79c0..104374a5 100644 --- a/package/debian-mingw64/changelog +++ b/package/debian-mingw64/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.4+20231028) unstable; urgency=low +ncurses6 (6.4+20231104) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Oct 2023 05:18:03 -0400 + -- Thomas E. Dickey Mon, 30 Oct 2023 19:59:49 -0400 ncurses6 (5.9+20131005) unstable; urgency=low diff --git a/package/debian/changelog b/package/debian/changelog index 574d7da9..be5d0827 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.4+20231028) unstable; urgency=low +ncurses6 (6.4+20231104) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Oct 2023 05:18:03 -0400 + -- Thomas E. Dickey Mon, 30 Oct 2023 19:59:49 -0400 ncurses6 (5.9+20120608) unstable; urgency=low diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi index e775dd84..623826e8 100644 --- a/package/mingw-ncurses.nsi +++ b/package/mingw-ncurses.nsi @@ -1,4 +1,4 @@ -; $Id: mingw-ncurses.nsi,v 1.614 2023/10/28 09:18:03 tom Exp $ +; $Id: mingw-ncurses.nsi,v 1.615 2023/11/03 07:58:06 tom Exp $ ; TODO add examples ; TODO bump ABI to 6 @@ -10,7 +10,7 @@ !define VERSION_MAJOR "6" !define VERSION_MINOR "4" !define VERSION_YYYY "2023" -!define VERSION_MMDD "1028" +!define VERSION_MMDD "1104" !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD} !define MY_ABI "5" diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec index 7ca63175..f546b373 100644 --- a/package/mingw-ncurses.spec +++ b/package/mingw-ncurses.spec @@ -3,7 +3,7 @@ Summary: shared libraries for terminal handling Name: mingw32-ncurses6 Version: 6.4 -Release: 20231028 +Release: 20231104 License: X11 Group: Development/Libraries URL: https://invisible-island.net/ncurses/ diff --git a/package/ncurses.spec b/package/ncurses.spec index 03709863..bf126765 100644 --- a/package/ncurses.spec +++ b/package/ncurses.spec @@ -1,7 +1,7 @@ Summary: shared libraries for terminal handling Name: ncurses6 Version: 6.4 -Release: 20231028 +Release: 20231104 License: X11 Group: Development/Libraries URL: https://invisible-island.net/ncurses/ diff --git a/package/ncursest.spec b/package/ncursest.spec index c97e5bb3..0a3db841 100644 --- a/package/ncursest.spec +++ b/package/ncursest.spec @@ -1,7 +1,7 @@ Summary: Curses library with POSIX thread support. Name: ncursest6 Version: 6.4 -Release: 20231028 +Release: 20231104 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/progs/reset_cmd.c b/progs/reset_cmd.c index 50bfd2cd..d706c457 100644 --- a/progs/reset_cmd.c +++ b/progs/reset_cmd.c @@ -53,7 +53,7 @@ #include #endif -MODULE_ID("$Id: reset_cmd.c,v 1.29 2023/01/07 21:50:34 tom Exp $") +MODULE_ID("$Id: reset_cmd.c,v 1.35 2023/11/05 00:02:37 tom Exp $") /* * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, @@ -75,6 +75,9 @@ MODULE_ID("$Id: reset_cmd.c,v 1.29 2023/01/07 21:50:34 tom Exp $") # endif #endif +#define set_flags(target, mask) target |= mask +#define clear_flags(target, mask) target &= ~((unsigned)(mask)) + static FILE *my_file; static bool use_reset = FALSE; /* invoked as reset */ @@ -188,6 +191,79 @@ out_char(int c) #define reset_char(item, value) \ tty_settings->c_cc[item] = CHK(tty_settings->c_cc[item], value) +/* + * Simplify ifdefs + */ +#ifndef BSDLY +#define BSDLY 0 +#endif +#ifndef CRDLY +#define CRDLY 0 +#endif +#ifndef ECHOCTL +#define ECHOCTL 0 +#endif +#ifndef ECHOKE +#define ECHOKE 0 +#endif +#ifndef ECHOPRT +#define ECHOPRT 0 +#endif +#ifndef FFDLY +#define FFDLY 0 +#endif +#ifndef IMAXBEL +#define IMAXBEL 0 +#endif +#ifndef IUCLC +#define IUCLC 0 +#endif +#ifndef IXANY +#define IXANY 0 +#endif +#ifndef NLDLY +#define NLDLY 0 +#endif +#ifndef OCRNL +#define OCRNL 0 +#endif +#ifndef OFDEL +#define OFDEL 0 +#endif +#ifndef OFILL +#define OFILL 0 +#endif +#ifndef OLCUC +#define OLCUC 0 +#endif +#ifndef ONLCR +#define ONLCR 0 +#endif +#ifndef ONLRET +#define ONLRET 0 +#endif +#ifndef ONOCR +#define ONOCR 0 +#endif +#ifndef OXTABS +#define OXTABS 0 +#endif +#ifndef TAB3 +#define TAB3 0 +#endif +#ifndef TABDLY +#define TABDLY 0 +#endif +#ifndef TOSTOP +#define TOSTOP 0 +#endif +#ifndef VTDLY +#define VTDLY 0 +#endif +#ifndef XCASE +#define XCASE 0 +#endif + /* * Reset the terminal mode bits to a sensible state. Very useful after * a child program dies in raw mode. @@ -195,6 +271,11 @@ out_char(int c) void reset_tty_settings(int fd, TTY * tty_settings, int noset) { + unsigned mask; +#ifdef TIOCMGET + int modem_bits; +#endif + GET_TTY(fd, tty_settings); #ifdef TERMIOS @@ -231,106 +312,65 @@ reset_tty_settings(int fd, TTY * tty_settings, int noset) reset_char(VWERASE, CWERASE); #endif - tty_settings->c_iflag &= ~((unsigned) (IGNBRK - | PARMRK - | INPCK - | ISTRIP - | INLCR - | IGNCR -#ifdef IUCLC - | IUCLC -#endif -#ifdef IXANY - | IXANY -#endif - | IXOFF)); - - tty_settings->c_iflag |= (BRKINT - | IGNPAR - | ICRNL - | IXON -#ifdef IMAXBEL - | IMAXBEL -#endif - ); - - tty_settings->c_oflag &= ~((unsigned) (0 -#ifdef OLCUC - | OLCUC -#endif -#ifdef OCRNL - | OCRNL -#endif -#ifdef ONOCR - | ONOCR -#endif -#ifdef ONLRET - | ONLRET -#endif -#ifdef OFILL - | OFILL -#endif -#ifdef OFDEL - | OFDEL -#endif -#ifdef NLDLY - | NLDLY -#endif -#ifdef CRDLY - | CRDLY -#endif -#ifdef TABDLY - | TABDLY -#endif -#ifdef BSDLY - | BSDLY -#endif -#ifdef VTDLY - | VTDLY -#endif -#ifdef FFDLY - | FFDLY -#endif - )); - - tty_settings->c_oflag |= (OPOST -#ifdef ONLCR - | ONLCR -#endif - ); - - tty_settings->c_cflag &= ~((unsigned) (CSIZE - | CSTOPB - | PARENB - | PARODD - | CLOCAL)); - tty_settings->c_cflag |= (CS8 | CREAD); - tty_settings->c_lflag &= ~((unsigned) (ECHONL - | NOFLSH -#ifdef TOSTOP - | TOSTOP -#endif -#ifdef ECHOPTR - | ECHOPRT -#endif -#ifdef XCASE - | XCASE -#endif - )); - - tty_settings->c_lflag |= (ISIG - | ICANON - | ECHO - | ECHOE - | ECHOK -#ifdef ECHOCTL - | ECHOCTL -#endif -#ifdef ECHOKE - | ECHOKE -#endif - ); -#endif + clear_flags(tty_settings->c_iflag, (IGNBRK + | PARMRK + | INPCK + | ISTRIP + | INLCR + | IGNCR + | IUCLC + | IXANY + | IXOFF)); + + set_flags(tty_settings->c_iflag, (BRKINT + | IGNPAR + | ICRNL + | IXON + | IMAXBEL)); + + clear_flags(tty_settings->c_oflag, (0 + | OLCUC + | OCRNL + | ONOCR + | ONLRET + | OFILL + | OFDEL + | NLDLY + | CRDLY + | TABDLY + | BSDLY + | VTDLY + | FFDLY)); + + set_flags(tty_settings->c_oflag, (OPOST + | ONLCR)); + + mask = (CSIZE | CSTOPB | PARENB | PARODD); +#ifdef TIOCMGET + /* leave clocal alone if this appears to use a modem */ + if (ioctl(fd, TIOCMGET, &modem_bits) == -1) + mask |= CLOCAL; +#else + /* cannot check - use the behavior from tset */ + mask |= CLOCAL; +#endif + clear_flags(tty_settings->c_cflag, mask); + + set_flags(tty_settings->c_cflag, (CS8 | CREAD)); + clear_flags(tty_settings->c_lflag, (ECHONL + | NOFLSH + | TOSTOP + | ECHOPRT + | XCASE)); + + set_flags(tty_settings->c_lflag, (ISIG + | ICANON + | ECHO + | ECHOE + | ECHOK + | ECHOCTL + | ECHOKE)); +#endif /* TERMIOS */ if (!noset) { SET_TTY(fd, tty_settings); @@ -405,29 +445,23 @@ set_conversions(TTY * tty_settings) #if defined(EXP_WIN32_DRIVER) /* FIXME */ #else -#ifdef ONLCR - tty_settings->c_oflag |= ONLCR; -#endif - tty_settings->c_iflag |= ICRNL; - tty_settings->c_lflag |= ECHO; -#ifdef OXTABS - tty_settings->c_oflag |= OXTABS; -#endif /* OXTABS */ + set_flags(tty_settings->c_oflag, ONLCR); + set_flags(tty_settings->c_iflag, ICRNL); + set_flags(tty_settings->c_lflag, ECHO); + set_flags(tty_settings->c_oflag, OXTABS); /* test used to be tgetflag("NL") */ if (VALID_STRING(newline) && newline[0] == '\n' && !newline[1]) { /* Newline, not linefeed. */ -#ifdef ONLCR - tty_settings->c_oflag &= ~((unsigned) ONLCR); -#endif - tty_settings->c_iflag &= ~((unsigned) ICRNL); + clear_flags(tty_settings->c_oflag, ONLCR); + clear_flags(tty_settings->c_iflag, ICRNL); } -#ifdef OXTABS +#if OXTABS /* test used to be tgetflag("pt") */ if (VALID_STRING(set_tab) && VALID_STRING(clear_all_tabs)) - tty_settings->c_oflag &= ~OXTABS; + clear_flags(tty_settings->c_oflag, OXTABS); #endif /* OXTABS */ - tty_settings->c_lflag |= (ECHOE | ECHOK); + set_flags(tty_settings->c_lflag, (ECHOE | ECHOK)); #endif } @@ -493,7 +527,7 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings) bool need_flush = FALSE; (void) old_settings; -#ifdef TAB3 +#if TAB3 if (old_settings != 0 && old_settings->c_oflag & (TAB3 | ONLCR | OCRNL | ONLRET)) { old_settings->c_oflag &= (TAB3 | ONLCR | OCRNL | ONLRET); @@ -515,22 +549,22 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings) if (VALID_STRING(clear_margins)) { need_flush |= sent_string(clear_margins); - } else + } #if defined(set_lr_margin) - if (VALID_STRING(set_lr_margin)) { + else if (VALID_STRING(set_lr_margin)) { need_flush |= sent_string(TIPARM_2(set_lr_margin, 0, columns - 1)); - } else + } #endif #if defined(set_left_margin_parm) && defined(set_right_margin_parm) - if (VALID_STRING(set_left_margin_parm) - && VALID_STRING(set_right_margin_parm)) { + else if (VALID_STRING(set_left_margin_parm) + && VALID_STRING(set_right_margin_parm)) { need_flush |= sent_string(TIPARM_1(set_left_margin_parm, 0)); need_flush |= sent_string(TIPARM_1(set_right_margin_parm, columns - 1)); - } else + } #endif - if (VALID_STRING(set_left_margin) - && VALID_STRING(set_right_margin)) { + else if (VALID_STRING(set_left_margin) + && VALID_STRING(set_right_margin)) { need_flush |= to_left_margin(); need_flush |= sent_string(set_left_margin); if (VALID_STRING(parm_right_cursor)) { diff --git a/progs/tabs.c b/progs/tabs.c index c852eb85..a630b044 100644 --- a/progs/tabs.c +++ b/progs/tabs.c @@ -39,7 +39,7 @@ #include #include -MODULE_ID("$Id: tabs.c,v 1.52 2023/05/27 20:13:10 tom Exp $") +MODULE_ID("$Id: tabs.c,v 1.53 2023/11/04 20:46:09 tom Exp $") static GCC_NORETURN void usage(void); @@ -370,7 +370,9 @@ do_set_margin(int margin, bool no_op) } tputs(set_left_margin, 1, putch); } - } else if (VALID_STRING(set_left_margin_parm)) { + } +#if defined(set_left_margin_parm) && defined(set_right_margin_parm) + else if (VALID_STRING(set_left_margin_parm)) { result = TRUE; if (!no_op) { if (VALID_STRING(set_right_margin_parm)) { @@ -379,12 +381,16 @@ do_set_margin(int margin, bool no_op) tputs(TIPARM_2(set_left_margin_parm, margin, max_cols), 1, putch); } } - } else if (VALID_STRING(set_lr_margin)) { + } +#endif +#if defined(set_lr_margin) + else if (VALID_STRING(set_lr_margin)) { result = TRUE; if (!no_op) { tputs(TIPARM_2(set_lr_margin, margin, max_cols), 1, putch); } } +#endif return result; } diff --git a/progs/tic.c b/progs/tic.c index 474e93d8..ae65e631 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -49,7 +49,7 @@ #include #include -MODULE_ID("$Id: tic.c,v 1.323 2023/09/30 21:17:23 Branden.Robinson Exp $") +MODULE_ID("$Id: tic.c,v 1.324 2023/11/04 19:43:43 tom Exp $") #define STDIN_NAME "" @@ -3149,6 +3149,7 @@ guess_ANSI_VTxx(TERMTYPE2 *tp) * In particular, any ECMA-48 terminal should support these, though the details * for u9 are implementation dependent. */ +#if defined(user6) && defined(user7) && defined(user8) && defined(user9) static void check_user_6789(TERMTYPE2 *tp) { @@ -3184,6 +3185,9 @@ check_user_6789(TERMTYPE2 *tp) break; } } +#else +#define check_user_6789(tp) /* nothing */ +#endif /* other sanity-checks (things that we don't want in the normal * logic that reads a terminfo entry)