2

HTTPie 接受路径作为带有包含@符号的选项的参数。不幸的是,它们似乎不适用于fish. 相反,该选项被视为不透明的字符串。

为了坚持使用HTTPie 文档中的文件上传示例,文件位于~/files/data.xml,我希望能够在键入时通过制表符完成文件名:

http -f POST pie.dev/post name='John Smith' cv@~/files/da<TAB>

但是,没有提供完成。

我已经安装了来自fishHTTPie 项目的补全,它们适用于短论和长论。该文件没有指定如何完成@参数。

此外,我研究了指定自己的完成,但我无法找到一种方法来使用任意前缀来处理文件完成。

如何为 HTTPie 的这些路径参数实现补全?

4

2 回答 2

1

目前,HTTPie 的鱼补全没有使用 @ 的文件路径参数的补全。关于这个,有一个更一般的GitHub 问题开放

如果这是您想为自己或项目做的事情,您可能可以从实现您想要的行为的 zsh+ohmyzsh的HTTPie 插件中为 fish 实现获得一些灵感。

于 2021-05-14T15:29:31.923 回答
0

我设法让路径参数的制表符完成,但需要注意一些警告。

这增加了完成:

complete -c http --condition "__is_httpie_path_argument" -a "(__complete_httpie_path_argument (commandline -t))"

具有以下功能:

function __is_httpie_path_argument
    set -l arg (commandline -t)
    __match_httpie_path_argument --quiet -- $arg
end

function __match_httpie_path_argument
    string match --entire --regex '^([^@:=]*)(@|=@|:=@)(.*)$' $argv
end

function __complete_httpie_path_argument
    __complete_httpie_path_argument_helper (__match_httpie_path_argument -- $argv[1])
end

function __complete_httpie_path_argument_helper
    set -l arg $argv[1]
    set -l field $argv[2]
    set -l operator $argv[3]
    set -l path $argv[4]

    string collect $field$operator(__fish_complete_path $path)
end

需要注意的是,这不会扩展任何变量或波浪号~。它基本上只适用于普通路径——相对或绝对。

于 2021-05-15T18:04:36.087 回答