Kolik radku ma terminal

Alexandr Malusek malusek na hroch.ujf.cas.cz
Sobota Březen 14 17:17:44 CET 1998


Michal Ludvig <mic na cybeteria.cz> writes:

> je mozny nejak jednoduse zjistit [subj] ??? Jednoduse znamena, ze nechci
> pouzivat [n]curses (jenom kvuli tyhle informaci). Slo by to prez
> getenv("LINES"), ale jak je to spolehlivy? (kdo to nastavuje a podle
> ceho?)

Tuto informaci uchovava terminalovy driver Linuxu. Od nej to ziskate
pres ioctl (viz ioctl(2)) s parametrem TIOCGWINSZ (viz ioctl_list(2)).

Priklad:
$ cat ws
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <sys/ioctl.h>

int main()
{
  int err;
  struct winsize win;

  err = ioctl (STDIN_FILENO, TIOCGWINSZ, &win);
  printf("ROWS = %d\tCOLS = %d\n", win.ws_row, win.ws_col);
  return err;
}

To jsem samozrejme nevedel, ale vedel jsem ze pocet radku/sloupcu se
da nastavit/zjistit pomoci stty. Tak jsem si stahl
sh-utils-1.16-4.src.rpm a nasel jsem si, jak to dela stty. Overeni:

$ ./ws
ROWS = 24       COLS = 80
$ stty rows 15
$ ./ws
ROWS = 15       COLS = 80

Pozn.: Myslim, ze to neni prenositelne na kazdy Unix. Ohledne LINES,
...  se podivejte na poznamku v stty(1) - napr. mc LINES vubec
nepouziva.

--
A. Malusek  (malusek na ujf.cas.cz
UJF AV CR


Další informace o konferenci Linux