在picocli中完成位置参数的候选人

时间:2019-04-05 08:05:17

标签: positional-parameter picocli

我正在尝试提供位置参数的完整信息。 我发现在某个地方注意到它们的支持不是很好,但是目前我无法在规范中找到确切的位置,而且我不确定这到底意味着什么。

同时,我在源代码中找到了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
  • 将索引输入参数

1 个答案:

答案 0 :(得分:0)

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

有一个出色的todo item可以解决此问题。有人提供了一个pull request来解决此问题,但是它存在问题,尚未合并。

欢迎捐款!