Suckless 的 st 有时会搞乱 UTF-8

Suckless 的 st 有时会搞乱 UTF-8

我用 Rust 编写了一个 echo 程序(可以处理 UTF-8),有时 st 似乎会弄乱 UTF-8 输入。我尝试过不同的终端模拟器,例如 alacritty 和 gnome-terminal,它们工作正常。

要重现这一点:

  • 在 st 中运行以下 Rust 代码:
use std::io::BufRead;

fn main() {
    for line in std::io::stdin().lock().lines() {
        let line = line.unwrap();
        println!("{line}");
    }
}
  • 输入“Rückgängig”或其他包含非英语字符的字符串。

一段时间后,程序应该失败:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }', src/main.rs:5:25

有谁知道如何解决此问题或为什么会发生这种情况?

答案1

Backspace在输入这些单词时可能会按下按键吗?

执行cat,键入带有重音字母的内容,按Backspace几次(至少跨过一个重音字母),然后按Enter。你得到同样的回应吗?我不。

看起来st没有设置IUTF8标志。虽然它会删除屏幕上的整个字母,但只有 UTF-8 序列的最后一个字节会从内核的熟模式 tty 缓冲区中删除。

该命令应该可以解决这个问题,但如果编码是 UTF-8,stty iutf8正确的位置应该是st执行相应的调用,就像其他终端模拟器所做的那样。tcsetattr(<IUTF8>)

相关内容