[sisyphus] А давно у нас mc разучился...

Alexei V. Mezin alexei-mezin на rambler.ru
Вт Дек 10 01:50:53 MSK 2013


10.12.2013 01:24, Dmitry V. Levin пишет:
> Если не приходит SIGWINCH, значит, konsole не выполняет
> (или неправильно выполняет) TIOCSWINSZ.
>
> Косвенным подтверждением является неизменность вывода команды
> $ stty -a |grep rows
> до и после resize.

Запускаю konsole через меню/кнопку на панели/Win-R. Ресайз в ней глючит, 
тестовая программа не показывает прихода SIGWINCH и mc глючит. Но!

В одной консоли


[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 54; columns 162; line = 0;
[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 45; columns 140; line = 0;
[alexei на bigbear ~]$ mc

[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 45; columns 140; line = 0;
[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 45; columns 140; line = 0;

То есть сначала работало, после запуска mc сломалось. В том же окне 
другая вкладка:

alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 51; columns 172; line = 0;
[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 55; columns 185; line = 0;
[alexei на bigbear ~]$ mc

[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 58; columns 192; line = 0;
[alexei на bigbear ~]$ stty -a |grep rows
speed 38400 baud; rows 50; columns 159; line = 0;


То есть stty все изменение размеров видит! Но mc в ней глючит.

Кстати, тот же mc глючит очень странно. При увеличении размеров окна mc 
не увеличивается, но после C-l строка меню и подсказки (самая верхняя и 
самая нижняя) вырастают на всю ширину, а панели так и остаются в старых 
размерах. При уменьшении размеров окна перерисовка mc вообще разрушается.


Если через Win-R запустить xterm, а из него konsole, то все работает.


>
> Можете попробовать поотлаживать, например,
> $ strace -feioctl -o'|grep TIOCSWINSZ' konsole

Запуск из konsole:

[alexei на bigbear ~]$ strace -feioctl -o'|grep TIOCSWINSZ' konsole
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, {ws_row=0, 
ws_col=0, ws_xpixel=0, ws_ypixel=0}) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, {ws_row=53, 
ws_col=155, ws_xpixel=0, ws_ypixel=0}) = 0
8503  ioctl(0, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fff135a3dc0) = 0
8503  ioctl(0, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fff135a3d50) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e10) = 0
8503  ioctl(0, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fff135a3d50) = 0
8567  ioctl(6, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffa0159410) = 0
8567  ioctl(0, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fff49eda4b0) = 0
8567  ioctl(0, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fff49eda440) = 0
8567  ioctl(0, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ <unfinished ...>
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0
8501  ioctl(9, SNDRV_TIMER_IOCTL_STATUS or TIOCSWINSZ, 0x7fffafa65e90) = 0

Событие происходит на каждый реальный ресайз окна, но внутри этого окна 
SIGWINCH не ловится, и mc не работает.





Подробная информация о списке рассылки Sisyphus