On 2014/01/13 12:41, Philip Guenther wrote:
> On Mon, 13 Jan 2014, Gregor Best wrote:
> > The patch below seems to fix that for me. resizeterm() does a 
> > putchar(KEY_RESIZE), part of which then gets interpreted as a command 
> > parameter in rundisplay().
> 
> I think you meant "ungetch(KEY_RESIZE)", but that pointed me at the 
> getnstr() manpage, which notes that it returns KEY_RESIZE if there was a 
> pending resize event.  Changing readline() to loop on getnstr() while it 
> returns that, resetting the cursor position each time, seems to fix the 
> problem in my testing.

Thanks, both diffs fix things for me, but this one is clearer and more
precise - OK.

> 
> Philip Guenther
> 
> 
> Index: display.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/top/display.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 display.c
> --- display.c 28 Nov 2013 18:24:55 -0000      1.46
> +++ display.c 13 Jan 2014 20:37:38 -0000
> @@ -641,9 +641,12 @@ readline(char *buffer, int size)
>       /* allow room for null terminator */
>       size -= 1;
>  
> -     if (smart_terminal)
> -             getnstr(buffer, size);
> -     else
> +     if (smart_terminal) {
> +             int y, x;
> +             getyx(stdscr, y, x);
> +             while (getnstr(buffer, size) == KEY_RESIZE)
> +                     move(y, x);
> +     } else
>               return readlinedumb(buffer, size);
>  
>       cnt = strlen(buffer);
> 

Reply via email to