Способна ли система завершения ZSH выполнять несколько аргументов одновременно? - PullRequest
1 голос
/ 03 ноября 2019

Сценарий:

Допустим, скрипт my_online_searcher <query> открывает браузер с поиском query, где query может содержать несколько слов. Этот же скрипт также предоставляет служебный флаг -s <query>, который отображает предложения поисковой системы. Например:

$ my_online_searcher -s lion rema
lion remake
lion remake cast
lion remake zoo tycoon 2
lion remake zt2
remake lion king
remastered lion's share
remake lion king 2019
remastered lion king
remake lion king trailer
remaking lion king

Желаемый результат:

Пользователь наберет $ my_online_searcher lion rema[TAB], и в меню завершения ZSH появятся указанные выше параметры.

Попытки достичь желаемого результата:

Создать небольшой скрипт завершения _my_online_searcher, который в значительной степени вызывает функцию поддержки my_online_search -s <query> для выдачи опций. Что-то вроде:

[...]
completions=(${(f)"$(my_online_searcher -s ${arg} ${words:2})"})
_describe 'suggestions' completions
[...]

Это позволяет экранировать пробелы и позволяет ZSH видеть query в качестве единственного аргумента.

Однако завершение для каждого слова не позволяетпрогрессивное завершение предложений. Либо он повторяет предыдущие слова, либо отфильтровывает предложения, которые не начинаются с первых аргументов (например, $ my_online searcher lion rema[TAB] -> $ my_online_searcher lion remake lion king).

Одной из идей было изменение LBUFFER внутри скрипта завершения,Это оказалось недопустимым, поскольку ZSH выдает ошибку, что LBUFFER только для чтения

TL; DR:

Возможно ли, чтобы система завершения ZSH видела всеаргументы после команды как модифицируемый аргумент? Другими словами, могу ли я предложить дополнения к нескольким аргументам одновременно в ZSH?

...