Совпадение только с действительными символами UTF-8 - PullRequest
0 голосов
/ 19 апреля 2020

Я пишу приложение ncurses с Rust.

Когда пользователь вводит действительный символ UTF-8 (например, ć или несколько азиатских букв), я хочу создать строку поиска из это и распечатать его на экран. В настоящее время у меня есть это:

use ncurses::*;

fn main() {
    ...
    let mut search_string = String::new();
    ...
    loop {
        let user_input = getch();
        match user_input {
            27 => break,
            KEY_UP => { ... },
            KEY_DOWN => { ... },
            KEY_BACKSPACE => { ... },
            _ => {
                search_string += &std::char::from_u32(user_input as u32).expect("Invalid char.").to_string();
                mvaddstr(0, 0, &search_string);
                app::autosearch();
            }
        }
    }
}

Однако, это ловит все другие ключи, такие как F5, KEY_LEFT, и т. Д. c.

Как я могу сопоставить только действительный UTF -8 букв?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

В C вы можете вызвать get_wch() вместо getch() - он возвращает KEY_CODE_YES для кодов KEY_ *, в то время как фактический ключ сохраняется по адресу, переданному в качестве параметра. Но я не знаю, как это переводится на Rust.

0 голосов
/ 19 апреля 2020

Если getch дает вам u8, вы можете собрать последующие нажатия клавиш в Vec<u8> и затем вызвать, например, from_utf8 для каждого getch, обработав ошибку соответствующим образом ( см. Utf8Error для получения дополнительной информации).

...