Discussion:
[ekg-users] EKG i window resize
Mikolaj Kucharski
2011-04-06 00:01:47 UTC
Permalink
Witam,

Nie jestem pewien, czy nie powinienem pisac na devel. Uzywam ekg pod
OpenBSD i program nie radzi sobie prawidlowo z zmiana rozmaru okna.
Nie wiem jak to wytlumaczyc, moge wyslac screenshoty, jak ktos chcialby
zerknac.

- Czy spotkal sie ktos kiedys z tym problemem?

- Czy wie ktos moze jak podejsc do tematu, zeby tem problem rozwiazac?


Problem wystepuje w PuTTY-m, tmux-e i screen-e.


EKG - Eksperymentalny Klient Gadu-Gadu (1.7)
libgadu-1.7 (protokol 0x24, klient 6, 1, 0, 158)
skompilowano: Mar 26 2011 19:19:11

# ponizsze ustawienie nie wplywa na problem
display_pl_chars = 0 (off)

# putty
$ echo $TERM
xterm

# tmux
$ echo $TERM
screen

# screen
$ echo $TERM
screen


$ sysctl -n kern.version
OpenBSD 4.9 (GENERIC.MP) #785: Fri Feb 18 14:16:01 MST 2011
todd at i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC.MP
--
best regards
q#
Mikolaj Kucharski
2011-04-18 23:25:23 UTC
Permalink
Cisza.. nikt nigdy nie spotkal sie z tym problemem? Czy powinienem udac
sie na ekg-devel?
Post by Mikolaj Kucharski
Witam,
Nie jestem pewien, czy nie powinienem pisac na devel. Uzywam ekg pod
OpenBSD i program nie radzi sobie prawidlowo z zmiana rozmaru okna.
Nie wiem jak to wytlumaczyc, moge wyslac screenshoty, jak ktos chcialby
zerknac.
- Czy spotkal sie ktos kiedys z tym problemem?
- Czy wie ktos moze jak podejsc do tematu, zeby tem problem rozwiazac?
Problem wystepuje w PuTTY-m, tmux-e i screen-e.
EKG - Eksperymentalny Klient Gadu-Gadu (1.7)
libgadu-1.7 (protokol 0x24, klient 6, 1, 0, 158)
skompilowano: Mar 26 2011 19:19:11
# ponizsze ustawienie nie wplywa na problem
display_pl_chars = 0 (off)
# putty
$ echo $TERM
xterm
# tmux
$ echo $TERM
screen
# screen
$ echo $TERM
screen
$ sysctl -n kern.version
OpenBSD 4.9 (GENERIC.MP) #785: Fri Feb 18 14:16:01 MST 2011
todd at i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC.MP
--
best regards
q#
Adam Wysocki
2011-04-19 10:18:51 UTC
Permalink
Post by Mikolaj Kucharski
Cisza.. nikt nigdy nie spotkal sie z tym problemem? Czy powinienem udac
sie na ekg-devel?
Wy?lij screenshoty, bo "program nie radzi sobie ze zmian? rozmiaru okna"
to poj?cie og?lne :) Najlepiej nie na list?, tylko linki do nich.
--
gof
Łukasz Gandecki
2011-04-19 11:04:36 UTC
Permalink
W dniu 19 kwietnia 2011 12:18 u?ytkownik Adam Wysocki
Post by Adam Wysocki
Post by Mikolaj Kucharski
Cisza.. nikt nigdy nie spotkal sie z tym problemem? Czy powinienem udac
sie na ekg-devel?
Wy?lij screenshoty, bo "program nie radzi sobie ze zmian? rozmiaru okna"
to poj?cie og?lne :) Najlepiej nie na list?, tylko linki do nich.
screenshoty to jedna sprawa. I oczywi?cie linki. :)
Pr?bowa?e? ctrl + l w sytuacji jak si? co? "krzaczy?o"? Powinno
od?wie?y? ncurses.
--
Pozdrawiam,
?ukasz Gandecki 'gozda'
Mikolaj Kucharski
2011-04-19 11:18:02 UTC
Permalink
Post by Łukasz Gandecki
W dniu 19 kwietnia 2011 12:18 u?ytkownik Adam Wysocki
Post by Adam Wysocki
Post by Mikolaj Kucharski
Cisza.. nikt nigdy nie spotkal sie z tym problemem? Czy powinienem udac
sie na ekg-devel?
Wy?lij screenshoty, bo "program nie radzi sobie ze zmian? rozmiaru okna"
to poj?cie og?lne :) Najlepiej nie na list?, tylko linki do nich.
screenshoty to jedna sprawa. I oczywi?cie linki. :)
Pr?bowa?e? ctrl + l w sytuacji jak si? co? "krzaczy?o"? Powinno
od?wie?y? ncurses.
CTRL + L to repaint screena, a w tym nie problem. PuTTY odpalony jest w
rozmarze 80x24 (pierwszy screenshot). Przy kazdej zmianie okna wszystko
sie wyswietla bez 'krzakow', lecz ekg nie aktualizuje zmiany okna.
Jezeli zmienie rozmiar okna przy odpalonym ekg, nastapnie wyjde z ekg i
uruchomie je na nowo, nowy rozmiar jest zinterpretowany poprawnie. Poki
nie zmienie rozmiaru okna ponownie...

http://www1.kucharski.name/pub/ekg/
--
best regards
q#
Adam Wysocki
2011-04-19 12:41:19 UTC
Permalink
Post by Mikolaj Kucharski
CTRL + L to repaint screena, a w tym nie problem. PuTTY odpalony jest w
rozmarze 80x24 (pierwszy screenshot). Przy kazdej zmianie okna wszystko
sie wyswietla bez 'krzakow', lecz ekg nie aktualizuje zmiany okna.
Jezeli zmienie rozmiar okna przy odpalonym ekg, nastapnie wyjde z ekg i
uruchomie je na nowo, nowy rozmiar jest zinterpretowany poprawnie. Poki
nie zmienie rozmiaru okna ponownie...
A wys?anie sygna?u SIGWINCH do ekg pomaga?

Czy bez odpalonego screena problem te? wyst?puje?
--
gof
kfahoo
2011-04-19 12:46:15 UTC
Permalink
W dniu 19 kwietnia 2011 14:41 u?ytkownik Adam Wysocki
Post by Adam Wysocki
Post by Mikolaj Kucharski
CTRL + L to repaint screena, a w tym nie problem. PuTTY odpalony jest w
rozmarze 80x24 (pierwszy screenshot). Przy kazdej zmianie okna wszystko
sie wyswietla bez 'krzakow', lecz ekg nie aktualizuje zmiany okna.
Jezeli zmienie rozmiar okna przy odpalonym ekg, nastapnie wyjde z ekg i
uruchomie je na nowo, nowy rozmiar jest zinterpretowany poprawnie. Poki
nie zmienie rozmiaru okna ponownie...
A wys?anie sygna?u SIGWINCH do ekg pomaga?
Czy bez odpalonego screena problem te? wyst?puje?
--
gof
a czy przypadkiem nie odpalasz screen -x?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ziew.org/pipermail/ekg-users/attachments/20110419/7fa2038e/attachment.html
Mikolaj Kucharski
2011-04-19 13:03:16 UTC
Permalink
W dniu 19 kwietnia 2011 14:41 u?ytkownik Adam Wysocki <[1]gophi at supermedia.pl>
Post by Mikolaj Kucharski
CTRL + L to repaint screena, a w tym nie problem. PuTTY odpalony jest w
rozmarze 80x24 (pierwszy screenshot). Przy kazdej zmianie okna wszystko
sie wyswietla bez 'krzakow', lecz ekg nie aktualizuje zmiany okna.
Jezeli zmienie rozmiar okna przy odpalonym ekg, nastapnie wyjde z ekg i
uruchomie je na nowo, nowy rozmiar jest zinterpretowany poprawnie. Poki
nie zmienie rozmiaru okna ponownie...
A wys?anie sygna?u SIGWINCH do ekg pomaga?
Nie pomaga. Nic sie nie dzieje z ekg po otrzymaniu sygnalu.

