Tôi đang phát triển ứng dụng Ncurses sử dụng bảng màu riêng của mình qua init_color()
(giả sử can_change_colors()
trả về không khác). Nếu COLORS
nhỏ hơn 256, tôi chỉ sửa đổi 8 màu đầu tiên (giả sử COLORS
ít nhất là 8). Nếu không, tôi sửa đổi tối đa 256 đầu tiên.Làm cách nào để có được bảng màu đầu cuối ban đầu, tốt nhất là sử dụng các thủ tục ncurses?
Yêu cầu tài liệu ncurses
gọi endwin()
trên stdscr
sẽ đặt lại bảng màu. Tuy nhiên, trong Gnome-terminal, tôi không thấy bảng màu được khôi phục bởi Ncurses. Thay vào đó, bất kỳ bảng màu nào tôi sử dụng lần cuối được thực hiện ngoài ứng dụng của tôi. Câu hỏi đầu tiên của tôi, sau đó, là lý do tại sao bảng màu không được khôi phục đúng cách (mọi thứ khác - vị trí con trỏ, văn bản màn hình, v.v ...).
Tôi có thể giải quyết vấn đề này (tôi biết điều này đã có vấn đề) bằng cách mua bảng màu khi khởi động và khôi phục bảng theo cách thủ công. Tôi đang cố thực hiện điều này với vòng lặp color_content()
sau khi gọi thành công đến start_color()
. Thật không may, điều này dường như trả về bảng mặc định ncurses, không phải bảng màu thực sự đang được sử dụng (được thử nghiệm với bảng mặc định của Gnome-terminal, và một bảng Solarized đã được cấu hình). Tôi đã xác minh điều này bằng cách kiểm tra các giá trị trong ncurses/base/lib_color.c
từ các nguồn ncurses-5.9 của Debian.
Vì vậy:
Tại sao không phải là bảng khôi phục bằng một cuộc gọi thành công đến
endwin(stdscr)
?Làm cách nào để có được bảng màu "đúng" khi khởi động? Ncurses được ưa thích, nhưng thậm chí cả Unix-hoặc thậm chí Linux cụ thể
ioctl()
s sẽ đủ cho bây giờ.
Có thể tìm thấy mã có liên quan on Github. Có gì hiện tại có thể không khớp chính xác với những gì tôi đã mô tả ở trên, vì tôi đã thử nghiệm các kỹ thuật khác nhau mà không thành công.
Bạn đã thử điều này trong các trình mô phỏng thiết bị đầu cuối khác như xterm hoặc bàn điều khiển để xác nhận bạn không chỉ nhìn thấy hành vi không chính xác từ gnome-terminal? –
Vì vậy, với tiền thưởng hết hạn ngày hôm nay, tôi đã đi trước và thực hiện một số nguồn lặn kỹ lưỡng. Tôi tin rằng tôi có câu trả lời (thay vì chán nản): –