Nic*_*ich 7 python pip bash-completion
我在python中编写命令行工具并使用pip来分发它.我编写了一些脚本(一个用于bash,一个用于zsh)以允许工具完成选项卡.当有人进行pip安装时,有没有办法让pip安装这些脚本?
例如:我有一个completion.bash文件.有人的时候
pip安装mypackage
它还将获取bash文件.
我很确定我可以通过将脚本放在setup.py脚本的data_files部分中来为linux和bash执行此操作.
data_file=[
('/etc/bash_completion.d', ['bin/completion.bash'])
],
Run Code Online (Sandbox Code Playgroud)
但是我怎么能这样做,所以它是平台和shell独立的?我需要它在bash和zsh中为mac/linux工作.如果可能,甚至支持窗口.
这可能吗?如果是这样,怎么样?
如果重要,这是我的bash脚本:
_foo_complete() {
COMPREPLY=()
local words=( "${COMP_WORDS[@]}" )
local word="${COMP_WORDS[COMP_CWORD]}"
words=("${words[@]:1}")
local completions="$(foo completer --cmplt=\""${words[*]}"\")"
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
}
complete -F _foo_complete foo
Run Code Online (Sandbox Code Playgroud)
我目前正在通过运行来安装它 source completion.bash
您在问几个不同的问题。
首先,没有用于定义自定义 shell 完成的跨平台或跨 shell 解决方案。您发布的命令适用于 bash,但在 tcsh 中,例如,您使用 tcsh 的complete命令,其工作方式与 bash 不同。
其次,在当时获取包含这些完成定义的文件pip install不会有太大作用。补全可能在该会话中起作用,但您可能希望它们也在未来的会话(即 shell 调用)中生效。为此,每次 shell 启动时都必须获取您的文件(例如.bashrc,在 的情况下,从用户的 内部bash)。
这意味着“安装”您的文件只是意味着将它们放置在某个地方,并建议用户应该从各自的 dot-rc 文件中获取它们。即使可以,也不应该试图“强迫”它。如果您的用户愿意,可以让他们选择将其添加到他们的 dot-rc 文件中。
最好的方法可能是在你的包中包含每个支持的 shell 的完成定义文件,例如complete.bash、complete.tcsh、 ,天知道 Windows 的情况如何(抱歉,我不是 Windows 用户)。
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |