繁体   English   中英

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

[英]How to display a box drawing character using the ncurses crate?

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

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

截屏

这是一个最小的例子:

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使程序显示行号。

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

货运.toml

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

作者注:以下是最大努力的分析,主要基于检查我系统上的 ncurses.h 并将其与ncurses-rs的源代码进行比较。 我可能在某些细节上是错误的。

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

(可能你得到一条不可见线的原因是因为值9475代表一个带有一些虚假外观信息的控制字符。我无法弄清楚如何解码它。如果你摆弄字节值,我相信你可以获取更改 colors 并包含您想要的任何 ASCII 字符的行。)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM