diff --git a/_posts/2014-01-14-about-zshrc.html b/_posts/2014-01-14-about-zshrc.html index dbe47e2..c2b4d9c 100644 --- a/_posts/2014-01-14-about-zshrc.html +++ b/_posts/2014-01-14-about-zshrc.html @@ -522,8 +522,6 @@ yatest () { } {% endhighlight %} -
But autocomplete for yaourt -Ss
will require root privileges.
It is recommended to set own variables in ~/.zshenv
. But I have everything stored in the single file.
Here is my .zshrc
.
Here is my .zshrc
.
anon_world_readable_only=YES
are used for prevent access to the music directory.
-Also here is my /etc/vsftpd.conf
configuration file:
+Login on special user and option anon_world_readable_only=YES
are used for prevent access to the music directory. Also here is my /etc/vsftpd.conf
configuration file:
{% highlight bash %}
anonymous_enable=YES
diff --git a/_posts/2014-03-23-creating-custom-repo.html b/_posts/2014-03-23-creating-custom-repo.html
index 7ae03b6..24577cb 100644
--- a/_posts/2014-03-23-creating-custom-repo.html
+++ b/_posts/2014-03-23-creating-custom-repo.html
@@ -59,6 +59,7 @@ fi
Create directory, share it (using ftp, for example). It has two subdirectories - i686
and x86_64
- for each architecture respectively. And fill them with a set of packages.
Updating repository may be split into the following steps:
Infinite in mystery is the gift of the Goddess
We seek it thus, and take to the sky
Ripples form on the water's surface
The wandering soul knows no rest.
There is no hate, only joy
For you are beloved by the goddess
@@ -25,6 +27,7 @@ Hero of the dawn, Healer of worlds
Dreams of the morrow hath the shattered soul
Pride is lost
Wings stripped away, the end is nigh.
My friend, do you fly away now?
To a world that abhors you and I?
@@ -34,6 +37,7 @@ My friend, your desire
Is the bringer of life, the gift of the goddess
Even if the morrow is barren of promises
Nothing shall forestall my return.
My friend, the fates are cruel
There are no dreams, no honor remains
@@ -45,6 +49,7 @@ And your eternal slumber
Legend shall speak
Of sacrifice at world's end
The wind sails over the water's surface.
Even if the morrow is barren of promises
Nothing shall forestall my return
diff --git a/_posts/2014-05-07-my-desktop.html b/_posts/2014-05-07-my-desktop.html
index 11975e7..63047af 100644
--- a/_posts/2014-05-07-my-desktop.html
+++ b/_posts/2014-05-07-my-desktop.html
@@ -43,22 +43,22 @@ description: Here is a short paper devoted to the set of applications and extens
+
QtCurve is used as Qt style, its settings may be found here, window decorations are presented by QtCurve too. Cursor theme is ecliz-small. Plasma theme is volatile. Icon pack is compass. I use fonts which are based on Liberation.
+QtCurve is used as Qt style, its settings may be found here, window decorations are presented by QtCurve too. Cursor theme is ecliz-small. Plasma theme is volatile. Icon pack is compass. I use fonts which are based on Liberation.
Used widgets (from left to right, top to bottom) are: menubar, homerun with transparent icon, icontask, netctl, default KDE tray, colibri for notifications, pytextmonitor.
As a bonus material here is a settings for konsole bright colors.
-+
I do not use a special settings, thus I get you a list of used add-ons:
diff --git a/_posts/2014-07-17-writting-own-completions-p1.html b/_posts/2014-07-17-writting-own-completions-p1.html index 030485a..dd8db34 100644 --- a/_posts/2014-07-17-writting-own-completions-p1.html +++ b/_posts/2014-07-17-writting-own-completions-p1.html @@ -9,7 +9,7 @@ short: writting-own-completions-p1 description:While developing one of my projects I have wanted to add completion files. I have already tried to create these files, but I was too lazy to read some manuals about it.
+While developing one of my projects I have wanted to add completion files. I have already tried to create these files, but I was too lazy to read some manuals about it.
There are some possible ways to create zsh completion file. In this article I will describe only one of them, which provides a lot of opportunities, but does not require a lot of costs (such as regular expressions).
diff --git a/ru/_posts/2014-01-14-about-zshrc.html b/ru/_posts/2014-01-14-about-zshrc.html index 4fec5ea..c37fc95 100644 --- a/ru/_posts/2014-01-14-about-zshrc.html +++ b/ru/_posts/2014-01-14-about-zshrc.html @@ -6,19 +6,22 @@ layout: paper tags: zshrc, настройка, linux title: О zshrc short: about-zshrc -description: Это моя первая статья в блоге (я думаю, мне нужно что-нибудь для тестов =)). Существует множество похожих статей и, я думаю, не буду отличаться от большинства. Я просто хочу показать мой.zshrc
и объяснить, что в нем есть и зачем оно нужно. Также, любые комментарии или дополнения приветствуются. Оригинал статьи.
+description: Это моя первая статья в блоге (я думаю, мне нужно что-нибудь для тестов =)). Существует множество похожих статей и, я думаю, не буду отличаться от большинства. Я просто хочу показать мой .zshrc
и объяснить, что в нем есть и зачем оно нужно. Также, любые комментарии или дополнения приветствуются. Оригинал статьи.
---
-Сначала установите необходимый минимум:
+ {% highlight bash %} pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting {% endhighlight %} -pkgfile очень полезная утилита. Данная команда также установит шелл, дополнения к нему и подсветку синтаксиса.
-Все доступные опции приведены здесь.
+pkgfile очень полезная утилита. Данная команда также установит шелл, дополнения к нему и подсветку синтаксиса.
+ +Все доступные опции приведены здесь.
Указываем файл с историей, число команд хранящихся в кэше текущего сеанса и число команд, хранящихся в файле:
+ {% highlight bash %} # history HISTFILE=~/.zsh_history @@ -27,6 +30,7 @@ SAVEHIST=500000 {% endhighlight %}Я не могу запомнить все комбинации Ctrl+
, поэтому я назначаю клавиши на их стандартное использование:
Но здесь важно, что стрелки вверх
/вниз
служат для навигации по истории с учетом уже введенной части команды. А PgUp
/PgDown
проигнорируют уже введенную часть команды.
Автодополнение команд:
+ {% highlight bash %} # autocomplete autoload -U compinit @@ -48,9 +54,11 @@ compinit zstyle ':completion:*' insert-tab false zstyle ':completion:*' max-errors 2 {% endhighlight %} +Подключается полное автодополнение команд. insert-tab false
включит автодополнение для невведенной команды (не знаю, зачем). max-errors
устанавливает максимальное число опечаток, которые могут быть исправлены.
Приглашение:
+ {% highlight bash %} # promptinit autoload -U promptinit @@ -58,6 +66,7 @@ promptinit {% endhighlight %}Включим цвета:
+ {% highlight bash %} # colors autoload -U colors @@ -66,53 +75,71 @@ colorsРазличные опции.
Смена директории без ввода cd
:
Корректировка опечаток (и шаблон вопроса):
+ {% highlight bash %} # correct setopt CORRECT_ALL SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) " {% endhighlight %} +Отключаем е#$%ую пищалку:
+ {% highlight bash %} # disable beeps unsetopt beep {% endhighlight %} +Включаем калькулятор:
+ {% highlight bash %} # calc autoload zcalc {% endhighlight %} +Дополнение истории (а не перезапись файла):
+ {% highlight bash %} # append history setopt APPEND_HISTORY {% endhighlight %} +Не сохранять дубликаты в историю:
+ {% highlight bash %} # ignore dups in history setopt HIST_IGNORE_ALL_DUPS {% endhighlight %} +...и дополнительные пробелы:
+ {% highlight bash %} # ignore spaces in history setopt HIST_IGNORE_SPACE {% endhighlight %} +...и пустые линии тоже:
+ {% highlight bash %} # reduce blanks in history setopt HIST_REDUCE_BLANKS {% endhighlight %} +Включаем pkgfile
:
В первой строке включаем подсветку. Затем включаем основную подсветку, а также подсветку скобок и шаблонов. Шаблоны указываются ниже (rm -rf *
в примере). Также может быть включена подсветка команд от root
и курсора cursor
. Синтаксис настроек понятен, fg
цвет шрифта, bg
цвет фона.
Я хочу использовать один файл .zshrc
для рута и обычного пользователя:
fg
цвет шрифта, bg
цвет фона. _bold
и _no_bold
регулируют оттенок. Команды должны быть обрамлены в %{ ... %}
, чтобы не показывались. Доступные цвета:
Доступные переменные:
+ {% highlight bash %} %n - имя пользователя %m - хостнейм (выставляется только в начале сессии) @@ -213,6 +244,7 @@ white {% endhighlight %}RPROMPT (необходим пакет acpi
):
Мой RPROMPT показывает текущее время, заряд батареи и код возврата последнего приложения. precmd()
необходимо для автоматического обновления. Конструкция $(if.true.false)
является условным оператором в zsh
.
Копируйте только те аллиасы, которые Вам необходимы. Если какой-либо аллиас использует приложение, которое не установлено, это приведет к сбою загрузки конфигурационного файла.
Полезная (или не очень) функция:
+ {% highlight bash %} show_which() { OUTPUT=$(which $1 | cut -d " " -f7-) @@ -251,6 +285,7 @@ show_which() { {% endhighlight %}Первая группа аллиасов:
+ {% highlight bash %} ## alias # цветной grep @@ -269,7 +304,8 @@ alias less='vimpager' alias zless='vimpager' {% endhighlight %} -ls аллиасы (смотри man ls):
+ls аллиасы (смотри man ls):
+ {% highlight bash %} alias ls='show_which ls && ls --color=auto --group-directories-first' alias ll='show_which ll && ls -l --human-readable' @@ -282,6 +318,7 @@ alias lm='show_which lm && la | more' {% endhighlight %}Аллиасы для быстрого просмотра файлов из консоли (просто набери имя файла!):
+ {% highlight bash %} # alias -s alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv @@ -293,6 +330,7 @@ alias -s {html,htm}=opera {% endhighlight %}"sudo" аллиасы:
+ {% highlight bash %} # sudo alias if [[ $EUID == 0 ]]; then @@ -316,6 +354,7 @@ fi {% endhighlight %}Некоторые глобальные аллиасы. Если они включены, команда cat foo g bar
будет эквивалентна cat foo | grep bar
:
Специальная функция для xrandr
:
К сожалению, я не могу запомнить флаги tar
, поэтому я использую специальные функции:
Специальная функция для su
:
Функция, которая заменяет оригиналькую команду rm
. Если Вы наберете rm
, это будет эквивалентно перемещению в корзину, также, Вы можете легко восстановить удаленный файл:
Функция для автоматических обновлений путей после установки пакетов:
+ {% highlight bash %} pacman () { /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\|R\|U" && rehash @@ -478,12 +521,12 @@ yatest () { /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\|R\|U" && rehash } {% endhighlight %} -Но автодополнение для yaourt -Ss
будет требовать привилегий рута.
Рекомендуется хранить свои переменные в ~/.zshenv
. Но я все храню в одном файле.
Пути, маска создаваемых файлов, редактор и пейджер:
+ {% highlight bash %} # path export PATH="$PATH:$HOME/.local/bin" @@ -495,6 +538,7 @@ export PAGER="vimpager" {% endhighlight %}Хэши. Если они включены, команда ~global
будет эквивалентна команде /mnt/global
:
Мой .zshrc
.
Мой .zshrc
.
CPP
с использованием библиотек Qt. Проект активно развивается. В этой статье речь пойдет о реализации сборки данного пакета в Archlinux с использованием библиотек Qt5 (а не Qt4, как это делают текущие пакеты в AUR).
+description: Если кто-то не знает, Qutim - мультипротокольный кросс-платформенный месседжер. Написан он на CPP
с использованием библиотек Qt. Проект активно развивается. В этой статье речь пойдет о реализации сборки данного пакета в Archlinux с использованием библиотек Qt5 (а не Qt4, как это делают текущие пакеты в AUR).
---
-Да все так. Просто пакет использует для сборки систему qbs, которая, на мой взгляд, немного странная. Пакет, необходимый для сборки, находится в AUR (рекомендую git-версию). Когда я спросил у Andrea Scarpino (который сопровождает все KDE и Qt пакеты в официальные репозитории) по поводу переноса этого пакета в репозитории, он ответил, что всему свое время. В принципе, я с ним согласен, так как проект, судя по всему, еще немного сыроват.
+Да все так. Просто пакет использует для сборки систему qbs, которая, на мой взгляд, немного странная. Пакет, необходимый для сборки, находится в AUR (рекомендую git-версию). Когда я спросил у Andrea Scarpino (который сопровождает все KDE и Qt пакеты в официальные репозитории) по поводу переноса этого пакета в репозитории, он ответил, что всему свое время. В принципе, я с ним согласен, так как проект, судя по всему, еще немного сыроват.
-Установим зависимости. Что-то может быть пропустил, зависимости сканировал с использованием namcap
:
Желающие могут почитать документацию по ссылке или посмотреть примеры (включены в пакет). Загвоздка в том, что эта штука использует файл настроек, который, во-первых, нужно сначала сгенерировать, во-вторых, хранится в домашней директории (и только там). В теории, генерация файла настроек (~/.config/QtProject/qbs.conf
) происходит следующим образом:
Желающие могут почитать документацию по ссылке или посмотреть примеры (включены в пакет). Загвоздка в том, что эта штука использует файл настроек, который, во-первых, нужно сначала сгенерировать, во-вторых, хранится в домашней директории (и только там). В теории, генерация файла настроек (~/.config/QtProject/qbs.conf
) происходит следующим образом:
Сначала находим Qt для сборки, потом находим инструментарий (компиляторы, например). Дальше вставляем инструментарий (например, нам для Qutim нужен clang
) в Qt, например, так:
Альтернативные варианты - править файл вручную или воспользоваться qbs-config-ui
или qbs-config
на Ваш выбор.
Так или иначе, нужный файл мы сгенерировали, сохраним его в будущей директории сборки:
+ {% highlight ini %} [General] @@ -65,10 +71,12 @@ qutim\qbs\architecture=x86_64 qutim\qbs\endianness=little qutim\qbs\toolchain=clang, llvm, gcc {% endhighlight %} - -Первая проблема - clang
(по крайней мере, в Archlinux):
И пофиксить сборку библиотеки для Vk:
+ {% highlight diff %} diff -ruN qutim.orig/protocols/vkontakte/vreen/vreen.qbs qutim/protocols/vkontakte/vreen/vreen.qbs --- qutim.orig/protocols/vkontakte/vreen/vreen.qbs 2014-01-06 15:41:42.000000000 +0400 @@ -97,9 +107,11 @@ diff -ruN qutim.orig/protocols/vkontakte/vreen/vreen.qbs qutim/protocols/vkontak property string vreen_version_major: 1 property string vreen_version_minor: 9 {% endhighlight %} - -Я пытался сделать универсальный способ сборки пакета, поэтому такое странное переназначение домашней директории. Флаг -j
указывает число потоков сборки, флаг -d
директорию сборки, release
тип сборки (debug, release), profile
используемый профиль, описанный в файле настроек.
Из нового - указание корневого каталога (--install-root
). Без этого пакет будет установлен в /
(/bin
и /lib
).
arcanis.name
. Теперь, как и все белые люди, имею нормальный адрес. Небольшое описание (мне, как человеку далекому от интернет-технологий, пришлось немного попариться на эту тему). Арендуем домен, подключаем услугу редактирования DNS (для Ru-center DNS-master) - суммарно мне обошлось около 1100 рублей/год. Кладем в наш репозиторий с сайтом файл CNAME, содержащий имя желаемого домена. Идем и добавляем две записи в DNS для нашего домена:
+ arcanis.name
. Теперь, как и все белые люди, имею нормальный адрес. Небольшое описание (мне, как человеку далекому от интернет-технологий, пришлось немного попариться на эту тему). Арендуем домен, подключаем услугу редактирования DNS (для Ru-center DNS-master) - суммарно мне обошлось около 1100 рублей/год. Кладем в наш репозиторий с сайтом файл CNAME, содержащий имя желаемого домена. Идем и добавляем две записи в DNS для нашего домена:
+
{% highlight bash %}
@ A 192.30.252.153
@ A 192.30.252.154
# перенаправление с www.*
www CNAME @
{% endhighlight %}
+
(@
значит наш корневой домен.) Ждем пару часов. Результат можно узнать примерно так:
+
{% highlight bash %}
$ dig domain.name +nostats +nocomments +nocmd
; <<>> DiG 9.9.2-P2 <<>> domain.name +nostats +nocomments +nocmd
@@ -27,8 +30,10 @@ domain.name. 912 IN A 192.30.252.153
domain.name. 912 IN A 192.30.252.154
...
{% endhighlight %}anon_world_readable_only=YES
.
-Также привожу свой файл настроек /etc/vsftpd.conf
:
+
+Для отсутствия доступа извне к директории с музыкой, используется логин под специальным пользователем и ограничение anon_world_readable_only=YES
. Также привожу свой файл настроек /etc/vsftpd.conf
:
+
{% highlight bash %}
anonymous_enable=YES
anon_root=/srv/ftp
@@ -58,10 +64,13 @@ chroot_local_user=YES
local_root=/srv/ftp/music
listen=YES
{% endhighlight %}
+
Теперь добавим переадресацию с repo.arcanis.name
на нужный IP адрес. Для этого внесем следующие записи в DNS:
+
{% highlight bash %}
repo A 89.249.170.38
{% endhighlight %}
+
Для начала находим сервер и желание с ним заниматься сексом. Для простоты, лучше, чтобы там стоял Archlinux, хотя, это и не совсем обязательно (можно создать отдельный корень под Arch). Из пакетов, пожалуй, нам понадобится только два, devtools
и сам pacman
:
devtools - набор скриптов, предназначенный для автоматизации сборки пакетов в чистом чруте. Думаю, большинство мейнтейнеров Arch'а пользуются им.
+ +devtools - набор скриптов, предназначенный для автоматизации сборки пакетов в чистом чруте. Думаю, большинство мейнтейнеров Arch'а пользуются им.
Создадим рабочие директории и установим цвета:
+ {% highlight bash %} # цвета if [ ${USECOLOR} == "yes" ]; then @@ -50,10 +53,12 @@ if [ ! -d "${STAGINGDIR}" ]; then mkdir -p "${STAGINGDIR}" || error_mes "unknown" fi {% endhighlight %} +Директории ${REPODIR}/{i686,x86_64}
для самого репозитория, ${PREPAREDIR}
- директория, где будут лежать собранные пакеты, ${STAGINGDIR}
- директория, откуда будут собираться пакеты.
Создаем директорию, расшариваем ее (например, по ftp). В ней две субдиректории - i686
и x86_64
, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.
Создаем директорию, расшариваем ее (например, по ftp). В ней две субдиректории - i686
и x86_64
, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.
Процесс обновления репозитория можно разбить на следующие части:
Теперь по шагам.
-Скачаем исходники для всех нужных пакетов из AUR'а:
+ {% highlight bash %} cd "${STAGINGDIR}" yaourt -G package-name {% endhighlight %} -Автоматически соберем каждый пакет:
+ {% highlight bash %} func_build() { if [ ${USECOLOR} == "yes" ]; then @@ -115,14 +123,17 @@ echo -e "${bwhite}[II]${cclose} Building packages" cd "${STAGINGDIR}" /usr/bin/find -name 'PKGBUILD' -type f -execdir /usr/bin/bash -c "func_build "${PREPAREDIR}" "${ROOTDIR}"" \; {% endhighlight %} +Для удобства рекомендую добавить в файл /etc/sudoers
следующие строки:
Для удобства рекомендую настроить gpg-agent.
-Для удобства рекомендую настроить gpg-agent.
+ +Функция для удаления пакетов из базы данных и из репозитория:
+ {% highlight bash %} func_remove() { _PACKAGE="$1" /usr/bin/rm -f "${_PACKAGE}"{,.sig} } {% endhighlight %} +Обновление репозитория i686
:
Обновление репозитория x86_64
:
Вы можете захотеть создать директорию, которая будет содержать симлинки на актуальные версии пакетов с именами, не содержащими версии:
+ {% highlight bash %} # создание симлинков if [ ${SYMLINK} == "yes" ]; then @@ -220,11 +240,12 @@ if [ ${SYMLINK} == "yes" ]; then fi {% endhighlight %} -Скрипты целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.
+Скрипты целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.
-Просто добавляем в файл /etc/pacman.conf
следующие строки:
-When the war of the beasts brings about the world's end
+
When the war of the beasts brings about the world's end
The goddess descends from the sky
Wings of light and dark spread afar
She guides us to bliss, her gift everlasting.
Infinite in mystery is the gift of the Goddess
We seek it thus, and take to the sky
Ripples form on the water's surface
The wandering soul knows no rest.
There is no hate, only joy
For you are beloved by the goddess
Hero of the dawn, Healer of worlds
Dreams of the morrow hath the shattered soul
Pride is lost
Wings stripped away, the end is nigh.
My friend, do you fly away now?
To a world that abhors you and I?
All that awaits you is a somber morrow
@@ -35,7 +37,8 @@ My friend, your desire
Is the bringer of life, the gift of the goddess
Even if the morrow is barren of promises
Nothing shall forestall my return.
My friend, the fates are cruel
There are no dreams, no honor remains
The arrow has left, the bow of the goddess
@@ -46,7 +49,8 @@ And your eternal slumber
Legend shall speak
Of sacrifice at world's end
The wind sails over the water's surface.
Even if the morrow is barren of promises
Nothing shall forestall my return
To become the dew that quenches the land
diff --git a/ru/_posts/2014-05-07-my-desktop.html b/ru/_posts/2014-05-07-my-desktop.html
index 27bb5fc..0d3d01b 100644
--- a/ru/_posts/2014-05-07-my-desktop.html
+++ b/ru/_posts/2014-05-07-my-desktop.html
@@ -8,53 +8,60 @@ title: Приложения, которые я использую
short: my-desktop
description: Небольшая статья, посвященная набору приложений и расширений, которые я использую в повседневной жизни на моем домашнем компьютере.
---
-
Shell - zshrc без вариантов. Некоторое описание моих настроек шелла могут быть найдены тут. Сами настройки хранятся тут или тут.
Shell - zshrc без вариантов. Некоторое описание моих настроек шелла могут быть найдены тут. Сами настройки хранятся тут или тут.
DE - KDE со всеми вытекающими (поэтому набор приложений, преимущественно, Qt-based). Некоторые подробности приготовления KDE будут даны ниже.
Работа с изображениями - gwenview для просмотра и быстрого редактирования, kolourpaint для простого редактирования стандартных форматов пиксельной графики, gimp (без плагинов, ибо не было необходимости) для более сурового редактирования и inkskape для работы с векторной графикой.
Работа с изображениями - gwenview для просмотра и быстрого редактирования, kolourpaint для простого редактирования стандартных форматов пиксельной графики, gimp (без плагинов, ибо не было необходимости) для более сурового редактирования и inkskape для работы с векторной графикой.
Браузер - Firefox, ранее Qupzilla, еще ранее Opera. Некоторый набор настроек Firefox будет дан ниже. Дополнительный браузер - Chromium. Консольный - elinks.
IM клиент - qutIM. Кроссплатформенный, мультипротокольный, с необходимым набором фич. Kopete, который использовался ранее, часто падал, работал как хотел и вообще не дружил с кодировкой. Раньше еще был какой то консольный, но сейчас его нет. Для таких случаев предпочитаю использовать клиент с планшета. Skype для скайпа, очевидно.
IM клиент - qutIM. Кроссплатформенный, мультипротокольный, с необходимым набором фич. Kopete, который использовался ранее, часто падал, работал как хотел и вообще не дружил с кодировкой. Раньше еще был какой то консольный, но сейчас его нет. Для таких случаев предпочитаю использовать клиент с планшета. Skype для скайпа, очевидно.
Почтовый клиент - kmail. Много фич, большая часть из которых мною используется, симпатично выглядит и удобный. Еще бы был DE-независимый, цены бы ему не было.
Почтовый клиент - kmail. Много фич, большая часть из которых мною используется, симпатично выглядит и удобный. Еще бы был DE-независимый, цены бы ему не было.
IRC клиент - konversation. Самый обычный IRC-клиент. Хотя, если мне не изменяет память, qutIM тоже поддерживает IRC протокол, лично мне удобнее использовать отдельный клиент для этого.
IRC клиент - konversation. Самый обычный IRC-клиент. Хотя, если мне не изменяет память, qutIM тоже поддерживает IRC протокол, лично мне удобнее использовать отдельный клиент для этого.
Torrent клиент - transmission с Qt5 интерфейсом (gtk тоже имеется). Для сервера он же, но без GUI.
Torrent клиент - transmission с Qt5 интерфейсом (gtk тоже имеется). Для сервера он же, но без GUI.
Видео плеер - mpv. Mplayer умер, а mplayer2 родился мертворожденным. Ах да, графические надстройки сверху ненужны.
Видео плеер - mpv. Mplayer умер, а mplayer2 родился мертворожденным. Ах да, графические надстройки сверху ненужны.
Аудио плеер - qmmp. Хороший, годный плеер с закосом под winamp. Легким движением руки делаем ему человеческий интерфейс aka simpleui.
Аудио плеер - qmmp. Хороший, годный плеер с закосом под winamp. Легким движением руки делаем ему человеческий интерфейс aka simpleui.
Работа с аудио/видео - kdenlive для работы с видео, soundkonverter для работы с аудио, easytag для работы с аудио тегами (gtk, но зато единственный, чья функциональность меня устроила). Ну и командная строка и небольшие скрипты на bash.
Работа с аудио/видео - kdenlive для работы с видео, soundkonverter для работы с аудио, easytag для работы с аудио тегами (gtk, но зато единственный, чья функциональность меня устроила). Ну и командная строка и небольшие скрипты на bash.
Офис - Kingsoft Office в качестве замены Microsoft Office; в общем то ничем не примечательный, разве что не так ущербно смотрится, как стандартные офисы, Qt-based и, говорят, с хорошей поддержкой стандартных форматов. Версия под линукс находится в состоянии альфы. Kile в качестве фронтенда к LaTeX. Okular, как просмотрщик всего. GoldenDict в качестве словаря.
Офис - Kingsoft Office в качестве замены Microsoft Office; в общем то ничем не примечательный, разве что не так ущербно смотрится, как стандартные офисы, Qt-based и, говорят, с хорошей поддержкой стандартных форматов. Версия под линукс находится в состоянии альфы. Kile в качестве фронтенда к LaTeX. Okular, как просмотрщик всего. GoldenDict в качестве словаря.
Редакторы - kwrite в качестве легковесного редактора, kate (с плагином cpp-helper) для более суровых вещей. Немного начал осваивать сейчас еще atom. Ну и, конечно, vim для консоли.
Редакторы - kwrite в качестве легковесного редактора, kate (с плагином cpp-helper) для более суровых вещей. Ну и, конечно, vim для консоли.
Научный софт. Визуализаторы химические - vmd, chimera и pymol. Физический симулятор step. Калькулятор kalgebra и консольный ipython. Рисовалка графиков и анализ qtiplot (его форк scidavis, к сожалению, полумертв), только рисовалка - grace. Chemtool в качестве замены ChemDraw.
Научный софт. Визуализаторы химические - vmd, chimera и pymol. Физический симулятор step. Калькулятор kalgebra и консольный ipython. Рисовалка графиков и анализ qtiplot (его форк scidavis, к сожалению, полумертв), только рисовалка - grace. Chemtool в качестве замены ChemDraw.
Системное. Файловый менеджер dolphin, doublecmd как двухпанельный менеджер. Эмуляторы терминала - yakuake и urxvt в качестве оконного. Графический интерфейс для архиваторов ark.
Системное. Файловый менеджер dolphin, doublecmd как двухпанельный менеджер. Эмуляторы терминала - yakuake и urxvt в качестве оконного. Графический интерфейс для архиваторов ark.
Нотариально заверенный скриншот:
-
В качестве стиля Qt используется QtCurve, настройки могут быть найдены здесь, оформление окон оттуда же. Курсор ecliz-small. Тема плазмы volatile. Значки compass. Шрифты на базе Liberation.
+В качестве стиля Qt используется QtCurve, настройки могут быть найдены здесь, оформление окон оттуда же. Курсор ecliz-small. Тема плазмы volatile. Значки compass. Шрифты на базе Liberation.
-Используемые виджеты (слева направо, сверху вниз): menubar, homerun с прозрачной иконкой, icontask, netctl, стандартный трей от KDE, colibri в качестве уведомлений, pytextmonitor.
+Используемые виджеты (слева направо, сверху вниз): menubar, homerun с прозрачной иконкой, icontask, netctl, стандартный трей от KDE, colibri в качестве уведомлений, pytextmonitor.
-В качестве бонусного материала - яркие цвета в консоли (для konsole):
-
В качестве бонусного материала - яркие цвета в консоли (для konsole):
+В самих настройках ничего интересного нет, я просто напишу список аддонов. Дико радует, что для того, чтобы интерфейс был минималистичным (и удобным), нужно поставить кучу плагинов.
Adblock plus - куда же без него.
Сам этим я не пользуюсь, поскольку предпочитаю менее деструктивные методы. Однако, судя по всему, все работает без проблем, поскольку жалоб нет. Так как патч делался действительно за несколько минут, то он просто выкорчевывает все вызовы baloo из исходников (возможно, когда-нибудь я сделаю нормальный патч).
-С другой стороны, я настоятельно рекомендую людям, которым по каким-либо причинам baloo не нужен, отключить его из меню настроек (добавили пункт в 4.13.1), либо воспользоваться этой статьей.
+С другой стороны, я настоятельно рекомендую людям, которым по каким-либо причинам baloo не нужен, отключить его из меню настроек (добавили пункт в 4.13.1), либо воспользоваться этой статьей.
-В Archlinux, на текущий момент (2014-05-18) от baloo, помимо baloo-widgets, зависит gwenview и kdepim. В версии 4.13.0, почему то, kactivities тоже зависел от baloo, однако, эта зависимость не требовалась явно (таким образом, достаточно было просто пересобрать его, удалив baloo из списка зависимостей).
-Тут все довольно просто. Разработчики сами позаботились за нас о возможных пожеланиях простых пользователей и добавили специальный флаг:
+ {% highlight cmake %} //Semantic info backend for Gwenview (Baloo/Fake/None) GWENVIEW_SEMANTICINFO_BACKEND:STRING=Baloo @@ -31,8 +32,8 @@ cmake ../gwenview-${pkgver} \ -DGWENVIEW_SEMANTICINFO_BACKEND=None {% endhighlight %} -Так как делалось все на скорую руку, то я предпочел пробежаться по исходникам с помощью grep и найти все упоминания baloo. Нужные строки (а это указания на baloo в файлах CMakeLists.txt, вызовы функций из его библиотек, объявления заголовочных файлов) просто закомментировал (в исходном коде местами пришлось добавить фейковые вызовы). Патч полностью здесь приводить не буду (он, к тому же, немного большой), а дам ссылку на него (4.13.3). Далее просто требуется применить этот патч к исходникам и пересобрать kdepim.
+Так как делалось все на скорую руку, то я предпочел пробежаться по исходникам с помощью grep и найти все упоминания baloo. Нужные строки (а это указания на baloo в файлах CMakeLists.txt, вызовы функций из его библиотек, объявления заголовочных файлов) просто закомментировал (в исходном коде местами пришлось добавить фейковые вызовы). Патч полностью здесь приводить не буду (он, к тому же, немного большой), а дам ссылку на него (4.13.3). Далее просто требуется применить этот патч к исходникам и пересобрать kdepim.
-Все пакеты для Archlinux для обеих архитектур доступны в моем репозитории.
+Все пакеты для Archlinux для обеих архитектур доступны в моем репозитории.
diff --git a/ru/_posts/2014-06-23-about-aur.html b/ru/_posts/2014-06-23-about-aur.html index 018f87a..58b5008 100644 --- a/ru/_posts/2014-06-23-about-aur.html +++ b/ru/_posts/2014-06-23-about-aur.html @@ -8,25 +8,26 @@ title: Немного об Arch User Repository short: about-aur description: Статья посвященная работе с пользовательским репозиторием Archlinux. Постарался сделать акцент на сопровождении пакетов. Данная статья, в большей степени, представляет собой компиляцию нескольких англоязычных статей Wiki и немного личного опыта. Поэтому не уверен, что в данной статье на английском языке будет толк. --- -Итак, Arch User Repository (AUR или АУР) - это репозиторий, поддерживаемый и развиваемый практически исключительно сообществом Archlinux. Есть еще отдельные люди, называемые доверенными пользователями (TU), на плечах которых лежит своеобразная "модерация" этого репозитория. На мой скромный взгляд, едва ли не единственное отличие Archlinux от других дистрибутивов - это наличие AUR'а. Отличие этого репозитория от обычных прежде всего в том, что он не содержит архивов с исходниками или собранных пакетов - только скрипт сборки (PKGBUILD) и, возможно, дополнительные текстовые файлы.
+Итак, Arch User Repository (AUR или АУР) - это репозиторий, поддерживаемый и развиваемый практически исключительно сообществом Archlinux. Есть еще отдельные люди, называемые доверенными пользователями (TU), на плечах которых лежит своеобразная "модерация" этого репозитория. На мой скромный взгляд, едва ли не единственное отличие Archlinux от других дистрибутивов - это наличие AUR'а. Отличие этого репозитория от обычных прежде всего в том, что он не содержит архивов с исходниками или собранных пакетов - только скрипт сборки (PKGBUILD) и, возможно, дополнительные текстовые файлы.
-Конечно, вручную скачивать архив с сайта AUR'а, а также проверять обновления, не совсем удобно, поэтому существует набор хелперов. Большинство хелперов представляет собой обертку над pacman. Я выделю только два - packer - минималистичный, удобный, быстрый - и yaourt - на шелле, но зато более функциональный. По не особо понятным мне причинам, в русскоязычном сегменте большее распространение получил yaourt, зарубежом - packer.
+Конечно, вручную скачивать архив с сайта AUR'а, а также проверять обновления, не совсем удобно, поэтому существует набор хелперов. Большинство хелперов представляет собой обертку над pacman. Я выделю только два - packer - минималистичный, удобный, быстрый - и yaourt - на шелле, но зато более функциональный. По не особо понятным мне причинам, в русскоязычном сегменте большее распространение получил yaourt, зарубежом - packer.
-Помимо хелперов, существуют также консольные клиенты для работы с AUR. Я выделю, пожалуй, только один - python-aur. Иногда удобная альтернатива веб-интерфейсу.
+Помимо хелперов, существуют также консольные клиенты для работы с AUR. Я выделю, пожалуй, только один - python-aur. Иногда удобная альтернатива веб-интерфейсу.
Другая особенность данного репозитория - и не менее важная - все действия с ним осуществляются на свой страх и риск. Опасные и некорректные пакеты, конечно же, удаляются, но вполне могут быть и ошибки при сборке и еще все, что сможете придумать. Дык вот - работа с ним на вашей совести, и никто вам ничем не обязан, если что-то сломается. По этой же причине, ни один хелпер в обозримом будущем не будет перенесен в официальные репозитории.
У пакетов в AUR есть несколько характеристик, которых нет у пакетов в официальных репозиториях: -
Для работы с AUR требуется установить группу пакетов base-devel. Пакеты с этой группы, как правило, не включены в зависимости. Рекомендуемая установка пакетов с AUR выглядит примерно так:
+Для работы с AUR требуется установить группу пакетов base-devel. Пакеты с этой группы, как правило, не включены в зависимости. Рекомендуемая установка пакетов с AUR выглядит примерно так:
+ {% highlight bash %} # скачать архив с PKGBUILD'ом c AUR curl -L -O https://aur.archlinux.org/packages/fo/foo/foo.tar.gz @@ -42,82 +43,85 @@ makepkg -csrf pacman -U foo-0.1-1-i686.pkg.tar.xz {% endhighlight %} -Никаких makepkg -S
. С недавних пор данный метод считается устаревшим. Но обо всем по-порядку
Нам нужно загрузить архив на сайт. В этом архиве должны быть PKGBUILD и .AURINFO. По поводу первого я расскажу еще чуть ниже, второй генерируется автоматически. Также, там могут быть установочные скрипты (*.install), патчи, файлы лицензии (если не предоставляются апстримом с исходниками), сервисы systemd, скрипты запуска - это то, что обычно включено. Никаких исходников. И тем более никаких бинарников. (Шутки-шутками, а я помню пакет, в котором исходный код записывался с помощью cat << EOF
прямо в тексте PKGBUILD'а.)
Все файлы кладем в одну директорию. Убедились, что install файл, если он есть, указан в переменной install, все другие исходные файлы указаны в массиве source, а хэш-суммы правильные (их легко можно сгенерировать, набрав makepkg -g
). Далее из этой директории запустить команду mkaurball
(пакет pkgbuild-introspection) - и архив готов.
Все файлы кладем в одну директорию. Убедились, что install файл, если он есть, указан в переменной install, все другие исходные файлы указаны в массиве source, а хэш-суммы правильные (их легко можно сгенерировать, набрав makepkg -g
). Далее из этой директории запустить команду mkaurball
(пакет pkgbuild-introspection) - и архив готов.
Несколько правил загрузки пакета в AUR: -
Если вы сопровождаете пакет и хотите его обновить, просто загрузите обновленный пакет еще раз. Читайте - и, по возможности, отвечайте - комментарии к вашему пакету, там иногда могут быть очень полезные замечания или дельные предложения. Если вы не хотите сопровождать больше ваш пакет (или нет времени), то, пожалуйста, нажмите на кнопку справа (бросить/disown), чтобы те, кто в нем заинтересован, смогли поддерживать его. Если есть пакет, который не имеет сопровождающего, и вы хотели бы им стать, вы также можете нажать на соответствующую кнопку справа в веб-интерфейсе =)
-По любому вопросу, связанному с работой AUR вы всегда можете обратиться в список рассылки aur-general (at) archlinux (dot) org. На ваш вопрос ответят, вероятно, достаточно быстро; причем, ответить могут не только обычные пользователи, но и доверенные пользователи. Также, если вы вдруг неуверены в своем PKGBUILD'е, вы тоже можете всегда обратиться в список рассылки и показать свой PKGBUILD.
+По любому вопросу, связанному с работой AUR вы всегда можете обратиться в список рассылки aur-general (at) archlinux (dot) org. На ваш вопрос ответят, вероятно, достаточно быстро; причем, ответить могут не только обычные пользователи, но и доверенные пользователи. Также, если вы вдруг неуверены в своем PKGBUILD'е, вы тоже можете всегда обратиться в список рассылки и показать свой PKGBUILD.
-Существует также отдельный список рассылки для запросов aur-requests (at) archlinux (dot) org. На текущий момент (AUR 3.2.0) общение через данный список рассылки напрямую не рекомендуется - все обычные запросы должны отсылаться с использованием веб-интерфейса (подробности). Запросы, которые вы можете послать: -
Существует также отдельный список рассылки для запросов aur-requests (at) archlinux (dot) org. На текущий момент (AUR 3.2.0) общение через данный список рассылки напрямую не рекомендуется - все обычные запросы должны отсылаться с использованием веб-интерфейса (подробности). Запросы, которые вы можете послать: +
Пожалуйста, пишите письма в список рассылки аккуратно. И, желательно, вежливо (а то потом будете генерировать что-то вроде такого). Также старайтесь избегать избыточного цитирования. И - это практически требование - предоставляйте ссылки на пакеты. Хороший вариант - составление списка ссылок в конце письма, а в теле ссылаться на них таким образом [1]
. Если не уверены в корректности запроса - посмотрите архив списка рассылки.
Пожалуйста, пишите письма в список рассылки аккуратно. И, желательно, вежливо (а то потом будете генерировать что-то вроде такого) (мы все знаем, что мы арче-школьники, не надо нас еще раз этим тыкать, мы обидимся). Также старайтесь избегать избыточного цитирования. И - это практически требование - предоставляйте ссылки на пакеты. Хороший вариант - составление списка ссылок в конце письма, а в теле ссылаться на них таким образом [1]
. Если не уверены в корректности запроса - посмотрите архив списка рассылки.
PKGBUILD - это, де-факто, сценарий шелла, указывающий как и почему собираться пакету. Он имеет 4 части: -
$pkgdir
). Функция обозначается, как package() (для совмещенных пакетов таких функций несколько и они называются примерно так: package_$pkgname()).PKGBUILD - это, де-факто, сценарий шелла, указывающий как и почему (в смысле, зачем) собираться пакету. Он имеет 4 части: +
$pkgdir
). Функция обозначается, как package() (для совмещенных пакетов таких функций несколько и они называются примерно так: package_$pkgname()).Основные переменные следующие: -
python-pyqt4
и python2-pyqt4
имеют одну группу pyqt4
.arch=('i686' 'x86_64')
для бинарных пакетов (очень-очень редко бывают пакеты, которые предоставляются только для одной архитектуры) и arch=('any')
для пакетов, не содержащих бинарные файлы./usr/share/licenses/$pkgname/LICENSE
)./usr/share/pacman/proto.install
).python-pyqt4
и python2-pyqt4
имеют одну группу pyqt4
.arch=('i686' 'x86_64')
для бинарных пакетов (очень-очень редко бывают пакеты, которые предоставляются только для одной архитектуры) и arch=('any')
для пакетов, не содержащих бинарные файлы./usr/share/licenses/$pkgname/LICENSE
)./usr/share/pacman/proto.install
).Все перечисленные выше переменные указываются в заголовке PKGBUILD. К ним также можно обращаться внутри PKGBUILD'а. Дополнительно стоит упомянуть переменные startdir - директория, откуда запускается makepkg, srcdir - директория с исходниками ($startdir/src
по умолчанию), pkgdir - директория с собранным пакетом ($startdir/pkg/$pkgname
по умолчанию). Не используйте переменную startdir без крайней необходимости.
К PKGBUILD применимы все правила программирования на шелле. Например, "смешная шутка":
+
{% highlight bash %}
pkgdir="/usr pkg"
rm -rf $pkgdir
{% endhighlight %}
-кому-то может показаться не очень смешной. Поэтому все пути (да и вообще переменные - там где надо, конечно) лучше обрамлять в двойные кавычки (исключение - условия в двойных квадратных скобках [[ ... ]]
). Если вы вводите какие-либо свои переменные, то настоятельно рекоммендуется добавить в начале подчеркивание _
во избежание перекрытия переменными makepkg.
[[ ... ]]
). Если вы вводите какие-либо свои переменные, то настоятельно рекоммендуется добавить в начале подчеркивание _
во избежание перекрытия переменными makepkg.
В русскоязычном сегменте до сих пор зачастую встречаются строки типа make || return 1
. Дык вот, return 1
теперь уже давно как не нужен.
Еще можно работать с рядом других переменных, определенных makepkg. Их список можно глянуть в /etc/makepkg.conf
. Самые ходовые - флаги компиляции и CARCH
. Так, например, если вы собираете пакет, исходники к которому предоставляются в бинарном виде (проприетарный драйвер, например), то кусок PKGBUILD может выглядеть так:
+
{% highlight bash %}
if [ "${CARCH}" == "x86_64" ]; then
_filearch=amd64
@@ -128,11 +132,13 @@ else
fi
source=(${pkgname}-${pkgver}.tar.gz::http://istodo.ru/distribs/${pkgname}-linux-${pkgver}-${_filearch}.tar.gz)
{% endhighlight %}
+
pkgbase вообще удобная штука. Например, для создания пакетов одновременно для двух версий Python PKGBUILD может выглядеть примерно так. Или, в общем случае, как-то так.
+pkgbase вообще удобная штука. Например, для создания пакетов одновременно для двух версий Python PKGBUILD может выглядеть примерно так. Или, в общем случае, как-то так.
+ +Вообще говоря, для стандартных случаев существуют прототипы PKGBUILD'ов. Их можно найти в /usr/share/pacman/
, хотя местами они могли немного устареть (больше года как). Так, прототипы для пакетов из системы контроля версий (git/svn/hg/bzr) однозначно устарели - сейчас используется другой, куда более аккуратный, формат. Настоятельно рекомендую ознакомиться на эту тему с данной статьей. Например, для пакета qmmp-qsmmp-git кусок PKGBUILD'а выглядит так:
-
Вообще говоря, для стандартных случаев существуют прототипы PKGBUILD'ов. Их можно найти в /usr/share/pacman/
, хотя местами они могли немного устареть (больше года как). Так, прототипы для пакетов из системы контроля версий (git/svn/hg/bzr) однозначно устарели - сейчас используется другой, куда более аккуратный, формат. Настоятельно рекомендую ознакомиться на эту тему с данной статьей. Например, для пакета qmmp-qsmmp-git кусок PKGBUILD'а выглядит так:
{% highlight bash %}
pkgname=qmmp-qsmmp-git
_gitname=qsmmp
@@ -170,11 +176,11 @@ pkgver() {
Также, я отмечу, что некоторые пакеты имеют свой устоявшийся формат, поэтому, зачастую, полезно поискать что-то похожее в AUR и сделать свой PKGBUILD по образу и подобию.
В процессе разработки одного своего проекта возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.
+В процессе разработки одного своего проекта возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.
-Существует несколько возможных вариантов написания файла автодополнения для zsh. В случае данной статьи я остановлюсь только на одном из них, который предоставляет большие возможности и не требует больших затрат (например, работы с регулярными выражениями).
Рассмотрим на примере моего же приложения, часть справки к которому выглядит таким образом:
@@ -32,7 +32,7 @@ netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FIВ заголовке должно быть обязательно указано, что это файл дополнений и для каких приложений он служит (можно строкой, если в файле будет содержаться дополнение для нескольких команд): {% highlight bash %} @@ -65,9 +65,10 @@ case "$service" in ;; esac {% endhighlight %} +
-Как я и говорил во введении, существует несколько способов создания подобных файлов. В частности, они различаются декларацией флагов и их дальнейшей обработкой. В данном случае я буду использовать команду _arguments
, которая требует специфичный формат переменных. Выглядит он таким образом ФЛАГ[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. Последние два поля не обязательны и, как Вы увидите чуть ниже, вовсе и не нужны в некоторых местах. Если Вы предусматриваете два флага (короткий и длинный формат) на одно действие, то формат чуть-чуть усложняется: {(ФЛАГ_2)ФЛАГ_1,(ФЛАГ_1)ФЛАГ_2}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. Замечу, что, если Вы хотите сделать дополнения для двух типов флагов, но некоторые флаги не имеют второй записи, то Вам необходимо продублировать его таким образом: {ФЛАГ,ФЛАГ}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ
. СООБЩЕНИЕ
- сообщение, которое будет показано, ДЕЙСТВИЕ
- действие, которое будет выполнено после этого флага. В случае данного туториала, ДЕЙСТВИЕ
будет иметь вид ->СОСТОЯНИЕ
.
Итак, согласно нашим требованиям, получается такое объявление аргументов: @@ -82,9 +83,10 @@ _netctl_gui_arglist=( {'--set-opts','--set-opts'}'[set options for this run, comma separated]:comma separated:->settings' ) {% endhighlight %} +
-В нашем случае есть два статических массива (не изменятся ни сейчас, ни через пять минут) (массивы умышленно уменьшены): {% highlight bash %} @@ -106,9 +108,10 @@ _netctl_profiles() { print $(find /etc/netctl -maxdepth 1 -type f -printf "%f\n") } {% endhighlight %} +
-Помните, там выше было что-то про состояние? Оно хранится в переменной $state
, и в теле функции делается проверка на то, чему оно равно, чтобы подобрать соответствующие действия. В начале также нужно не забыть вызвать _arguments
с нашими флагами.
{% highlight bash %}
@@ -140,9 +143,10 @@ _netctl-gui() {
esac
}
{% endhighlight %}
+
Файл хранится в директории /usr/share/zsh/site-functions/
с произвольным, в общем-то, именем с префиксом _
. Файл примера полностью может быть найден в моем репозитории.
Файл хранится в директории /usr/share/zsh/site-functions/
с произвольным, в общем-то, именем с префиксом _
. Файл примера полностью может быть найден в моем репозитории.
Дополнительная информация может быть найдена в репозитории zsh-completions. Например, там есть такой How-To. А еще там есть много примеров.
+Дополнительная информация может быть найдена в репозитории zsh-completions. Например, там есть такой How-To. А еще там есть много примеров.
diff --git a/ru/_posts/2014-07-17-writting-own-completions-p2.html b/ru/_posts/2014-07-17-writting-own-completions-p2.html index 985e02c..d9626b0 100644 --- a/ru/_posts/2014-07-17-writting-own-completions-p2.html +++ b/ru/_posts/2014-07-17-writting-own-completions-p2.html @@ -6,13 +6,13 @@ layout: paper tags: linux, разработка title: Написание своих дополнений для Shell. Bash short: writting-own-completions-p2 -description:В процессе разработки одного своего проекта возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.
+В процессе разработки одного своего проекта возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.
-Bash, в отличие от zsh, требует к себе некоторого велосипедостроения в отношении дополнений. Бегло погуглив, я не нашел более-менее нормальных туториалов, потому за основу были взяты имеющиеся в системе файлы дополнений для pacman
.
Bash, в отличие от zsh, требует к себе некоторого велосипедостроения в отношении дополнений. Бегло погуглив, я не нашел более-менее нормальных туториалов, потому за основу были взяты имеющиеся в системе файлы дополнений для pacman
.
Рассмотрим на примере все того же моего приложения. Я напомню, что часть справки к которому выглядит таким образом:
@@ -32,7 +32,7 @@ netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FI -Здесь все переменные должны возвращать массив. Каких-либо особых форматов тут уже нет. Сначала опишем флаги, потом уже все остальные переменные. Я напомню (так как ниже я уже не буду приводить функции более подробно), что _netctl_profiles()
, в отличие от других переменных, должна возвращать актуальный на данный момент массив:
{% highlight bash %}
@@ -55,9 +55,10 @@ _netctl-gui() {}
{% highlight bash %}
complete -F _netctl_gui netctl-gui
{% endhighlight %}
+
Как было сказано выше, особого формата тут нет, доступные флаги располагаются просто массивом: {% highlight bash %} @@ -75,9 +76,10 @@ _netctl_gui_arglist=( '--set-opts' ) {% endhighlight %} +
-Приведу только функцию, которая в zsh выглядела таким образом: {% highlight bash %} @@ -93,9 +95,10 @@ _netctl_profiles() { echo $(find /etc/netctl -maxdepth 1 -type f -printf "%f\n") } {% endhighlight %} +
-За дополнение в bash отвечает переменная COMPREPLY
. Для отслеживания текущего состояния нужно вызвать функцию _get_comp_words_by_ref
с параметрами cur
(текущая опция) и prev
(предыдущая, собственно состояние). Ну и нужно несколько точек, на которых сворачивать в определенную часть case (переменные want*
). Для генерации дополнения используется compgen
. После флага -W
ему подается список слов. (Есть еще флаг -F
, который вызывает функцию, но у меня он помимо этого еще и ворнинг выдает.) Последним аргументом идет текущая строка, к которой и нужно генерировать дополнение.
Таким образом, наша функция выглядит так: @@ -134,7 +137,8 @@ _netctl_gui() { true } {% endhighlight %} +
-Файл хранится в директории /usr/share/bash-completion/completions/
с произвольным именем. Файл примера полностью может быть найден в моем репозитории.
Файл хранится в директории /usr/share/bash-completion/completions/
с произвольным именем. Файл примера полностью может быть найден в моем репозитории.