xterm átméretezés programból

Fórumok

Szeretném, ha az ncurses-re alapozott programom megfelelő méretű terminálban indulna.
http://invisible-island.net/xterm/ctlseqs/ctlseqs.html szerint az xterm programból átméretezhető a
CSI P s ; Ps ; P s t
szekvenciával: P s = 8 ; height ; width → Resize the text area to [height;width] in characters.

Megpróbáltam így:
printf ("%cP8;P%c;P%ct",0x9b,43,132);
de semmi hatás. Aztán így:
printf ("%cP8;P43;P132t",0x9b);
Ebből sem lett semmi.
Hogyan kell ezt csinálni?

Hozzászólások

echo -ne "\e[8;30;100t"

vagy \e helyett lehet \033 is, esetleg c-ben:


#include <stdio.h>
int main(int argc, char**argv) {
        if (argc != 3) {
                printf("Usage: %s <cols> <rows>\n", argv[0]);
                return 1;
        }

        printf("%c[8;%s;%st", 0x1B, argv[2], argv[1]);
        return 0;
}

Btw. ez nem csak xterm-re jó :)
Sőt, lehet szórakozni is, pl így:

while true; do echo -ne "\e[2t"; echo -ne "\e[1t"; done

Nem szerencsés, ha az ablak akarja megmondani a saját méreteit, s még kevésbé, ha egy konzolos cucc akar X-es ablakméretet. Jobb ha az ablakkezelő találja ki.
Inkább kérdezd le az aktuális méretet induláskor (lehet bonyolítani és figyelni állandóan, hogy változik-e), és sikítson a program, ha nem elég a terület.

Ez egy avr mikrovezérlőkre készülő debugger, ahol nincs helye az átméretezésnek:
http://w3.hdsnet.hu/evoran/tmp/46x178.png
Ha már oda jut a dolog. hogy csak a SIGWINCH kezelése van hátra, az arra fog szolgálni, hogy megakadályozza a user screen összeomlasztási kísérleteit :)

Amikor az xterm-et indítod, meg tudod mondani, hogy mekkora legyen (-g)

Az a helyes, ha a karakteres program lekérdezi és tudomásul veszi, hogy mekkora terminálon fut éppen, és nem próbálja annak méretét erőszakkal megváltoztatni (nem minden terminálon megy ugyanis ez).
Sőt, az is nagyon hasznos, ha fel van rá készülve, hogy menet közben meg fog változni alatta a terminál (SIGWINCH), és kezeli ezt a szituációt is.