$ pkill -WINCH ekg; echo $?
0
Czy bez odpalonego screena problem te? wyst?puje?
Tak jak napisalem w moim pierwszym majlu, problem wystepuje w (golym)
puttym, w screenie i w tmuxie.
a czy przypadkiem nie odpalasz screen -x?
Nie.
--
best regards
q#
Adam Wysocki
2011-04-19 13:14:34 UTC
Permalink
Post by Mikolaj Kucharski
Nie pomaga. Nic sie nie dzieje z ekg po otrzymaniu sygnalu.
$ pkill -WINCH ekg; echo $?
0
Znajd? w ui-ncurses.c miejsce:

#ifdef SIGWINCH
static void sigwinch_handler(int sig)
{
ui_need_refresh = 1;
}
#endif

i zmie? na:

#ifdef SIGWINCH
static void sigwinch_handler(int sig)
{
gg_debug(GG_DEBUG_MISC, "// SIGWINCH\n");
ui_need_refresh = 1;
}
#else
#error Brak SIGWINCH
#endif

To pomo?e si? zorientowa? czy SIGWINCH w og?le jest zdefiniowany
i czy handler jest wo?any (powinno by? w debugu - F12 w ekg).
--
gof
Mikolaj Kucharski
2011-04-19 13:57:18 UTC
Permalink
Post by Adam Wysocki
To pomo?e si? zorientowa? czy SIGWINCH w og?le jest zdefiniowany
i czy handler jest wo?any (powinno by? w debugu - F12 w ekg).
$ pkill -WINCH ekg; echo $?
0

w ekg widac:

15:51 // SIGWINCH


Build log:
http://www1.kucharski.name/pub/ekg/ekg-1.7p0.log
--
best regards
q#
Mikolaj Kucharski
2011-04-19 14:01:31 UTC
Permalink
Post by Mikolaj Kucharski
Post by Adam Wysocki
To pomo?e si? zorientowa? czy SIGWINCH w og?le jest zdefiniowany
i czy handler jest wo?any (powinno by? w debugu - F12 w ekg).
$ pkill -WINCH ekg; echo $?
0
15:51 // SIGWINCH
Oczywiscie jak zmieniam rozmiar okna to SIGWINCH tez sie loguje na
debugowej konsoli w ekg. A tutaj patch, zeby bylo jasne co zrobilem:


@@ -2097,8 +2097,11 @@ static void update_statusbar(int commit)
#ifdef SIGWINCH
static void sigwinch_handler(int sig)
{
+ gg_debug(GG_DEBUG_MISC, "// SIGWINCH\n");
ui_need_refresh = 1;
}
+#else
+#error Brak SIGWINCH
#endif

void save_windows()
--
best regards
q#
Adam Wysocki
2011-04-19 15:22:55 UTC
Permalink
Post by Mikolaj Kucharski
http://www1.kucharski.name/pub/ekg/ekg-1.7p0.log
1.7... a w wersji z svn te? problem wyst?puje?
--
gof
Mikolaj Kucharski
2011-04-19 15:31:18 UTC
Permalink
Post by Adam Wysocki
Post by Mikolaj Kucharski
http://www1.kucharski.name/pub/ekg/ekg-1.7p0.log
1.7... a w wersji z svn te? problem wyst?puje?
Czy stad moge sprobowac?

