Сценарий:
Допустим, скрипт 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?