rust 如何让clap将长帮助消息打包?

3ks5zfa0  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(319)

以下是一个示例:

extern crate clap;
use clap::{Arg, App};

fn main() {
let args = App::new("test")
    .arg(Arg::with_name("scoring_method")
            .short("s")
            .long("scoring-method")
            .help("Very very very very very very long long long long long help help help help help message message message message message message message"))
    .get_matches();
}

导致帮助文本格式如下:

(在程式码模式中贴上会造成堆栈溢出,以修正格式问题)
生成的确切字符串为:

'USAGE:\n    play [FLAGS]\n\nFLAGS:\n    -h, --help              Prints help information\n    -s, --scoring-method    Very very very very very very long long long long long help help help help help message\n                            message message message message message message\n    -V, --version           Prints version information'
0dxa2lsx

0dxa2lsx1#

Clap有一个max_term_width,它用它来 Package 输出的文本。正如该文档中提到的,它默认为120个字符,这就是为什么你会看到文本最终被分割,但不是你希望的地方。
如果你想设置一个特定的宽度,你可以使用set_term_width来设置一个特定的值,或者,你可以使用一个类似terminal_size的crate来获取当前终端的大小,然后用它来设置clap要使用的宽度。
完整示例:

extern crate clap;
extern crate terminal_size;

use clap::{App, Arg};
use terminal_size::{terminal_size, Width};

fn main() {
    let args = App::new("test")
    .set_term_width(if let Some((Width(w), _)) = terminal_size() { w as usize } else { 120 })
    .arg(Arg::with_name("scoring_method")
      .short("s")
      .long("scoring-method")
      .help("Very very very very very very long long long long long help help help help help message message message message message message message"))
    .get_matches();
}
iyzzxitl

iyzzxitl2#

现在(Clap v4.0.26)你可以启用wrap_help特性,这在内部依赖于terminal_size

相关问题