0

我正在寻找确定最后一个字符是否是空格。

$ mycli fl[TAB]  # no space
flag flare
$ mycli flare [TAB]  # yes space
A B C D

原因

如果是空格,则每个参数用于确定完成提示,但如果不是空格,则前一个参数将用于确定最后一个完成提示。我只需要知道在我用来计算完成度的 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

我正在寻找以某种方式确定(???-部分)参数是否完成,或者是否提供完成。

4

2 回答 2

2

空格表示前一个单词的结尾和新单词的开头。因此,curfl在第一种情况下,在第二种情况下为空字符串。

于 2015-07-01T15:28:28.893 回答
0

在出现更好的事情之前,这就是我解决它的方法。

  1. 剥离最后一项$COMP_LINE
  2. 将项目传递给 Python 脚本
  3. 如果 item 的长度为 1,则假定它是不完整的,例如 dinosau[TAB]
  4. 否则,它将具有竞争词的长度,例如恐龙

例子

_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

我不完全理解它,其中一个限制是我无法完成由单个字符组成的项目,这并不理想,但对于原型来说还可以。

于 2015-07-01T15:33:09.043 回答