1

我正在尝试为位置参​​数提供补全。在某个地方我发现它们没有得到很好的支持,但目前我无法在规范中找到确切的位置,我不确定这真正意味着什么。

与此同时,我在来源中发现了 CompletionCandidatesTest.java,这表明它们以某种方式受到支持,或者至少准备支持它。

这就是为什么我想知道它们是否有效,如果有效,我做错了什么。目前我在 Groovy 中的代码如下所示:

package com.some.package


import picocli.CommandLine
import picocli.CommandLine.Command

@Command
class TjTest implements Runnable {

    static class TjTestCandidates implements Iterable<String> {
        @Override
        Iterator<String> iterator() {
            return Arrays.asList("aaaa", "bbbb", "cccc", "dddd", "eeeee", "ffff").iterator()
        }
    }

    @CommandLine.Option(names = "-x", completionCandidates = TjTestCandidates)
    String x;

    @CommandLine.Parameters(completionCandidates = TjTestCandidates)
    String param;


    @Override
    public void run() {
        println "Start"
        println x
        println param;
        println "Stop"
    }

    public static void main(String[] args) {
        CommandLine.run(new TjTest(), args);
    }

}

我执行了如下所需的 bash 命令:

java -cp "picocli-3.9.5.jar;tj.jar" picocli.AutoComplete -f -n tjtest com.some.package.TjTest
. tjtest_completion

它就像一个选项的魅力。不幸的是,我无法使其适用于参数。我也试图:

  • 删除 @Option 并仅保留 @Parameters
  • 将索引放入参数
4

1 回答 1

0

你的代码看起来不错。当前状态(picocli 3.9.5)是位置参数完成在JLine中有效,但在 bash/zsh 中无效。

有一个出色的待办事项可以解决此问题。有人提供了一个拉取请求来解决这个问题,但它有一个问题并且没有被合并。

欢迎投稿!

于 2019-04-05T12:36:12.970 回答