Разделитель завершения ZSH

Столкнулся со следующей ситуацией. У меня есть записи автозаполнения, подобные этим:

server:install
server:lint
...

Они должны быть завершены с помощью zsh. На самом деле мой метод завершения работает довольно хорошо, пока я заменяю двоеточия символами подчеркивания или чем-то другим, поскольку ZSH (или, лучше, функция _describe) будет использовать двоеточия в качестве разделителя.

Вы можете увидеть это в этом примере:

local -a subcmds topics
subcmds=('c:description for c command' 'd:description for d command')
topics=('e:description for e help topic' 'f:description for f help topic')
_describe 'command' subcmds -- topics

Однако это не то, чего я хочу. Я действительно хочу, чтобы эти двоеточия были в записях автозаполнения.

Итак, мой вопрос: могу ли я как-то избежать двоеточия, чтобы ZSH заметил, что мое двоеточие не является разделителем для описания, или изменить разделитель на что-то отличное от двоеточия?

На данный момент завершение выглядит так:

#compdef mycmd

local -a completions
completions=$(complete_me 2>/dev/null)
result=$(echo "$completions" | sed "s/:/_/g") # This line should be removed
lines=("${(f)result}")
_describe 'command' lines

Все это более или менее скопировано вместе с разных сайтов. Так что, наверное, я просто пропустил довольно простой вариант - но я просто не могу его найти -.-.

Может кто-то помочь мне с этим?

Спасибо, Матиас


person user1050133    schedule 19.02.2019    source источник


Ответы (1)


Грмл - это был простой ответ. _describe (как следует из названия) всегда ожидает описания. Замена его на compadd просто работает:

compadd $lines

Может быть, таких глупых, как я, больше :D - так что я оставлю это здесь...

person user1050133    schedule 19.02.2019