bug-ncurses
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: why terminal resize changes size of windows?


From: Leon Winter
Subject: Re: why terminal resize changes size of windows?
Date: Fri, 11 Feb 2022 09:21:13 +0100

Hi Pavel,

this is how I do it:

void ignore_handler (int)
{
}

// somewhere else before initscr ()
struct sigaction ignore;
memset (&ignore, 0, sizeof ignore);
ignore.sa_handler = ignore_handler;
sigaction (SIGWINCH, &ignore, 0);

Regards,
Leon

On Fri, Feb 11, 2022 at 03:55:04AM +0100, Pavel Stehule wrote:
> pá 11. 2. 2022 v 3:34 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
> napsal:
> 
> >
> >
> > pá 11. 2. 2022 v 1:35 odesílatel Thomas Dickey <dickey@his.com> napsal:
> >
> >> On Thu, Feb 10, 2022 at 11:54:00AM +0100, Pavel Stehule wrote:
> >> > Hi
> >> >
> >> > I found an interesting issue. When I resize the terminal, so some
> >> windows
> >> > are partially out of screen, the window size is reduced. From this
> >> moment,
> >> > the window lost original size, and the size of window is related to
> >> size of
> >> > screen.
> >>
> >> As I pointed out here:
> >>
> >> https://lists.gnu.org/archive/html/bug-ncurses/2020-08/msg00011.html
> >>
> >> windows don't extend outside the screen.
> >>
> >> When ncurses is handling SIGWINCH, it shrinks windows to fit in the
> >> screen.
> >>
> >
> >
> Is it possible to disable this feature? Maybe in the future, by some
> setting? I am author or pspg https://github.com/okbob/pspg
> 
> and this feature was probably the biggest issue when I worked on it. The
> user of pspg can resize the terminal at any moment. And after resizing I
> need to recheck all windows if they are the correct size. I understand, so
> the signal handler can shrink some windows, but what is strange, it can
> extend some windows too. Maybe the shrinking can be replaced by some flags
> that can be detected from applications like fully visible, partially
> visible, invisible. But the size of the window can be immutable.
> 
> Regards
> 
> Pavel
> 
> 
> 
> > ok
> >
> > Thank you for info
> >
> > Regards
> >
> > Pavel
> >
> >>
> >> >
> >> > It can be easy demonstrated by example:
> >> >
> >> > #include <ncurses.h>
> >> >
> >> > int
> >> > main()
> >> > {
> >> >     int     c;
> >> >     WINDOW *win;
> >> >
> >> >     initscr();
> >> >
> >> >     clear();
> >> >     noecho();
> >> >     cbreak();
> >> >     curs_set(0);
> >> >     keypad(stdscr, TRUE);
> >> >
> >> >     win = newwin(20, 40, 15,15);
> >> >
> >> >     timeout(250);
> >> >
> >> >     while (c != 'q')
> >> >     {
> >> >         int lines, cols;
> >> >
> >> >         clear();
> >> >
> >> >         /* termina size */
> >> >         mvprintw(10, 10, "terminal: %d, %d", LINES, COLS);
> >> >         clrtoeol();
> >> >
> >> >         /* stdscr size */
> >> >         getmaxyx(stdscr, lines, cols);
> >> >         mvprintw(11, 10, "stdscr: %d, %d", lines, cols);
> >> >         clrtoeol();
> >> >
> >> >         /* win size */
> >> >         getmaxyx(win, lines, cols);
> >> >         mvprintw(12, 10, "win: %d, %d", lines, cols);
> >> >         clrtoeol();
> >> >
> >> >         refresh();
> >> >
> >> >         wclear(win);
> >> >         box(win, 0,0);
> >> >         wrefresh(win);
> >> >
> >> >         c = getch();
> >> >     }
> >> >
> >> >     endwin();
> >> > }
> >> >
> >> > when running, try to reduce terminal size to 20 lines, 40 cols. After
> >> > increasing terminal size, the size of window win is increased too.
> >> >
> >> > What is the reason for this behaviour?
> >> >
> >> > Regards
> >> >
> >> > Pavel Stehule
> >>
> >>
> >>
> >>
> >>
> >> --
> >> Thomas E. Dickey <dickey@invisible-island.net>
> >> https://invisible-island.net
> >> ftp://ftp.invisible-island.net
> >>
> >



reply via email to

[Prev in Thread] Current Thread [Next in Thread]