http://ekg.chmurka.net/ekg-20110418.tar.gz
--
best regards
q#
Adam Wysocki
2011-04-19 15:48:02 UTC
Permalink
Post by Mikolaj Kucharski
Post by Adam Wysocki
Post by Mikolaj Kucharski
http://www1.kucharski.name/pub/ekg/ekg-1.7p0.log
1.7... a w wersji z svn te? problem wyst?puje?
Czy stad moge sprobowac?
http://ekg.chmurka.net/ekg-20110418.tar.gz
Tak
--
gof
Mikolaj Kucharski
2011-04-19 17:05:20 UTC
Permalink
Post by Mikolaj Kucharski
Post by Adam Wysocki
Post by Mikolaj Kucharski
http://www1.kucharski.name/pub/ekg/ekg-1.7p0.log
1.7... a w wersji z svn te? problem wyst?puje?
Czy stad moge sprobowac?
http://ekg.chmurka.net/ekg-20110418.tar.gz
Tak
19:02 ::: EKG - Eksperymentalny Klient Gadu-Gadu (20110418)
19:02 ::: libgadu-20110418 (protokol 0x2e, klient 10.1.0.11070)
19:02 ::: skompilowano: Apr 19 2011 18:00:17

E-e, to samo, problem nadal wystepuje podczas zmiany rozmiaru okna.
--
best regards
q#
Adam Wysocki
2011-04-19 17:13:03 UTC
Permalink
Post by Mikolaj Kucharski
19:02 ::: EKG - Eksperymentalny Klient Gadu-Gadu (20110418)
19:02 ::: libgadu-20110418 (protokol 0x2e, klient 10.1.0.11070)
19:02 ::: skompilowano: Apr 19 2011 18:00:17
E-e, to samo, problem nadal wystepuje podczas zmiany rozmiaru okna.
Czy polecenie /_resize powoduje wtedy zmian? rozmiaru okna?

W ui_ncurses.c w funkcji ui_ncurses_loop jest taki if:

if (ui_need_refresh) {
ui_need_refresh = 0;
endwin();
refresh();
keypad(input, TRUE);
/* wywo?a wszystko, co potrzebne */
header_statusbar_resize(NULL);
changed_backlog_size("backlog_size");

goto redraw_prompt;
}

Dodaj przed goto:

gg_debug(GG_DEBUG_MISC, "// refresh\n");
--
gof
Mikolaj Kucharski
2011-04-19 17:40:01 UTC
Permalink
Post by Adam Wysocki
Post by Mikolaj Kucharski
19:02 ::: EKG - Eksperymentalny Klient Gadu-Gadu (20110418)
19:02 ::: libgadu-20110418 (protokol 0x2e, klient 10.1.0.11070)
19:02 ::: skompilowano: Apr 19 2011 18:00:17
E-e, to samo, problem nadal wystepuje podczas zmiany rozmiaru okna.
Czy polecenie /_resize powoduje wtedy zmian? rozmiaru okna?
Nie. Nic sie nie dzieje.
Post by Adam Wysocki
if (ui_need_refresh) {
ui_need_refresh = 0;
endwin();
refresh();
keypad(input, TRUE);
/* wywo?a wszystko, co potrzebne */
header_statusbar_resize(NULL);
changed_backlog_size("backlog_size");
goto redraw_prompt;
}
gg_debug(GG_DEBUG_MISC, "// refresh\n");
Najpierw zmienilem rozmiar okna 4 razy. Nastepnie wykonalem pare razy
samo /_resize z wiersza polecen:

19:33 // SIGWINCH
19:33 // refresh
19:33 // SIGWINCH
19:33 // refresh
19:33 // SIGWINCH
19:33 // refresh
19:33 // SIGWINCH
19:33 // refresh
19:33 // refresh
19:33 // refresh
19:33 // refresh

Nic sie nie dzieje, ekg nie zmienia rozmaru okna (ekg-20110418).


--- src/ui-ncurses.c.orig Mon Apr 18 21:00:09 2011
+++ src/ui-ncurses.c Tue Apr 19 18:31:31 2011
@@ -2408,8 +2408,11 @@ static void update_statusbar(int commit)
#ifdef SIGWINCH
static void sigwinch_handler(int sig)
{
+ gg_debug(GG_DEBUG_MISC, "// SIGWINCH\n");
ui_need_refresh = 1;
}
+#else
+#error Brak SIGWINCH
#endif

