首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Picocli:如何始终显示标题/横幅

Picocli:如何始终显示标题/横幅
EN

Stack Overflow用户
提问于 2018-10-22 11:25:33
回答 2查看 354关注 0票数 2

Picocli提供了在@Command注释中添加一个很好的标题的能力,例如:

代码语言:javascript
复制
@Command(name = "git-star", header = {
    "@|green       _ _      _             |@", 
    "@|green  __ _(_) |_ __| |_ __ _ _ _  |@",
    "@|green / _` | |  _(_-<  _/ _` | '_| |@",
    "@|green \\__, |_|\\__/__/\\__\\__,_|_|   |@",
    "@|green |___/                        |@"},
    description = "Shows GitHub stars for a project",
    mixinStandardHelpOptions = true, version = "git-star 0.1")

如何在程序运行时始终显示标题/横幅,而不重复两个位置的标题/横幅?

(另见https://github.com/remkop/picocli/issues/517)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-22 11:25:33

这方面有两个方面:

  • 如何从应用程序中获取横幅文本?
  • 如何渲染ANSI的颜色和样式?

您可以使用new CommandLine(new App()).getCommandSpec().usageHelpMessage().header()或在应用程序中注入一个带有@Spec注释的CommandSpec字段,从而从使用帮助消息中获得横幅。

若要呈现ANSI样式,请对每行横幅使用CommandLine.Help.Ansi.AUTO.string(line)

把这一切结合在一起:

代码语言:javascript
复制
@Command(name = "git-star", header = {
        "@|green       _ _      _             |@", 
        "@|green  __ _(_) |_ __| |_ __ _ _ _  |@",
        "@|green / _` | |  _(_-<  _/ _` | '_| |@",
        "@|green \\__, |_|\\__/__/\\__\\__,_|_|   |@",
        "@|green |___/                        |@"},
        description = "Shows GitHub stars for a project",
        mixinStandardHelpOptions = true, version = "git-star 0.1")
class GitStar implements Runnable {

  @Option(names = "-c")
  int count;

  @Spec CommandSpec spec;

  // prints banner every time the command is invoked
  public void run() {

    String[] banner = spec.usageHelpMessage().header();

    // or: String[] banner = new CommandLine(new GitStar())
    //        .getCommandSpec().usageHelpMessage().header();

    for (String line : banner) {
      System.out.println(CommandLine.Help.Ansi.AUTO.string(line));
    }

    // business logic here...
  }

  public static void main(String[] args) {
    CommandLine.run(new GitStar(), args);
  }
}
票数 3
EN

Stack Overflow用户

发布于 2021-01-09 23:07:28

在Picocli 4.5.2中,我的作品是这样的:

代码语言:javascript
复制
public void run() {
    CommandLine cmd = new CommandLine(new App());
    cmd.usage(System.out, Ansi.ON);

    // business logic here...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52928235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档