确定 bash tabcompletion 中的最终字符
Determine final character in bash tabcompletion
我想确定最后一个字符是否是 space。
$ mycli fl[TAB] # no space
flag flare
$ mycli flare [TAB] # yes space
A B C D
原因
如果是space,则使用每个参数来确定补全提示,但如果不是space,则使用前面的参数来确定补全提示到最后。我只需要知道在我用来计算完成度的 Python 脚本中采用哪条路线。
_mycli () {
COMPREPLY=();
local cur=${COMP_WORDS[COMP_CWORD]}
local opts=$(mycli tabcompletion $COMP_LINE)
COMPREPLY=($(compgen -W "${opts}" $cur))
return 0
}
complete -F _mycli -o bashdefault mycli
这可能超出了问题的范围,这是 Python 脚本的一部分。
@mycli.command()
@click.argument("arguments", nargs=-1, required=False)
def tabcompletion(arguments):
# Discard `mycli tabcompletion`
arguments = list(arguments)[2:]
complete = False
if ???:
complete = True
我希望以某种方式确定(???部分)论点是否已完成,或者是否为它提供完成。
space表示前一个单词的结束和新单词的开始。因此,cur
在第一种情况下为 fl
,在第二种情况下为空字符串。
在出现更好的东西之前,这就是我解决它的方法。
- 删除
$COMP_LINE
的最后一项
- 将项目传递给 Python 脚本
- 如果项目的长度为 1,则认为它是不完整的,例如恐龙[TAB]
- 否则,它将具有竞争词的长度,例如恐龙
例子
_be () {
COMPREPLY=();
local cur=${COMP_WORDS[COMP_CWORD]}
if [ ${COMP_CWORD} -ge 2 ]; then
if [ ${COMP_WORDS[1]} == "in" ]; then
local opts=$(be tab $COMP_LINE ${COMP_LINE: -1})
COMPREPLY=($(compgen -W "${opts}" $cur))
fi
fi
return 0
}
complete -F _be -o bashdefault be
我不是很了解,其中一个限制是我无法完成由单个字符组成的项目,这并不理想,但对于原型来说还可以。
我想确定最后一个字符是否是 space。
$ mycli fl[TAB] # no space
flag flare
$ mycli flare [TAB] # yes space
A B C D
原因
如果是space,则使用每个参数来确定补全提示,但如果不是space,则使用前面的参数来确定补全提示到最后。我只需要知道在我用来计算完成度的 Python 脚本中采用哪条路线。
_mycli () {
COMPREPLY=();
local cur=${COMP_WORDS[COMP_CWORD]}
local opts=$(mycli tabcompletion $COMP_LINE)
COMPREPLY=($(compgen -W "${opts}" $cur))
return 0
}
complete -F _mycli -o bashdefault mycli
这可能超出了问题的范围,这是 Python 脚本的一部分。
@mycli.command()
@click.argument("arguments", nargs=-1, required=False)
def tabcompletion(arguments):
# Discard `mycli tabcompletion`
arguments = list(arguments)[2:]
complete = False
if ???:
complete = True
我希望以某种方式确定(???部分)论点是否已完成,或者是否为它提供完成。
space表示前一个单词的结束和新单词的开始。因此,cur
在第一种情况下为 fl
,在第二种情况下为空字符串。
在出现更好的东西之前,这就是我解决它的方法。
- 删除
$COMP_LINE
的最后一项
- 将项目传递给 Python 脚本
- 如果项目的长度为 1,则认为它是不完整的,例如恐龙[TAB]
- 否则,它将具有竞争词的长度,例如恐龙
例子
_be () {
COMPREPLY=();
local cur=${COMP_WORDS[COMP_CWORD]}
if [ ${COMP_CWORD} -ge 2 ]; then
if [ ${COMP_WORDS[1]} == "in" ]; then
local opts=$(be tab $COMP_LINE ${COMP_LINE: -1})
COMPREPLY=($(compgen -W "${opts}" $cur))
fi
fi
return 0
}
complete -F _be -o bashdefault be
我不是很了解,其中一个限制是我无法完成由单个字符组成的项目,这并不理想,但对于原型来说还可以。