void save_windows()
@@ -4756,6 +4759,7 @@ static void ui_ncurses_loop()
header_statusbar_resize(NULL);
changed_backlog_size("backlog_size");

+ gg_debug(GG_DEBUG_MISC, "// refresh\n");
goto redraw_prompt;
}
--
best regards
q#
Adam Wysocki
2011-04-19 17:45:12 UTC
Permalink
Post by Mikolaj Kucharski
Nic sie nie dzieje, ekg nie zmienia rozmaru okna (ekg-20110418).
Prawd? m?wi?c sko?czy?y mi si? pomys?y. Czy irssi lub inne programy oparte
na ncurses zachowuj? si? tak samo?
--
gof
Dominik &quot;Socek&quot; Długajczyk
2011-04-19 18:04:29 UTC
Permalink
Ja tylko dodam, i? na menad?erze okien "awesome" + gauke (drop-down
terminal) mam podobnie. Czasami jak "pokaze" sobie terminal, to mam
jakie? bugi podobne do tych ze screenshot?w pokazanych wcze?niej.
Problem polega na tym, i? Awesome za ka?dym razem robi zmian?
wielko?ci okna. Do tego czasami na chama okno rozmowy przesuwa na sam?
g?r? (przez co zamiast widzie? wiadomo?? najnowsz?, widz? najstarsze).

Pewnie ta informacja nic nie pomo?e, ale skoro ko?cz? si? pomys?y, to
mo?e i ta informacja pomo?e. Acz, to mo?e by? zupe?nie inny problem.

Dodatkowe info: u mnie irssi si? tak nie psuje.
--
Pozdrawiam
Dominik "Socek" D?ugajczyk
Mikolaj Kucharski
2011-04-19 20:07:01 UTC
Permalink
Post by Adam Wysocki
Post by Mikolaj Kucharski
Nic sie nie dzieje, ekg nie zmienia rozmaru okna (ekg-20110418).
Prawd? m?wi?c sko?czy?y mi si? pomys?y. Czy irssi lub inne programy oparte
na ncurses zachowuj? si? tak samo?
Irssi, mutt (with-curses, without-slang) nie ma tego problemu jak ekg.
Spoko, bede kombinowal. Dzieki za pomoc.
--
best regards
q#
Mikolaj Kucharski
2011-04-22 20:50:51 UTC
Permalink
Post by Mikolaj Kucharski
Post by Adam Wysocki
Post by Mikolaj Kucharski
Nic sie nie dzieje, ekg nie zmienia rozmaru okna (ekg-20110418).
Prawd? m?wi?c sko?czy?y mi si? pomys?y. Czy irssi lub inne programy oparte
na ncurses zachowuj? si? tak samo?
Irssi, mutt (with-curses, without-slang) nie ma tego problemu jak ekg.
Spoko, bede kombinowal. Dzieki za pomoc.
Problem z ncurses pod OpenBSD. Na chwile obecna brak rozwiazania. Jak
ktos ciekaw.

http://marc.info/?t=130350035100002&r=1&w=2

Pozdr.
--
best regards
q#
Adam Wysocki
2011-04-22 22:20:54 UTC
Permalink
Post by Mikolaj Kucharski
Post by Mikolaj Kucharski
Irssi, mutt (with-curses, without-slang) nie ma tego problemu jak ekg.
Spoko, bede kombinowal. Dzieki za pomoc.
Problem z ncurses pod OpenBSD. Na chwile obecna brak rozwiazania. Jak
ktos ciekaw.
Spr?buj w ui-ncurses.c w ui_ncurses_loop w miejscu:

