Jürgen, May I suggest a couple of changes to src/main.cc?
The first thing is a. bug - there's no #include "config.h" in main.cc HAVE_IOCTL_TIOCGWINSZ is undefined and code that is conditionalized based on its existence won't be compiled. I also looked at the changes in context, and think that the code can be streamlined a bit. * the signal handler code for SIGWINCH can be conditionalized based on whether HAVE_IOCTL_TIOCGWINSZ is set. My thought is, if we aren't going to use SIGWINCH to change the column width, why configure the signal handler? * If the ioctl is available but the preferenece WINCH_sets_pw is not set, there's also no need to enable the signal handler. * The signal handler now has code to make sure that ⎕PW is set between max and min valuse. * There's overlap in the code in the SIGWINCH signal handler and the initial set up code based on whether preference WINCH_sets_pw is set or not later in the code. I simplified it to call the signal handler routine (essentiallly pretending that a signal was received at startup time). Here's the diffs betwen my code and SVN1808 - it includes both my proposed code and the #include of config.h: =================================================================== --- src/main.cc (revision 1808) +++ src/main.cc (working copy) @@ -41,6 +41,8 @@ #include <sys/socket.h> #include <sys/types.h> +#include "config.h" + #if HAVE_IOCTL_TIOCGWINSZ // plat form has ioctl(fd, TIOCGWINSZ. ...) # include <sys/ioctl.h> #endif @@ -132,17 +134,28 @@ got_WINCH = true; struct winsize wsize; - // TIOCGWINSZ is 0x5413 on GNU/Linux. We use 0x5413 instead of TIOCGWINSZ - // if TIOCGWINSZ is not #defined on some platform. + +#if HAVE_IOCTL_TIOCGWINSZ + // query the window size and set ⎕PW if we have ioctl TIOCGWINSZ // -#ifndef TIOCGWINSZ -# define TIOCGWINSZ 0x5413 + + // MAX_Quad_PW is 10,000 or so, which is certainly larger than + // the number of screen columns. We trust TIOCGWINSZ only if + // it is resonably small. We allow it to be too small (and then + // increase it). but ignore it if it is too large. + // + wsize.ws_col = MAX_Quad_PW; // invalidate the column count + if (0 == ioctl(STDIN_FILENO, TIOCGWINSZ, &wsize)) + { + if (wsize.ws_col < MIN_Quad_PW) // increase too small ws_col + wsize.ws_col = MIN_Quad_PW; + if (wsize.ws_col > MAX_Quad_PW) // limit ws_col + wsize.ws_col = MAX_Quad_PW; + Workspace::set_PW(wsize.ws_col, LOC); + } #endif - if (0 != ioctl(STDIN_FILENO, TIOCGWINSZ, &wsize)) return; - if (wsize.ws_col < MIN_Quad_PW) return; - if (wsize.ws_col > MAX_Quad_PW) return; - - Workspace::set_PW(wsize.ws_col, LOC); + // just return if we don't have ioctl TIOCGWINSZ + return; } //---------------------------------------------------------------------------- /// old sigaction argument for SIGUSR1 @@ -451,34 +464,25 @@ sigaction(SIGTERM, &new_TERM_action, &old_TERM_action); sigaction(SIGHUP, &new_HUP_action, &old_HUP_action); signal(SIGCHLD, SIG_IGN); // do not create zombies - if (UserPreferences::uprefs.WINCH_sets_pw) - { - sigaction(SIGWINCH, &new_WINCH_action, &old_WINCH_action); - signal_WINCH_handler(0); // pretend window size change - } #if HAVE_IOCTL_TIOCGWINSZ - // The platform supports reading back of the window size. If the user - // wants ⎕PW to be controlled by the window size, then she most likely - // also wants ⎕PW to be controlled by the window size at start-up. + // Enable the ability to change ⎕PW on window resize only if the + // platform supports ioctl TIOCGWINSZ // + if (UserPreferences::uprefs.WINCH_sets_pw) { - winsize win_size; - win_size.ws_col = MAX_Quad_PW; // invalidate the column count - if (0 == ioctl(STDIN_FILENO, TIOCGWINSZ, &win_size)) - { - // MAX_Quad_PW is 10,000 or so, which is certainly larger than - // the number of screen columns. We trust TIOCGWINSZ only if - // it is resonably small. We allow it to be too small (and then - // increase it). but ignore it if it is too large. - // - if (win_size.ws_col < MIN_Quad_PW) // increase too small ws_col - win_size.ws_col = MIN_Quad_PW; - - if (win_size.ws_col < MAX_Quad_PW) // ognmore large ws_col - Workspace::set_PW(win_size.ws_col, LOC); - } + // IF WINCH_sets_pw preference is enabled, set up a handler for the + // SIGWINCH signal. + sigaction(SIGWINCH, &new_WINCH_action, &old_WINCH_action); + + // The platform supports reading back of the window size. If the user + // wants ⎕PW to be controlled by the window size, then she most likely + // also wants ⎕PW to be controlled by the window size at start-up. + // We do this by by using the WINCH signal handler to pretend that + // there's a window size change + + signal_WINCH_handler(0); // pretend window size change } #endif - paul > On Dec 29, 2024, at 8:08 AM, Dr. Jürgen Sauermann > <m...@xn--jrgen-sauermann-zvb.de> wrote: > > Hi Paul, > > thanks, fixed in SVN 1808. > > Best Regards, > Jürgen >