Сбой compadd во время сценария завершения optparse-applicative zsh

Поэтому я не совсем уверен, что это что-то не так со сценарием optparse-applicative или я использую его неправильно.

В readme optparse-applicative говорится, что программы доступны со сценариями автоматического завершения, с опциями для zsh. Для моей программы setup:

$> setup --zsh-completion-script `which setup`

Выходы:

#compdef setup

local request
local completions
local word
local index=$((CURRENT - 1))

request=(--bash-completion-enriched --bash-completion-index $index)
for arg in ${words[@]}; do
  request=(${request[@]} --bash-completion-word $arg)
done

IFS=$'\n' completions=($( /Users/anrothan/.local/bin/setup "${request[@]}" ))

for word in $completions; do
  local -a parts

  # Split the line at a tab if there is one.
  IFS=$'\t' parts=($( echo $word ))

  if [[ -n $parts[2] ]]; then
     if [[ $word[1] == "-" ]]; then
       local desc=("$parts[1] ($parts[2])")
       compadd -d desc -- $parts[1]
     else
       local desc=($(print -f  "%-019s -- %s" $parts[1] $parts[2]))
       compadd -l -d desc -- $parts[1]
     fi
  else
    compadd -f -- $word
  fi
done

Я запускаю следующее в своем zshrc (я использую oh-my-zsh, но я удалил его, и это все еще происходит в минимальной конфигурации с небольшим добавлением PATH для получения сценария setup).

autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
source <(setup --zsh-completion-script `which setup`)

Я получаю следующую ошибку несколько раз:

/dev/fd/11:compadd:24: can only be called from completion function

Я запустил compinit, и мне кажется, что сценарий завершения выглядит правильно, и я огляделся, но не могу понять, почему происходит эта ошибка...


person Anrothan    schedule 12.01.2019    source источник


Ответы (1)


Вам не нужно создавать сценарии завершения zsh, их просто нужно добавить в ваш параметр fpath.

Так что просто поместите вывод setup --zsh-completion-script $(which setup) в файл с вызовом _setup в $HOME/.config/zsh/completions.

fpath=($HOME/.config/zsh/completions $fpath)
autoload -U compinit && compinit
person Huw    schedule 18.05.2020
comment
Похоже, ваше форматирование могло быть испорчено. Не возражаете ли вы переоценить его и убедиться, что ссылки на встроенный код помечены back ticks? - person Jeremy Caney; 18.05.2020