Как реализовать динамическое табулирование опций в оболочке Fish? - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу реализовать динамическое табулирование опций команды Fish.Это просто для переключателя -a, но я не могу понять, как это сделать для переключателя -l.

Рассмотрим следующие строки:

$ complete -c foo -a '(echo bar\nbaz\nbiz)' -f
$ complete -c foo -l '(echo bar\nbaz\nbiz)' -f

Тогда поведение моей оболочки будет следующим:

$ foo b<tab>
  bar  baz  biz

$ foo --<tab>
  foo --\(echo\ bar\\nbaz\\nbiz\) 

Вместо этого я хотел бы предложить три варианта --bar, --baz и --biz.Это возможно?

1 Ответ

1 голос
/ 26 апреля 2019

редактировать: теперь я понимаю лучше. Вы можете сделать это, просто начав свои «аргументы» с тире. Вот пример, который использует функцию для ясности:

function get_foo_completions
  echo --bar
  echo --baz
  echo --biz

  set prev_arg (commandline -pco)[-1]
  test "$prev_arg" = print
  and echo --conditional
end

complete -c foo -a '(get_foo_completions)' -f

Аргумент --conditional будет напечатан, только если предыдущий аргумент - print, который показывает, что они могут быть динамическими.

Насколько мне известно, это пока невозможно. Параметры являются декларативными, и только аргументы этих параметров могут быть динамическими.

Если вы дадите более подробную информацию о вашем случае использования, я мог бы предложить другие подходы.

...