diff --git a/_includes/footer_sign.html b/_includes/footer_sign.html index 0f23c50..b1e71a5 100644 --- a/_includes/footer_sign.html +++ b/_includes/footer_sign.html @@ -1,16 +1,20 @@
{% if page.category == "ru" %}
- {% if page.type == "paper" %}
+ {% if page.hasTr == true %}
+ {% if page.type == "paper" %}
- {% else %}
+ {% else %}
+ {% endif %}
{% endif %}
Расположено на GitHub Pages. Авторы
{% else %}
- {% if page.type == "paper" %}
+ {% if page.hasTr == true %}
+ {% if page.type == "paper" %}
- {% else %}
+ {% else %}
+ {% endif %}
{% endif %}
Hosted on GitHub Pages. Authors
{% endif %}
diff --git a/_posts/2014-01-14-about-zshrc.html b/_posts/2014-01-14-about-zshrc.html
index f696c3e..ab34b1d 100644
--- a/_posts/2014-01-14-about-zshrc.html
+++ b/_posts/2014-01-14-about-zshrc.html
@@ -2,6 +2,7 @@
category: en
type: paper
layout: paper
+hasTr: true
tags: zshrc, configuration, linux
title: About zshrc
short: about-zshrc
diff --git a/_posts/2014-01-21-building-qutim-using-qt5.html b/_posts/2014-01-21-building-qutim-using-qt5.html
index 7c1d2ee..a570e60 100644
--- a/_posts/2014-01-21-building-qutim-using-qt5.html
+++ b/_posts/2014-01-21-building-qutim-using-qt5.html
@@ -2,6 +2,7 @@
category: en
type: paper
layout: paper
+hasTr: true
tags: archlinux, linux, building, qutim
title: Building Qutim using Qt5
short: building-qutim-using-qt5
@@ -80,7 +81,7 @@ diff -ruN qutim.orig/core/libqutim.qbs qutim/core/libqutim.qbs
+ flags = flags.concat("-lc++abi");
return flags;
}
-
+
{% endhighlight %}
And the second one is Vk plugin:
{% highlight diff %} @@ -92,7 +93,7 @@ diff -ruN qutim.orig/protocols/vkontakte/vreen/vreen.qbs qutim/protocols/vkontak property string vreen_lib_path: "lib" property string vreen_libexec_path: "lib" + property string lib_path: "lib" - + property string vreen_version_major: 1 property string vreen_version_minor: 9 {% endhighlight %} @@ -162,7 +163,7 @@ prepare() { rm -rf "${srcdir}/build" fi mkdir "${srcdir}/build" - + cd "${_gitname}" # update modules git submodule update --init --recursive diff --git a/_posts/2014-03-06-site-changes.html b/_posts/2014-03-06-site-changes.html index 17117e9..c4a6245 100644 --- a/_posts/2014-03-06-site-changes.html +++ b/_posts/2014-03-06-site-changes.html @@ -2,6 +2,7 @@ category: en type: paper layout: paper +hasTr: true tags: site, github pages title: Site changes short: site-changes diff --git a/_posts/2014-03-23-creating-custom-repo.html b/_posts/2014-03-23-creating-custom-repo.html index 9749208..771086c 100644 --- a/_posts/2014-03-23-creating-custom-repo.html +++ b/_posts/2014-03-23-creating-custom-repo.html @@ -2,6 +2,7 @@ category: en type: paper layout: paper +hasTr: true tags: archlinux, configuration, linux title: Creating own repository short: creating-custom-repo diff --git a/_posts/2014-04-18-loveless.html b/_posts/2014-04-18-loveless.html index 19f934a..d8133fc 100644 --- a/_posts/2014-04-18-loveless.html +++ b/_posts/2014-04-18-loveless.html @@ -2,6 +2,7 @@ category: en type: paper layout: paper +hasTr: true tags: offtop title: Loveless short: loveless diff --git a/_posts/2014-05-07-my-desktop.html b/_posts/2014-05-07-my-desktop.html index 2e29850..f909edb 100644 --- a/_posts/2014-05-07-my-desktop.html +++ b/_posts/2014-05-07-my-desktop.html @@ -2,6 +2,7 @@ category: en type: paper layout: paper +hasTr: true tags: настройка, linux, archlinux title: Apps which I use short: my-desktop diff --git a/_posts/2014-05-18-disabling-baloo.html b/_posts/2014-05-18-disabling-baloo.html index f9a2258..b36999f 100644 --- a/_posts/2014-05-18-disabling-baloo.html +++ b/_posts/2014-05-18-disabling-baloo.html @@ -2,6 +2,7 @@ category: en type: paper layout: paper +hasTr: true tags: linux, archlinux, building title: Disabling baloo, gentoo-way short: disabling-baloo diff --git a/about.html b/about.html index ea696a5..1036431 100644 --- a/about.html +++ b/about.html @@ -3,6 +3,7 @@ layout: default comment: false share: true back: 1 +hasTr: true title: About me --- diff --git a/authors.html b/authors.html index b32d5e3..cc4148a 100644 --- a/authors.html +++ b/authors.html @@ -3,6 +3,7 @@ layout: default comment: false share: false back: 2 +hasTr: true title: Authors --- diff --git a/blog/archive.html b/blog/archive.html index cb2c5c6..09647e2 100644 --- a/blog/archive.html +++ b/blog/archive.html @@ -4,6 +4,7 @@ title: Archive comment: false share: false back: 2 +hasTr: true ---И пофиксить сборку библиотеки для Vk:
{% highlight diff %} @@ -92,7 +93,7 @@ diff -ruN qutim.orig/protocols/vkontakte/vreen/vreen.qbs qutim/protocols/vkontak property string vreen_lib_path: "lib" property string vreen_libexec_path: "lib" + property string lib_path: "lib" - + property string vreen_version_major: 1 property string vreen_version_minor: 9 {% endhighlight %} @@ -162,7 +163,7 @@ prepare() { rm -rf "${srcdir}/build" fi mkdir "${srcdir}/build" - + cd "${_gitname}" # update modules git submodule update --init --recursive diff --git a/ru/_posts/2014-03-06-site-changes.html b/ru/_posts/2014-03-06-site-changes.html index c252f5e..56fd904 100644 --- a/ru/_posts/2014-03-06-site-changes.html +++ b/ru/_posts/2014-03-06-site-changes.html @@ -1,6 +1,7 @@ --- category: ru type: paper +hasTr: true layout: paper tags: сайт, github pages title: Изменения сайта diff --git a/ru/_posts/2014-03-23-creating-custom-repo.html b/ru/_posts/2014-03-23-creating-custom-repo.html index 8638c7d..108fb4d 100644 --- a/ru/_posts/2014-03-23-creating-custom-repo.html +++ b/ru/_posts/2014-03-23-creating-custom-repo.html @@ -1,6 +1,7 @@ --- category: ru type: paper +hasTr: true layout: paper tags: archlinux, настройка, linux title: Создание собственного репозитория diff --git a/ru/_posts/2014-04-18-loveless.html b/ru/_posts/2014-04-18-loveless.html index d3d8e81..14ceafa 100644 --- a/ru/_posts/2014-04-18-loveless.html +++ b/ru/_posts/2014-04-18-loveless.html @@ -1,6 +1,7 @@ --- category: ru type: paper +hasTr: true layout: paper tags: offtop title: Loveless diff --git a/ru/_posts/2014-05-07-my-desktop.html b/ru/_posts/2014-05-07-my-desktop.html index d2ddb0f..9b3a16f 100644 --- a/ru/_posts/2014-05-07-my-desktop.html +++ b/ru/_posts/2014-05-07-my-desktop.html @@ -1,6 +1,7 @@ --- category: ru type: paper +hasTr: true layout: paper tags: настройка, linux, archlinux title: Приложения, которые я использую diff --git a/ru/_posts/2014-05-18-disabling-baloo.html b/ru/_posts/2014-05-18-disabling-baloo.html index 19bf21e..44dddd8 100644 --- a/ru/_posts/2014-05-18-disabling-baloo.html +++ b/ru/_posts/2014-05-18-disabling-baloo.html @@ -1,6 +1,7 @@ --- category: ru type: paper +hasTr: true layout: paper tags: linux, archlinux, сборка title: Отключение baloo, gentoo-way diff --git a/ru/_posts/2014-06-23-about-aur.html b/ru/_posts/2014-06-23-about-aur.html index dfd3ba5..a02e901 100644 --- a/ru/_posts/2014-06-23-about-aur.html +++ b/ru/_posts/2014-06-23-about-aur.html @@ -1,6 +1,7 @@ --- category: ru type: paper +hasTr: false layout: paper tags: archlinux title: Немного об Arch User Repository diff --git a/ru/_posts/2014-07-17-writting-own-completions-p1.html b/ru/_posts/2014-07-17-writting-own-completions-p1.html new file mode 100644 index 0000000..25515be --- /dev/null +++ b/ru/_posts/2014-07-17-writting-own-completions-p1.html @@ -0,0 +1,146 @@ +--- +category: ru +type: paper +hasTr: true +layout: paper +tags: linux, разработка +title: Написание собственных дополнений для Shell. Zsh +short: writting-own-completions-p1 +description: В данных статьях описываются некоторые основы создания файлов автодополнений для собственной программы. +--- +В процессе разработки одного своего проекта возникло желание добавить также файлы автодополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.
+ +Существует несколько возможных вариантов написания файла автодополнения для zsh. В случае данной статьи я остановлюсь только на одном из них, который предоставляет большие возможности и не требует больших затрат (например, работы с регулярными выражениями).
+ +Рассмотрим на примере моего же приложения, часть справки к которому выглядит таким образом:
+{% highlight bash %} +netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FILE ] + [ -o PROFILE | --open PROFILE ] [ -t NUM | --tab NUM ] [ --set-opts OPTIONS ] +{% endhighlight %} + +Список флагов: +
-h
и --help
не требуют аргументов;-e
и --essid
требуют аргумента в виде строки, без дополнения;-c
и --config
требуют аргумента в виде строки, файл с произвольной локацией;-o
и --open
требуют аргумента в виде строки, дополнение по файлам из определенной директории;-t
и --tab
требуют аргумента в виде строки, дополнение из указанного массива;--set-opts
требует аргумента в виде строки, дополнение из указанного массива, разделены запятыми;В заголовке должно быть обязательно указано, что это файл дополнений и для каких приложений он служит (можно строкой, если в файле будет содержаться дополнение для нескольких команд): + +{% highlight bash %} +#compdef netctl-gui +{% endhighlight %} + +Дальше идет описание флагов, вспомогательные функции и переменные. Замечу, что функции и переменные, которые будут использоваться для дополнения должны возвращать массивы, а не строки. В моем случае схема выглядит примерно так (все функции и переменные в этой главе умышленно оставлены пустыми): + +{% highlight bash %} +# variables +_netctl_gui_arglist=() +_netctl_gui_settings=() +_netctl_gui_tabs=() +_netctl_profiles() {} +{% endhighlight %} + +Затем идут основные функции, которые будут вызываться для дополнения для определенной команды. В моем случае команда одна, и функция одна: + +{% highlight bash %} +# work block +_netctl-gui() {} +{% endhighlight %} + +Далее без выделения в отдельную функцию идет небольшое шаманство, связанное с соотнесением приложения, которое было декларировано в первой строке, с функцией в теле скрипта: + +{% highlight bash %} +case "$service" in + netctl-gui) + _netctl-gui "$@" && return 0 + ;; +esac +{% endhighlight %} +
+ +Как я и говорил во введении, существует несколько способов создания подобных файлов. В частности, они различаются декларацией флагов и их дальнейшей обработкой. В данном случае я буду использовать команду _arguments
, которая требует специфичный формат переменных. Выглядит он таким образом ФЛАГ[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. Последние два поля не обязательны и, как Вы увидите чуть ниже, вовсе и не нужны в некоторых местах. Если Вы предусматриваете два флага (короткий и длинный формат) на одно действие, то формат чуть-чуть усложняется: {(ФЛАГ_2)ФЛАГ_1,(ФЛАГ_1)ФЛАГ_2}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. Замечу, что, если Вы хотите сделать дополнения для двух типов флагов, но некоторые флаги не имеют второй записи, то Вам необходимо продублировать его таким образом: {ФЛАГ,ФЛАГ}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. СООБЩЕНИЕ
- сообщение, которое будет показано, ДЕЙСТВИЕ
- действие, которое будет выполнено после этого флага. В случае данного туториала, ДЕЙСТВИЕ
будет иметь вид ->СОСТОЯНИЕ
.
Итак, согласно нашим требованиям, получается такое объявление аргументов: + +{% highlight bash %} +_netctl_gui_arglist=( + {'(--help)-h','(-h)--help'}'[show help and exit]' + {'(--essid)-e','(-e)--essid'}'[select ESSID]:type ESSID:->essid' + {'(--config)-c','(-c)--config'}'[read configuration from this file]:select file:->files' + {'(--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 %} +
+ +В нашем случае есть два статических массива (не изменятся ни сейчас, ни через пять минут) (массивы умышленно уменьшены): +{% highlight bash %} +_netctl_gui_settings=( + 'CTRL_DIR' + 'CTRL_GROUP' +) + +_netctl_gui_tabs=( + '1' + '2' +) +{% endhighlight %} + +И есть динамический массив, который должен каждый раз генерироваться. Он содержит, в данном случае, файлы в указанной директории (это можно сделать и средствами zsh, кстати): + +{% highlight bash %} +_netctl_profiles() { + print $(find /etc/netctl -maxdepth 1 -type f -printf "%f\n") +} +{% endhighlight %} +
+ +Помните, там выше было что-то про состояние? Оно хранится в переменной $state
, и в теле функции делается проверка на то, чему оно равно, чтобы подобрать соответствующие действия. В начале также нужно не забыть вызвать _arguments
с нашими флагами.
+
+{% highlight bash %}
+_netctl-gui() {
+ _arguments $_netctl_gui_arglist
+ case "$state" in
+ essid)
+ # не делать дополнения, ждать введенной строки
+ ;;
+ files)
+ # дополнение по существующим файлам
+ _files
+ ;;
+ profiles)
+ # дополнение из функции
+ # первая переменная описание
+ # вторая массив для дополнения
+ _values 'profiles' $(_netctl_profiles)
+ ;;
+ tab)
+ # дополнение из массива
+ _values 'tab' $_netctl_gui_tabs
+ ;;
+ settings)
+ # дополнение из массива
+ # флаг -s устанавливает разделитель и включает мультивыбор
+ _values -s ',' 'settings' $_netctl_gui_settings
+ ;;
+ esac
+}
+{% endhighlight %}
+
Файл хранится в директории /usr/share/zsh/site-functions
с произвольным в общем-то именем с префиксом _
. Файл примера полностью может быть найден в моем репозитории.
Дополнительная информация может быть найдена в репозитории zsh-completions. Например, там есть такой How-To. А еще там есть много примеров.
diff --git a/ru/_posts/2014-07-17-writting-own-completions-p1.html~ b/ru/_posts/2014-07-17-writting-own-completions-p1.html~ new file mode 100644 index 0000000..25515be --- /dev/null +++ b/ru/_posts/2014-07-17-writting-own-completions-p1.html~ @@ -0,0 +1,146 @@ +--- +category: ru +type: paper +hasTr: true +layout: paper +tags: linux, разработка +title: Написание собственных дополнений для Shell. Zsh +short: writting-own-completions-p1 +description: В данных статьях описываются некоторые основы создания файлов автодополнений для собственной программы. +--- +В процессе разработки одного своего проекта возникло желание добавить также файлы автодополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.
+ +Существует несколько возможных вариантов написания файла автодополнения для zsh. В случае данной статьи я остановлюсь только на одном из них, который предоставляет большие возможности и не требует больших затрат (например, работы с регулярными выражениями).
+ +Рассмотрим на примере моего же приложения, часть справки к которому выглядит таким образом:
+{% highlight bash %} +netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FILE ] + [ -o PROFILE | --open PROFILE ] [ -t NUM | --tab NUM ] [ --set-opts OPTIONS ] +{% endhighlight %} + +Список флагов: +
-h
и --help
не требуют аргументов;-e
и --essid
требуют аргумента в виде строки, без дополнения;-c
и --config
требуют аргумента в виде строки, файл с произвольной локацией;-o
и --open
требуют аргумента в виде строки, дополнение по файлам из определенной директории;-t
и --tab
требуют аргумента в виде строки, дополнение из указанного массива;--set-opts
требует аргумента в виде строки, дополнение из указанного массива, разделены запятыми;В заголовке должно быть обязательно указано, что это файл дополнений и для каких приложений он служит (можно строкой, если в файле будет содержаться дополнение для нескольких команд): + +{% highlight bash %} +#compdef netctl-gui +{% endhighlight %} + +Дальше идет описание флагов, вспомогательные функции и переменные. Замечу, что функции и переменные, которые будут использоваться для дополнения должны возвращать массивы, а не строки. В моем случае схема выглядит примерно так (все функции и переменные в этой главе умышленно оставлены пустыми): + +{% highlight bash %} +# variables +_netctl_gui_arglist=() +_netctl_gui_settings=() +_netctl_gui_tabs=() +_netctl_profiles() {} +{% endhighlight %} + +Затем идут основные функции, которые будут вызываться для дополнения для определенной команды. В моем случае команда одна, и функция одна: + +{% highlight bash %} +# work block +_netctl-gui() {} +{% endhighlight %} + +Далее без выделения в отдельную функцию идет небольшое шаманство, связанное с соотнесением приложения, которое было декларировано в первой строке, с функцией в теле скрипта: + +{% highlight bash %} +case "$service" in + netctl-gui) + _netctl-gui "$@" && return 0 + ;; +esac +{% endhighlight %} +
+ +Как я и говорил во введении, существует несколько способов создания подобных файлов. В частности, они различаются декларацией флагов и их дальнейшей обработкой. В данном случае я буду использовать команду _arguments
, которая требует специфичный формат переменных. Выглядит он таким образом ФЛАГ[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. Последние два поля не обязательны и, как Вы увидите чуть ниже, вовсе и не нужны в некоторых местах. Если Вы предусматриваете два флага (короткий и длинный формат) на одно действие, то формат чуть-чуть усложняется: {(ФЛАГ_2)ФЛАГ_1,(ФЛАГ_1)ФЛАГ_2}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. Замечу, что, если Вы хотите сделать дополнения для двух типов флагов, но некоторые флаги не имеют второй записи, то Вам необходимо продублировать его таким образом: {ФЛАГ,ФЛАГ}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. СООБЩЕНИЕ
- сообщение, которое будет показано, ДЕЙСТВИЕ
- действие, которое будет выполнено после этого флага. В случае данного туториала, ДЕЙСТВИЕ
будет иметь вид ->СОСТОЯНИЕ
.
Итак, согласно нашим требованиям, получается такое объявление аргументов: + +{% highlight bash %} +_netctl_gui_arglist=( + {'(--help)-h','(-h)--help'}'[show help and exit]' + {'(--essid)-e','(-e)--essid'}'[select ESSID]:type ESSID:->essid' + {'(--config)-c','(-c)--config'}'[read configuration from this file]:select file:->files' + {'(--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 %} +
+ +В нашем случае есть два статических массива (не изменятся ни сейчас, ни через пять минут) (массивы умышленно уменьшены): +{% highlight bash %} +_netctl_gui_settings=( + 'CTRL_DIR' + 'CTRL_GROUP' +) + +_netctl_gui_tabs=( + '1' + '2' +) +{% endhighlight %} + +И есть динамический массив, который должен каждый раз генерироваться. Он содержит, в данном случае, файлы в указанной директории (это можно сделать и средствами zsh, кстати): + +{% highlight bash %} +_netctl_profiles() { + print $(find /etc/netctl -maxdepth 1 -type f -printf "%f\n") +} +{% endhighlight %} +
+ +Помните, там выше было что-то про состояние? Оно хранится в переменной $state
, и в теле функции делается проверка на то, чему оно равно, чтобы подобрать соответствующие действия. В начале также нужно не забыть вызвать _arguments
с нашими флагами.
+
+{% highlight bash %}
+_netctl-gui() {
+ _arguments $_netctl_gui_arglist
+ case "$state" in
+ essid)
+ # не делать дополнения, ждать введенной строки
+ ;;
+ files)
+ # дополнение по существующим файлам
+ _files
+ ;;
+ profiles)
+ # дополнение из функции
+ # первая переменная описание
+ # вторая массив для дополнения
+ _values 'profiles' $(_netctl_profiles)
+ ;;
+ tab)
+ # дополнение из массива
+ _values 'tab' $_netctl_gui_tabs
+ ;;
+ settings)
+ # дополнение из массива
+ # флаг -s устанавливает разделитель и включает мультивыбор
+ _values -s ',' 'settings' $_netctl_gui_settings
+ ;;
+ esac
+}
+{% endhighlight %}
+
Файл хранится в директории /usr/share/zsh/site-functions
с произвольным в общем-то именем с префиксом _
. Файл примера полностью может быть найден в моем репозитории.
Дополнительная информация может быть найдена в репозитории zsh-completions. Например, там есть такой How-To. А еще там есть много примеров.
diff --git a/ru/about.html b/ru/about.html index a799013..beebf4a 100644 --- a/ru/about.html +++ b/ru/about.html @@ -4,6 +4,7 @@ layout: default comment: false share: true back: 1 +hasTr: true title: Обо мне --- diff --git a/ru/authors.html b/ru/authors.html index 7b27d8b..696677c 100644 --- a/ru/authors.html +++ b/ru/authors.html @@ -4,6 +4,7 @@ layout: default comment: false share: false back: 2 +hasTr: true title: Авторы --- diff --git a/ru/blog/archive.html b/ru/blog/archive.html index 36ad8cb..3247416 100644 --- a/ru/blog/archive.html +++ b/ru/blog/archive.html @@ -5,6 +5,7 @@ title: Архив материалов comment: false share: false back: 2 +hasTr: true ----DBUILD_DATAENGINE:BOOL=0
- не собирать DataEngine;-DBUILD_DOCS:BOOL=0
- не собирать документацию;-DBUILD_GUI:BOOL=0
- не собирать GUI;-DBUILD_LIBRARY:BOOL=0
- не собирать библиотеку;-DBUILD_LIBRARY:BOOL=0
- не собирать библиотеку;-DBUILD_PLASMOID:BOOL=0
- не собирать плазмоид;-DUSE_QT5:BOOL=0
- использовать Qt4 вместо Qt5 для GUI.