2009-11-28 23 views
12

端末の幅はどれくらいですか?& ncursesアプリケーションの高さは?ncurses端末のサイズ

+0

@DylanJ、質問に答えを入れる必要はありません。特に答えを受け入れたら、特に。 – paxdiablo

答えて

13

私は信じてvoid getmaxyx(WINDOW *win, int y, int x);が...

も、これは何SCR_HSCR_Wを使用することについて...

Getting terminal width in C?

+1

また、端末がサイズ変更されたときに、あなたのプロセスが受け取るSIGWINCHがいくつかのオペレーティングシステムにあることを忘れないでください。 – asveikau

+0

'initscr()'が画面をクリアします。端末のサイズを取得して画面をクリアできない方法はありますか? – jiandingzhe

+0

'y'と' x'はポインタではないため、関数は何もコピーしないので、これは本当ではありません。 '' mkssoftware.com'から: '' getbegyx()マクロとgetmaxyx()マクロは、指定されたウィンドウの現在の開始座標とサイズを保存します。 "" –

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

それはあまりncurses'ishではないです。 – einpoklum

3

ncursesのアプリケーションが正常にSIGWINCHを処理し、画面サイズのシステムの概念を得ることがTIOCGWINSZioctlを使用しています。これは環境変数LINESCOLUMNSuse_envを参照)によって上書きされる可能性があります。

KEY_RESIZESIGWINCHに応答して)wgetch戻るstdscrのサイズ(全体の端末を表す標準画面)を得たときのncursesグローバル変数LINESCOLSが副作用として更新される、ことを考えます。

もちろん、getmaxx,getmaxyおよびgetmaxyxを使用して、ウィンドウのx座標とy座標の制限の一方または両方を得ることができます。最後のものは標準的なものだけです。

さらにリーディング:

0

変数COLS、線はinitscrの後の画面サイズに初期化されます()。

出典:NCURSES Programming HOWTO

は、私は、彼らはしかし、サイズ変更に更新されますかはわかりません。