Terminal 如何使用ANSI转义码计算CLI上提示的显示宽度?
一个简单的实现:Terminal 如何使用ANSI转义码计算CLI上提示的显示宽度?,terminal,rust,posix,readline,Terminal,Rust,Posix,Readline,一个简单的实现: extern crate unicode_width; fn main () { let prompt = "\x1b[1;32m>>\x1b[0m "; println!("{}", unicode_width::UnicodeWidthStr::width(prompt)); } 返回12,但应返回3 我也很乐意使用一个已经这样做的板条箱,如果有的话。您不会使用Unicode宽度计算得到转义序列的宽度,因为没有一个字符串可以在终端上打印 如果
extern crate unicode_width;
fn main () {
let prompt = "\x1b[1;32m>>\x1b[0m ";
println!("{}", unicode_width::UnicodeWidthStr::width(prompt));
}
返回12
,但应返回3
我也很乐意使用一个已经这样做的板条箱,如果有的话。您不会使用Unicode宽度计算得到转义序列的宽度,因为没有一个字符串可以在终端上打印 如果控制字符串的内容,则可以通过
- 将字符串复制到临时变量
- 将转义序列替换为空字符串,例如,更改以
开头的模式,允许\x1b
,[
,]
,
,=
,?
的任意组合从
到@
~
- 测量剩下的东西(如果有的话)的长度
let prompt = "\x1b[1;32m>>\x1b[0m ";
只有“>>”
需要测量
对于模式。。。你可以从这里开始:
进一步阅读:
- ,举例说明