2009-11-28 120 views
12

如何查找終端寬度& ncurses應用程序的高度?ncurses終端大小

+0

@DylanJ,不需要在問題中提出答案,特別是一旦你接受了答案。 – paxdiablo 2009-11-28 08:53:11

回答

13

void getmaxyx(WINDOW *win, int y, int x);。我相信

也,這可能會幫助...有關使用SCR_HSCR_W

Getting terminal width in C?

+1

另請注意:不要忘記,某些操作系統具有在終端調整大小時您的進程接收到的SIGWINCH ... – asveikau 2009-11-28 08:46:03

+0

'initscr()'將清除屏幕。有什麼方法可以獲得終端大小並且不清除屏幕? – jiandingzhe 2014-10-24 08:55:05

+0

不確定這是否爲真,因爲'y'&'x'不是指針,因此函數不會將任何內容複製到它們。 而從'mkssoftware.com':「'getbegyx()和getmaxyx()宏存儲的window.'指定的當前座標開始和尺寸」 – 2017-08-27 23:59:32

0

什麼?

0

我正在使用此代碼:

struct winsize size; 
if (ioctl(0, TIOCGWINSZ, (char *) &size) < 0) 
    printf("TIOCGWINSZ error"); 
printf("%d rows, %d columns\n", size.ws_row, size.ws_col); 
+0

這不是非常好的。 – einpoklum 2016-02-28 12:08:41

3

ncurses的應用程序正常處理SIGWINCH和使用ioctlTIOCGWINSZ獲得屏幕尺寸的系統的概念。這可能會被環境變量LINESCOLUMNS覆蓋(請參閱use_env)。

鑑於此,所述的ncurses全局變量LINESCOLS被更新作爲副作用時wgetch返回KEY_RESIZE(響應於SIGWINCH),得到的stdscr大小(代表全終端的標準屏幕)。

您當然可以使用getmaxx,getmaxygetmaxyx來獲得窗口的x座標和y座標的一個或兩個限制。只有最後一個是標準(和便攜式)。

進一步閱讀:

0

變量COLS,線initscr的後初始化爲屏幕尺寸()。

來源:NCURSES Programming HOWTO

我不知道,如果他們得到更新,雖然在調整大小。