Shell 完成取决于已提供的参数

问题描述 投票:0回答:1

我想知道是否可以使用 Click 8 来实现 shell 完成,这可能取决于之前在命令行上指定的命令、选项和参数。然而,我发现

ctx.params
不包括它们。无论如何,请考虑以下示例。

./foo.py --global-opt foo my_command --command-opt <TAB>

我想知道如何根据

--command-opt
的值(回调,即全局选项)来完成
--global-opt
的制表符补全。理想情况下,可以先对
--global-opt
进行常规处理,然后再对
--command-opt
进行 shell 补全。

事实上,一位维护者告诉我这是可能的,但他没有解释如何做到。任何建议或例子将不胜感激。

python click command-line-interface
1个回答
0
投票

我认为点击中没有合适的解决方案。 github上有关于此的问题12,没有任何回复。

您可以自己实现(部分)命令行解析并使用 click 的完成功能:

def _shell_complete_greeted(ctx, args, incomplete):
    comp_words = os.environ['COMP_WORDS'].split('\n') # potentially unsafe...
    idx = comp_words.index('--global-opt')
    global_opt_val = None
    if 0 < idx < len(comp_words):
        global_opt_val = comp_words[idx + 1]

    # Compute options based on global_opt_val
    # ...

    return options

当然,您必须手动完成所有解释并检查单击是否适合您。

© www.soinside.com 2019 - 2024. All rights reserved.