mirror of
https://github.com/arcan1s/arcanis.me.git
synced 2025-07-16 14:29:55 +00:00
add bash-comp-tut (ru)
This commit is contained in:
@ -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>
|
||||
|
Reference in New Issue
Block a user