2015-11-29 13 views
5

Tôi đã đọc rằng ncurses có thể hỗ trợ tối đa 256 màu và tối đa 32k cặp màu. Trong khi tôi tự mình thiết lập 256 màu, tôi không thể tìm thấy bất kỳ thông tin nào về cách thiết lập các cặp màu 32k.Làm thế nào để kích hoạt cặp màu 32k trong ncurses?

Kết quả của

printf("%d - %d\n", COLORS, COLOR_PAIRS); 

256 - 256 

và trong khi 2 màu và 2 cặp màu có thể đủ cho người hâm mộ thiết bị đầu cuối hardcore, tôi muốn biết làm thế nào để có được màu sắc nhất ra khỏi thư viện.

Trả lời

2

Theo mặc định, cấu hình ncurses6 được bật --enable-ext-colors. Bạn cũng cần --enable-widec (nếu không, loại cchar_t lưu trữ màu mở rộng không được sử dụng). Các kịch bản cấu hình cảnh báo về vấn đề này:

checking if you want to use extended colors... yes 
configure: WARNING: This option applies only to wide-character library 

Giả sử bạn xây dựng các thư viện với màu sắc kéo dài (và ký tự rộng), nó là khả năng hiển thị lên đến 256 màu sắc và lên đến 32.767 cặp màu (giá trị lớn nhất trong số 16 bit đã ký). Sau đó, nó phụ thuộc vào mô tả thiết bị đầu cuối mà bạn đang sử dụng (và bộ mô phỏng đầu cuối). Phần lớn các trình giả lập thiết bị đầu cuối chạy trong X Windows có thể hiển thị 256 màu. Bên ngoài X, không rõ là có đa số.

ncurses có hợp lý giới thiệu thiết bị đầu cuối chính xác cho mỗi trong số này (và không có, sử dụng TERM=xterm-256color không phải là câu trả lời cho mỗi, vì các phím đặc biệt và các đặc điểm khác thường khác với xterm: FAQ Why not just use TERM set to "xterm"? cũng áp dụng cho xterm-256color).

Dưới đây là một bức ảnh chụp xterm chạy chương trình ncurses thử nghiệm (từ ncurses-examples) cho màu sắc rộng:

enter image description here

2

Một cặp màu trong ncurses thực sự là sự kết hợp giữa màu nền trước và màu nền. Bạn có thể thao tác chúng với color_pair (trang thủ công here). Có 32.768 kết hợp vì có 256 kết hợp cho nền trước và giống nhau cho nền, nhưng đếm màu đỏ + xanh (ví dụ) là màu xanh + đỏ, có 256x256/2 = 32,768 kết hợp.

Sau đó, bạn có thể sử dụng cặp tiền cảnh + nền với mẫu bàn cờ (ví dụ: ░░░░░░░░░░░░) để tạo nhiều màu hơn. Xem ví dụ here.

Tôi nghĩ có thể có một sự hiểu lầm vốn có trong câu hỏi của bạn. Từ trang hướng dẫn:

[Linux] thực hiện này sẽ trở lại ERR về những nỗ lực để sử dụng các giá trị màu bên ngoài phạm vi 0-COLORS-1 (trừ phần mở rộng màu mặc định), hoặc sử dụng cặp màu bên ngoài phạm vi 0 để COLOR_PAIR-1.

gì đó nói là bạn chỉ có thể sử dụng COLOR_PAIR cặp màu cùng một lúc (tức là có sẵn để sử dụng qua init_pair()) - tình hình thực hiện của bạn đó là 256. Bu Hiện vẫn còn 32.768 cặp màu - không phải tất cả cùng một lúc thông qua init_pair(). Đó là cách tôi hiểu nó.

+0

Đây không phải là những gì tôi hỏi về. Tôi biết rằng có 32k kết hợp màu sắc, đây không phải là câu hỏi về điều đó. Đó là một câu hỏi về biến COLOR_PAIRS, trong đó xác định có bao nhiêu cặp màu khác nhau được hỗ trợ. Mặc định là measly 256, và tôi đọc ở đâu đó rằng nó có thể được đặt thành 32k, nhưng tôi không biết làm thế nào. – redspah

+0

@redspah: Đọc lại câu trả lời này. –

+0

@LightnessRacesinOrbit Lemme cố gắng giải thích bản thân mình một lần nữa. Đây không phải là một câu hỏi về các cặp màu sắc có thể tự, đó là về việc tăng kích thước của bộ đệm chứa cặp được xác định với init_pair(). Ngay bây giờ, nó được đặt thành 256, có nghĩa là chỉ có 256 cặp màu được xác định tại bất kỳ thời điểm nào, và trong khi bạn được tự do xác định lại chúng, bạn sẽ không nhận được nhiều hơn 256 cặp. Tôi đang tìm một phương pháp để thay đổi kích thước của bộ đệm đó, để có thể đặt cho 32k cặp khác nhau được xác định cùng một lúc. – redspah

Các vấn đề liên quan