add bash-comp-tut (ru)

This commit is contained in:
arcan1s
2014-07-18 00:05:48 +04:00
parent 79059122a0
commit b2904998b8
2 changed files with 146 additions and 7 deletions

View File

@ -17,7 +17,7 @@ description: В данных статьях описываются некото
<p>Рассмотрим на примере моего же приложения, часть справки к которому выглядит таким образом:</p>
{% highlight bash %}
netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FILE ]
[ -o PROFILE | --open PROFILE ] [ -t NUM | --tab NUM ] [ --set-opts OPTIONS ]
[ -o PROFILE | --open PROFILE ] [ -t NUM | --tab NUM ] [ --set-opts OPTIONS ]
{% endhighlight %}
<p>Список флагов:
@ -35,7 +35,7 @@ netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FI
<p>В заголовке должно быть обязательно указано, что это файл дополнений и для каких приложений он служит (можно строкой, если в файле будет содержаться дополнение для нескольких команд):
{% highlight bash %}
#compdef netctl-gui
#compdef netctl-gui
{% endhighlight %}
Дальше идет описание флагов, вспомогательные функции и переменные. Замечу, что функции и переменные, которые будут использоваться для дополнения <b>должны возвращать массивы</b>, а не строки. В моем случае схема выглядит примерно так (все функции и переменные в этой главе умышленно оставлены пустыми):
@ -45,14 +45,14 @@ netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FI
_netctl_gui_arglist=()
_netctl_gui_settings=()
_netctl_gui_tabs=()
_netctl_profiles() {}
_netctl_profiles() {}
{% endhighlight %}
Затем идут основные функции, которые будут вызываться для дополнения для определенной команды. В моем случае команда одна, и функция одна:
{% highlight bash %}
# work block
_netctl-gui() {}
_netctl-gui() {}
{% endhighlight %}
Далее <b>без выделения в отдельную функцию</b> идет небольшое шаманство, связанное с соотнесением приложения, которое было декларировано в первой строке, с функцией в теле скрипта:
@ -62,7 +62,7 @@ case "$service" in
netctl-gui)
_netctl-gui "$@" && return 0
;;
esac
esac
{% endhighlight %}
</p>
@ -79,7 +79,7 @@ _netctl_gui_arglist=(
{'(--open)-o','(-o)--open'}'[open profile]:select profile:->profiles'
{'(--tab)-t','(-t)--tab'}'[open a tab with specified number]:select tab:->tab'
{'--set-opts','--set-opts'}'[set options for this run, comma separated]:comma separated:->settings'
)
)
{% endhighlight %}
</p>
@ -141,6 +141,6 @@ _netctl-gui() {
</p>
<h2><a name="conclusion" class="anchor" href="#conclusion"><span class="octicon octicon-link"></span></a>Заключение</h2>
<p>Файл хранится в директории <code>/usr/share/zsh/site-functions</code> с произвольным в общем-то именем с префиксом <code>_</code>. Файл примера полностью может быть найден <a href="https://raw.githubusercontent.com/arcan1s/netctl-gui/master/sources/gui/zsh-completions">в моем репозитории</a>.</p>
<p>Файл хранится в директории <code>/usr/share/zsh/site-functions/</code> с произвольным, в общем-то, именем с префиксом <code>_</code>. Файл примера полностью может быть найден <a href="https://raw.githubusercontent.com/arcan1s/netctl-gui/master/sources/gui/zsh-completions">в моем репозитории</a>.</p>
<p>Дополнительная информация может быть найдена в репозитории <a href="https://github.com/zsh-users/zsh-completions">zsh-completions</a>. Например, там есть такой <a href="https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org">How-To</a>. А еще там есть много примеров.</p>