如何使用 ANSI 转义码计算 CLI 提示符的显示宽度?
How to compute the display width of a prompt on the CLI with ANSI escape codes?
一个简单的实现:
extern crate unicode_width;
fn main () {
let prompt = "\x1b[1;32m>>\x1b[0m ";
println!("{}", unicode_width::UnicodeWidthStr::width(prompt));
}
returns 12
但 3
是预期的。
如果有的话,我也很乐意使用已经做到这一点的板条箱。
您不会使用 Unicode 宽度计算获得转义序列的宽度,仅仅是因为字符串的 none 是可打印的——在终端上。
如果控制字符串的内容,可以通过
计算宽度
- 正在将字符串复制到临时变量
- 将转义序列替换为空字符串,例如,更改以
\x1b
开头的模式,允许 [
、]
、<
、[= 的任意组合15=]'、=
、?
、;
或十进制数字 到 [=19= 范围内的 "final" 个字符] 至 ~
- 测量剩下的(如果有的话)的长度。
在你的例子中
let prompt = "\x1b[1;32m>>\x1b[0m ";
只剩下 ">> "
待测量。
对于模式...您可以从这里开始:Regex
进一步阅读:
- crate Regex
- 17.3 Strings,通过示例生锈
一个简单的实现:
extern crate unicode_width;
fn main () {
let prompt = "\x1b[1;32m>>\x1b[0m ";
println!("{}", unicode_width::UnicodeWidthStr::width(prompt));
}
returns 12
但 3
是预期的。
如果有的话,我也很乐意使用已经做到这一点的板条箱。
您不会使用 Unicode 宽度计算获得转义序列的宽度,仅仅是因为字符串的 none 是可打印的——在终端上。
如果控制字符串的内容,可以通过
计算宽度- 正在将字符串复制到临时变量
- 将转义序列替换为空字符串,例如,更改以
\x1b
开头的模式,允许[
、]
、<
、[= 的任意组合15=]'、=
、?
、;
或十进制数字 到 [=19= 范围内的 "final" 个字符] 至~
- 测量剩下的(如果有的话)的长度。
在你的例子中
let prompt = "\x1b[1;32m>>\x1b[0m ";
只剩下 ">> "
待测量。
对于模式...您可以从这里开始:Regex
进一步阅读:
- crate Regex
- 17.3 Strings,通过示例生锈