2009-11-28 36 views
12

Làm cách nào để tìm chiều rộng đầu cuối & chiều cao của ứng dụng ncurses?ncurses terminal size

+0

@DylanJ, không cần đặt câu trả lời trong câu hỏi, đặc biệt khi bạn đã chấp nhận câu trả lời. – paxdiablo

Trả lời

13

void getmaxyx(WINDOW *win, int y, int x); tôi tin ...

cũng có, điều này có thể giúp ...

Getting terminal width in C?

+1

Ngoài ra: Đừng quên rằng một số hệ điều hành có SIGWINCH mà quá trình của bạn nhận được khi thiết bị đầu cuối được thay đổi kích thước ... – asveikau

+0

'initscr()' sẽ xóa màn hình. Có cách nào có thể nhận được kích thước thiết bị đầu cuối và không rõ ràng màn hình? – jiandingzhe

+0

Không chắc chắn điều này là đúng vì 'y' &' x' không phải là con trỏ và do đó chức năng sẽ không sao chép bất kỳ thứ gì cho chúng. Và từ macro 'mkssoftware.com':" 'getbegyx() và getmaxyx() lưu trữ tọa độ bắt đầu hiện tại và kích thước của cửa sổ được chỉ định.'" –

0

gì về việc sử dụng SCR_HSCR_W?

0

Tôi đang sử dụng mã này:

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

Đó không phải là rất ncurses'ish. – einpoklum

3

ncurses các ứng dụng thông thường xử lý SIGWINCH và sử dụng ioctl với TIOCGWINSZ để có được khái niệm của hệ thống của screensize. Điều đó có thể bị ghi đè bởi các biến môi trường LINESCOLUMNS (xem use_env).

Cho rằng, các biến ncurses toàn cầu LINESCOLS được cập nhật như một tác dụng phụ khi wgetch lợi nhuận KEY_RESIZE (để đáp ứng với một SIGWINCH) để cung cấp kích thước của stdscr (màn hình tiêu chuẩn đại diện cho toàn bộ thiết bị đầu cuối).

Tất nhiên, bạn có thể sử dụng getmaxx, getmaxygetmaxyx để nhận một hoặc cả hai giới hạn cho x và điều phối của cửa sổ. Chỉ cái cuối cùng là tiêu chuẩn (và di động).

Tiếp tục đọc:

0

các biến CỘT, LINES được khởi tạo các kích thước màn hình sau khi initscr().

Nguồn: NCURSES Programming HOWTO

Tôi không chắc chắn nếu họ được cập nhật đã đổi kích thước mặc dù.