gpt4 book ai didi

rust - 如何使用 ncurses crate 显示方框图字符?

转载 作者:行者123 更新时间:2023-12-03 11:30:59 25 4
gpt4 key购买 nike

我正在使用 Rust 和 ncurses 编写应用程序。

我正在尝试显示一个方框图字符('┃'(Unicode 9475/0x2503)),但就好像它甚至没有打印到屏幕上一样。当我选择文本时,可以看到:

Screenshot

这是一个最小的例子:

use ncurses::*;

fn populate_line_numbers() {
for i in 0..LINES() {
mvaddstr(i, 0, &i.to_string());
}
mvvline(0, 4, 9475, LINES());
refresh();
}

fn main() {
setlocale(LcCategory::all, "");
initscr();
start_color();
keypad(stdscr(), true);
noecho();
loop {
let user_input = get_wch();
match user_input.unwrap() {
WchResult::Char(ch) => {
match ch {
27 => break,
_ => {
addstr(&std::char::from_u32(ch).unwrap().to_string());
refresh();
}
}
},
WchResult::KeyCode(code) => {
match code {
KEY_F5 => {
populate_line_numbers();
},
_ => {}
}
}
}
}
endwin();
}

按 F5 使程序显示行号。

字符怎么能像普通文本一样?我尝试将它与一堆东西一起使用,但没有任何结果。

cargo .toml
[dependencies]
ncurses = { version = "5.99.0", features = ["wide"] }

最佳答案

Author's note: The following is a best-effort analysis based mostly on examining ncurses.h on my system and comparing it to the source code of ncurses-rs. I may be wrong in some particulars.



在 ncurses 中, chtype类型别名( mvvline 的第三个参数)表示一个单字节字符加上一些外观元数据。它不能存储多字节字符。所以 mvvline根本无法显示 .

(可能你得到一条不可见线的原因是因为值 9475 表示具有一些虚假外观信息的控制字符。我无法弄清楚如何解码它。如果你摆弄字节值我确保您可以让该行更改颜色并包含您想要的任何 ASCII 字符。)

要使用“宽”(多字节)字符画线,您必须链接到支持宽字符的 ncurses 版本,并使用 mvvline 的宽字符版本。 ,它似乎被称为 mvvline_set .这个函数需要一个 const cchar_t *参数而不是 chtype , 其中 cchar_t是一个包含多字节字符和一些元数据的结构。

不幸的是,尽管 ncurses crate 确实链接到正确版本的 ncurses 库,但它并没有公开任何调用 mvvline_set 的方法。 . ncurses-rs API 还缺少许多其他函数,主要是使用 cchar_t 的函数。结构。这意味着您将无法在面向字符的 ncurses 函数中使用 Unicode 画线字符,除非您自己编写绑定(bind)。

您应该仍然能够在 UTF-8 字符串中使用多字节字符并将它们传递给面向字符串的函数,例如 mvaddstr .

关于rust - 如何使用 ncurses crate 显示方框图字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61461447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com