if (ui_need_refresh) {
ui_need_refresh = 0;
endwin();
refresh();
keypad(input, TRUE);
/* wywo?a wszystko, co potrzebne */
header_statusbar_resize(NULL);
changed_backlog_size("backlog_size");

goto redraw_prompt;
}

Po endwin a przed refresh doda?:

resizeterm(LINES, COLS);

Nie wiem czy pomo?e, ale warto spr?bowa?.
--
gof
Mikolaj Kucharski
2011-04-23 01:00:58 UTC
Permalink
Post by Adam Wysocki
if (ui_need_refresh) {
ui_need_refresh = 0;
endwin();
refresh();
keypad(input, TRUE);
/* wywo?a wszystko, co potrzebne */
header_statusbar_resize(NULL);
changed_backlog_size("backlog_size");
goto redraw_prompt;
}
resizeterm(LINES, COLS);
Nie wiem czy pomo?e, ale warto spr?bowa?.
Nie, to nie pomaga, poniewaz problem jest wewnatarz ncrurses. Za to
ponizszy kod dziala prawidlowo. Jednak poczekam na deweloperow OpenBSD
co oni zaproponuja. Moze zajze do mutt'a i irssi jak tam rozwiazany jest
resize okna.


--- src/ui-ncurses.c.orig Mon Apr 18 21:00:09 2011
+++ src/ui-ncurses.c Sat Apr 23 00:51:33 2011
@@ -58,6 +58,7 @@
#ifndef HAVE_SCANDIR
# include "../compat/scandir.h"
#endif
+#include <sys/ioctl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -4734,6 +4738,8 @@ static void spellcheck(const char *line, char *checked
*/
static void ui_ncurses_loop()
{
+ struct winsize w;
+
line = xmalloc(LINE_MAXLEN);
#ifdef WITH_ASPELL
aspell_line = xmalloc(LINE_MAXLEN);
@@ -4750,6 +4756,8 @@ static void ui_ncurses_loop()
if (ui_need_refresh) {
ui_need_refresh = 0;
endwin();
+ if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1)
+ resizeterm(w.ws_row, w.ws_col);
refresh();
keypad(input, TRUE);
/* wywo?a wszystko, co potrzebne */
--
best regards
q#
Adam Wysocki
2011-04-23 12:07:08 UTC
Permalink
Post by Mikolaj Kucharski
Nie, to nie pomaga, poniewaz problem jest wewnatarz ncrurses. Za to
ponizszy kod dziala prawidlowo.
No tak, LINES to tylko zmienna (my?la?em ?e jaka? makrodefinicja,
wo?aj?ca w?a?nie ioctla - nie wiem sk?d mi si? to wzi??o).
Post by Mikolaj Kucharski
Jednak poczekam na deweloperow OpenBSD co oni zaproponuja.
Jak nic nie zaproponuj? to daj zna?, dodam tego ioctla do ekg.
Post by Mikolaj Kucharski
Moze zajze do mutt'a i irssi jak tam rozwiazany jest resize okna.
W irssi w src/fe-text/term.c jest term_get_size() kt?re wo?a ioctla
je?eli w sygnale WINCH zostanie ustawiona flaga.
Post by Mikolaj Kucharski
+ if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1)
Zmieni?bym na:

if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_row != 0 && w.ws_col != 0)

irssi sprawdza ten warunek inaczej (dowolna musi by? niezerowa, a nie
obie), ale nie wyobra?am sobie prawid?owego dzia?ania je?eli kt?rakolwiek
z tych warto?ci by?aby zerowa...
--
gof
Mikolaj Kucharski
2011-04-23 23:53:41 UTC
Permalink
No wyglada, ze problem rozwiazali po stronie OpenBSD, wiec wszystko
powinno dzialac prawidlowo w ekg bez modifikacji.

http://marc.info/?l=openbsd-cvs&m=130359657509976&w=2

Dzieki Adam, za zainteresowanie i pomoc.
--
best regards
q#
Kontynuuj czytanie narkive:
Loading...