mirror of
https://github.com/arcan1s/arcanis.me.git
synced 2025-07-16 06:19:55 +00:00
change name= to id= in <a> tags
This commit is contained in:
@ -8,7 +8,7 @@ title: О zshrc
|
||||
short: about-zshrc
|
||||
description: Это моя первая статья в блоге (я думаю, мне нужно что-нибудь для тестов =)). Существует множество похожих статей и, я думаю, не буду отличаться от большинства. Я просто хочу показать мой <code>.zshrc</code> и объяснить, что в нем есть и зачем оно нужно. Также, любые комментарии или дополнения приветствуются. <a href="http://archlinux.org.ru/forum/topic/12752/" title="Тема на форуме">Оригинал</a> статьи.
|
||||
---
|
||||
<h2><a href="#prepare" class="anchor" name="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
|
||||
<h2><a href="#prepare" class="anchor" id="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
|
||||
<p>Сначала установите необходимый минимум:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -17,7 +17,7 @@ pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
|
||||
|
||||
<p><a href="https://www.archlinux.org/packages/pkgfile/" title="Пакет Archlinux">pkgfile</a> очень полезная утилита. Данная команда также установит шелл, дополнения к нему и подсветку синтаксиса.</p>
|
||||
|
||||
<h2><a href="#configuration" class="anchor" name="configuration"><span class="octicon octicon-link"></span></a>Настройка шелла</h2>
|
||||
<h2><a href="#configuration" class="anchor" id="configuration"><span class="octicon octicon-link"></span></a>Настройка шелла</h2>
|
||||
<p>Все доступные опции приведены <a href="http://zsh.sourceforge.net/Doc/Release/Options.html" title="Документация zsh">здесь</a>.</p>
|
||||
|
||||
<p>Указываем файл с историей, число команд хранящихся в кэше текущего сеанса и число команд, хранящихся в файле:</p>
|
||||
@ -138,7 +138,7 @@ setopt HIST_REDUCE_BLANKS
|
||||
source /usr/share/doc/pkgfile/command-not-found.zsh
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#highlighting" class="anchor" name="highlighting"><span class="octicon octicon-link"></span></a>Подсветка синтаксиса</h2>
|
||||
<h2><a href="#highlighting" class="anchor" id="highlighting"><span class="octicon octicon-link"></span></a>Подсветка синтаксиса</h2>
|
||||
|
||||
{% highlight bash %}
|
||||
# highlighting
|
||||
@ -189,7 +189,7 @@ ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' # конс
|
||||
|
||||
<p>В первой строке включаем подсветку. Затем включаем основную подсветку, а также подсветку скобок и шаблонов. Шаблоны указываются ниже (<code>rm -rf *</code> в примере). Также может быть включена подсветка команд от <code>root</code> и курсора <code>cursor</code>. Синтаксис настроек понятен, <code>fg</code> цвет шрифта, <code>bg</code> цвет фона.</p>
|
||||
|
||||
<h2><a href="#prompt" class="anchor" name="prompt"><span class="octicon octicon-link"></span></a>$PROMPT и $RPROMPT</h2>
|
||||
<h2><a href="#prompt" class="anchor" id="prompt"><span class="octicon octicon-link"></span></a>$PROMPT и $RPROMPT</h2>
|
||||
<p>Я хочу использовать один файл <code>.zshrc</code> для рута и обычного пользователя:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -272,7 +272,7 @@ $returncode\
|
||||
|
||||
<p>Мой RPROMPT показывает текущее время, заряд батареи и код возврата последнего приложения. <code>precmd()</code> необходимо для автоматического обновления. Конструкция <code>$(if.true.false)</code> является условным оператором в <code>zsh</code>.</p>
|
||||
|
||||
<h2><a href="#aliases" class="anchor" name="aliases"><span class="octicon octicon-link"></span></a>Аллиасы</h2>
|
||||
<h2><a href="#aliases" class="anchor" id="aliases"><span class="octicon octicon-link"></span></a>Аллиасы</h2>
|
||||
<p><b>Копируйте только те аллиасы, которые Вам необходимы.</b> Если какой-либо аллиас использует приложение, которое не установлено, это приведет к сбою загрузки конфигурационного файла.</p>
|
||||
|
||||
<p>Полезная (или не очень) функция:</p>
|
||||
@ -364,7 +364,7 @@ alias -g h="| head"
|
||||
alias -g dn="&> /dev/null &"
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#functions" class="anchor" name="functions"><span class="octicon octicon-link"></span></a>Функции</h2>
|
||||
<h2><a href="#functions" class="anchor" id="functions"><span class="octicon octicon-link"></span></a>Функции</h2>
|
||||
<p>Специальная функция для <code>xrandr</code>:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -522,7 +522,7 @@ yatest () {
|
||||
}
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#variables" class="anchor" name="variables"><span class="octicon octicon-link"></span></a>Переменные</h2>
|
||||
<h2><a href="#variables" class="anchor" id="variables"><span class="octicon octicon-link"></span></a>Переменные</h2>
|
||||
<p>Рекомендуется хранить свои переменные в <code>~/.zshenv</code>. Но я все храню в одном файле.</p>
|
||||
|
||||
<p>Пути, маска создаваемых файлов, редактор и пейджер:</p>
|
||||
@ -548,12 +548,12 @@ hash -d u1=/mnt/usbdev1
|
||||
hash -d u2=/mnt/usbdev2
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#screenshot" class="anchor" name="screenshot"><span class="octicon octicon-link"></span></a>Скриншот</h2>
|
||||
<h2><a href="#screenshot" class="anchor" id="screenshot"><span class="octicon octicon-link"></span></a>Скриншот</h2>
|
||||
<div class="thumbnails">
|
||||
{% assign scrdesc = "Как оно выглядит" %}
|
||||
{% assign scrname = "zshrc_demo" %}
|
||||
{% include prj_scr.html %}
|
||||
</div>
|
||||
|
||||
<h2><a href="#file" class="anchor" name="file"><span class="octicon octicon-link"></span></a>Файл</h2>
|
||||
<h2><a href="#file" class="anchor" id="file"><span class="octicon octicon-link"></span></a>Файл</h2>
|
||||
<p><a href="https://raw.github.com/arcan1s/dotfiles/master/zshrc" title="Github" type="text/plain">Мой</a> <code>.zshrc</code>.</p>
|
||||
|
@ -8,10 +8,10 @@ title: Сборка Qutim с Qt5
|
||||
short: building-qutim-using-qt5
|
||||
description: Если кто-то не знает, <a href="http://qutim.org" title="Домашняя страница Qutim">Qutim</a> - мультипротокольный кросс-платформенный месседжер. Написан он на <code>CPP</code> с использованием библиотек Qt. Проект активно развивается. В этой статье речь пойдет о реализации сборки данного пакета в Archlinux с использованием библиотек Qt5 (а не Qt4, как это делают текущие пакеты в AUR).
|
||||
---
|
||||
<h2><a href="#problems" class="anchor" name="problems"><span class="octicon octicon-link"></span></a>Что не так?</h2>
|
||||
<h2><a href="#problems" class="anchor" id="problems"><span class="octicon octicon-link"></span></a>Что не так?</h2>
|
||||
<p>Да все так. Просто пакет использует для сборки систему <a href="http://qt-project.org/wiki/qbs" title="Wiki">qbs</a>, которая, на мой взгляд, немного странная. Пакет, необходимый для сборки, <a href="https://aur.archlinux.org/packages/qbs-git/" title="AUR">находится в AUR</a> (рекомендую git-версию). Когда я спросил у Andrea Scarpino (который сопровождает все KDE и Qt пакеты в официальные репозитории) по поводу переноса этого пакета в репозитории, он ответил, что всему свое время. В принципе, я с ним согласен, так как проект, судя по всему, еще немного сыроват.</p>
|
||||
|
||||
<h2><a href="#prepare" class="anchor" name="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
|
||||
<h2><a href="#prepare" class="anchor" id="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
|
||||
<p>Установим зависимости. Что-то может быть пропустил, зависимости сканировал с использованием <code>namcap</code>:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -19,7 +19,7 @@ pacman -Sy --asdeps clang git libc++abi qt5-quick1 qt5-x11extras
|
||||
yaourt -S --asdeps jreen-git qbs-git
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#qbs" class="anchor" name="qbs"><span class="octicon octicon-link"></span></a>Настройка qbs</h3>
|
||||
<h3><a href="#qbs" class="anchor" id="qbs"><span class="octicon octicon-link"></span></a>Настройка qbs</h3>
|
||||
<p>Желающие могут почитать документацию <a href="http://qt-project.org/wiki/qbs" title="Wiki">по ссылке</a> или посмотреть примеры (включены в пакет). Загвоздка в том, что эта штука использует файл настроек, который, во-первых, нужно сначала сгенерировать, во-вторых, хранится в домашней директории (и только там). В теории, генерация файла настроек (<code>~/.config/QtProject/qbs.conf</code>) происходит следующим образом:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -74,7 +74,7 @@ qutim\qbs\toolchain=clang, llvm, gcc
|
||||
|
||||
<p><a href="/resources/docs/qutim-qt5-git/qbs-qutim.conf" title="Файл" type="text/plain">qbs-qutim.conf</a></p>
|
||||
|
||||
<h3><a href="#patch" class="anchor" name="patch"><span class="octicon octicon-link"></span></a>Готовим патч для исходников</h3>
|
||||
<h3><a href="#patch" class="anchor" id="patch"><span class="octicon octicon-link"></span></a>Готовим патч для исходников</h3>
|
||||
<p>Первая проблема - <code>clang</code> (по крайней мере, в Archlinux):</p>
|
||||
|
||||
{% highlight diff %}
|
||||
@ -110,7 +110,7 @@ diff -ruN qutim.orig/protocols/vkontakte/vreen/vreen.qbs qutim/protocols/vkontak
|
||||
|
||||
<p><a href="/resources/docs/qutim-qt5-git/qutim-qbs-1.1.patch" title="Файл" type="text/plain">qutim-qbs-1.1.patch</a></p>
|
||||
|
||||
<h3><a href="#sources" class="anchor" name="sources"><span class="octicon octicon-link"></span></a>Получаем исходники</h3>
|
||||
<h3><a href="#sources" class="anchor" id="sources"><span class="octicon octicon-link"></span></a>Получаем исходники</h3>
|
||||
|
||||
{% highlight bash %}
|
||||
# клонируем репозиторий
|
||||
@ -128,7 +128,7 @@ cd ..
|
||||
patch -p0 -i qutim-qbs-1.1.patch
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#build" class="anchor" name="build"><span class="octicon octicon-link"></span></a>Сборка</h2>
|
||||
<h2><a href="#build" class="anchor" id="build"><span class="octicon octicon-link"></span></a>Сборка</h2>
|
||||
|
||||
{% highlight bash %}
|
||||
cd qutim
|
||||
@ -137,7 +137,7 @@ HOME=$(pwd) qbs -j $(nproc) -d ../build release profile:qutim
|
||||
|
||||
<p>Я пытался сделать универсальный способ сборки пакета, поэтому такое странное переназначение домашней директории. Флаг <code>-j</code> указывает число потоков сборки, флаг <code>-d</code> директорию сборки, <code>release</code> тип сборки (debug, release), <code>profile</code> используемый профиль, описанный в файле настроек.</p>
|
||||
|
||||
<h2><a href="#install" class="anchor" name="install"><span class="octicon octicon-link"></span></a>Установка</h2>
|
||||
<h2><a href="#install" class="anchor" id="install"><span class="octicon octicon-link"></span></a>Установка</h2>
|
||||
|
||||
{% highlight bash %}
|
||||
HOME=$(pwd) sudo qbs install -d ../build --install-root "/usr" profile:qutim
|
||||
@ -145,7 +145,7 @@ HOME=$(pwd) sudo qbs install -d ../build --install-root "/usr" profile:qutim
|
||||
|
||||
<p>Из нового - указание корневого каталога (<code>--install-root</code>). Без этого пакет будет установлен в <code>/</code> (<code>/bin</code> и <code>/lib</code>).</p>
|
||||
|
||||
<h2><a href="#pkgbuild" class="anchor" name="pkgbuild"><span class="octicon octicon-link"></span></a>PKGBUILD</h2>
|
||||
<h2><a href="#pkgbuild" class="anchor" id="pkgbuild"><span class="octicon octicon-link"></span></a>PKGBUILD</h2>
|
||||
|
||||
{% highlight bash %}
|
||||
pkgname=qutim-qt5-git
|
||||
|
@ -8,7 +8,7 @@ title: Изменения сайта
|
||||
short: site-changes
|
||||
description: Решил немного поиграться с сайтом. Краткий список изменений ниже.
|
||||
---
|
||||
<h2><a href="#list" class="anchor" name="list"><span class="octicon octicon-link"></span></a>Cписок изменений:</h2>
|
||||
<h2><a href="#list" class="anchor" id="list"><span class="octicon octicon-link"></span></a>Cписок изменений:</h2>
|
||||
<ul>
|
||||
<li>Арендовал домен <code>arcanis.name</code>. Теперь, как и все белые люди, имею нормальный адрес. Небольшое описание (мне, как человеку далекому от интернет-технологий, пришлось немного попариться на эту тему). Арендуем домен, подключаем услугу редактирования DNS (для Ru-center <a href="http://www.nic.ru/dns/service/dns_hosting/" title="Сервис">DNS-master</a>) - суммарно мне обошлось около 1100 рублей/год. Кладем в наш репозиторий с сайтом файл CNAME, содержащий имя желаемого домена. Идем и добавляем две записи в DNS для нашего домена:
|
||||
|
||||
|
@ -8,7 +8,7 @@ title: Создание собственного репозитория
|
||||
short: creating-custom-repo
|
||||
description: Небольшая статья, посвященная созданию собственного репозитория для Archlinux.
|
||||
---
|
||||
<h2><a href="#prepare" class="anchor" name="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
|
||||
<h2><a href="#prepare" class="anchor" id="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
|
||||
<p>Для начала находим сервер и желание с ним заниматься сексом. Для простоты, лучше, чтобы там стоял Archlinux, хотя, это и не совсем обязательно (можно создать отдельный корень под Arch). Из пакетов, пожалуй, нам понадобится только два, <code>devtools</code> и сам <code>pacman</code>:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -56,7 +56,7 @@ fi
|
||||
|
||||
<p>Директории <code>${REPODIR}/{i686,x86_64}</code> для самого репозитория, <code>${PREPAREDIR}</code> - директория, где будут лежать собранные пакеты, <code>${STAGINGDIR}</code> - директория, откуда будут собираться пакеты.</p>
|
||||
|
||||
<h2><a href="#theory" class="anchor" name="theory"><span class="octicon octicon-link"></span></a>Немного теории</h2>
|
||||
<h2><a href="#theory" class="anchor" id="theory"><span class="octicon octicon-link"></span></a>Немного теории</h2>
|
||||
<p>Создаем директорию, расшариваем ее (например, по <a href="/ru/2014/03/06/site-changes/" title="Статья про изменения сайта">ftp</a>). В ней две субдиректории - <code>i686</code> и <code>x86_64</code>, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.</p>
|
||||
|
||||
<p>Процесс обновления репозитория можно разбить на следующие части:</p>
|
||||
@ -75,7 +75,7 @@ fi
|
||||
|
||||
<p>Теперь по шагам.</p>
|
||||
|
||||
<h3><a href="#pkgbuild" class="anchor" name="pkgbuild"><span class="octicon octicon-link"></span></a>Создание PKGBUILD'ов</h3>
|
||||
<h3><a href="#pkgbuild" class="anchor" id="pkgbuild"><span class="octicon octicon-link"></span></a>Создание PKGBUILD'ов</h3>
|
||||
<p>Скачаем исходники для всех нужных пакетов из AUR'а:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -83,7 +83,7 @@ cd "${STAGINGDIR}"
|
||||
yaourt -G package-name
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#building" class="anchor" name="building"><span class="octicon octicon-link"></span></a>Сборка пакетов</h3>
|
||||
<h3><a href="#building" class="anchor" id="building"><span class="octicon octicon-link"></span></a>Сборка пакетов</h3>
|
||||
<p>Автоматически соберем каждый пакет:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -132,7 +132,7 @@ username ALL=NOPASSWD: /usr/bin/staging-x86_64-build
|
||||
username ALL=NOPASSWD: /usr/bin/multilib-staging-build
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#signing" class="anchor" name="signing"><span class="octicon octicon-link"></span></a>Подпись пакетов</h3>
|
||||
<h3><a href="#signing" class="anchor" id="signing"><span class="octicon octicon-link"></span></a>Подпись пакетов</h3>
|
||||
|
||||
{% highlight bash %}
|
||||
# подпись
|
||||
@ -147,7 +147,7 @@ fi
|
||||
|
||||
<p>Для удобства рекомендую настроить <a href="https://wiki.archlinux.org/index.php/GPG#gpg-agent" title="ArchWiki">gpg-agent</a>.</p>
|
||||
|
||||
<h3><a href="#list" class="anchor" name="list"><span class="octicon octicon-link"></span></a>Создание списка пакетов</h3>
|
||||
<h3><a href="#list" class="anchor" id="list"><span class="octicon octicon-link"></span></a>Создание списка пакетов</h3>
|
||||
|
||||
{% highlight bash %}
|
||||
# создание списка пакетов
|
||||
@ -158,7 +158,7 @@ echo -e "${bwhite}[II] ${bblue}=>${cclose} i686 packages: \n${bwhite}${i686_PACK
|
||||
echo -e "${bwhite}[II] ${bblue}=>${cclose} x86_64 packages: \n${bwhite}${x86_64_PACKAGES}${cclose}"
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#updating" class="anchor" name="updating"><span class="octicon octicon-link"></span></a>Обновление репозиториев</h3>
|
||||
<h3><a href="#updating" class="anchor" id="updating"><span class="octicon octicon-link"></span></a>Обновление репозиториев</h3>
|
||||
<p>Функция для удаления пакетов из базы данных и из репозитория:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -206,7 +206,7 @@ for PACKAGE in ${x86_64_PACKAGES}; do
|
||||
done
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#clear" class="anchor" name="clear"><span class="octicon octicon-link"></span></a>Очистка</h3>
|
||||
<h3><a href="#clear" class="anchor" id="clear"><span class="octicon octicon-link"></span></a>Очистка</h3>
|
||||
|
||||
{% highlight bash %}
|
||||
# очистка
|
||||
@ -216,7 +216,7 @@ cd "${STAGINGDIR}"
|
||||
/usr/bin/rm -rf *
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#symlinks" class="anchor" name="symlinks"><span class="octicon octicon-link"></span></a>Создание симлинков</h3>
|
||||
<h3><a href="#symlinks" class="anchor" id="symlinks"><span class="octicon octicon-link"></span></a>Создание симлинков</h3>
|
||||
<p>Вы можете захотеть создать директорию, которая будет содержать симлинки на актуальные версии пакетов с именами, не содержащими версии:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -240,10 +240,10 @@ if [ ${SYMLINK} == "yes" ]; then
|
||||
fi
|
||||
{% endhighlight %}
|
||||
|
||||
<h3><a href="#file" class="anchor" name="file"><span class="octicon octicon-link"></span></a>Файл</h3>
|
||||
<h3><a href="#file" class="anchor" id="file"><span class="octicon octicon-link"></span></a>Файл</h3>
|
||||
<p><a href="https://github.com/arcan1s/repo-scripts" title="GitHub">Скрипты</a> целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.</p>
|
||||
|
||||
<h2><a href="#using" class="anchor" name="using"><span class="octicon octicon-link"></span></a>Использование репозитория</h2>
|
||||
<h2><a href="#using" class="anchor" id="using"><span class="octicon octicon-link"></span></a>Использование репозитория</h2>
|
||||
<p>Просто добавляем в файл <code>/etc/pacman.conf</code> следующие строки:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
|
@ -8,19 +8,19 @@ title: Loveless
|
||||
short: loveless
|
||||
description: На правах оффтопа, небольшая поэма из Final Fantasy VII Crisis Core.
|
||||
---
|
||||
<h2><a href="#prologue" class="anchor" name="prologue"><span class="octicon octicon-link"></span></a>Prologue</h2>
|
||||
<h2><a href="#prologue" class="anchor" id="prologue"><span class="octicon octicon-link"></span></a>Prologue</h2>
|
||||
<p>When the war of the beasts brings about the world's end<br>
|
||||
The goddess descends from the sky<br>
|
||||
Wings of light and dark spread afar<br>
|
||||
She guides us to bliss, her gift everlasting.</p>
|
||||
|
||||
<h2><a href="#acti" class="anchor" name="acti"><span class="octicon octicon-link"></span></a>Act I</h2>
|
||||
<h2><a href="#acti" class="anchor" id="acti"><span class="octicon octicon-link"></span></a>Act I</h2>
|
||||
<p>Infinite in mystery is the gift of the Goddess<br>
|
||||
We seek it thus, and take to the sky<br>
|
||||
Ripples form on the water's surface<br>
|
||||
The wandering soul knows no rest.</p>
|
||||
|
||||
<h2><a href="#actii" class="anchor" name="actii"><span class="octicon octicon-link"></span></a>Act II</h2>
|
||||
<h2><a href="#actii" class="anchor" id="actii"><span class="octicon octicon-link"></span></a>Act II</h2>
|
||||
<p>There is no hate, only joy<br>
|
||||
For you are beloved by the goddess<br>
|
||||
Hero of the dawn, Healer of worlds<br>
|
||||
@ -28,7 +28,7 @@ Dreams of the morrow hath the shattered soul<br>
|
||||
Pride is lost<br>
|
||||
Wings stripped away, the end is nigh.</p>
|
||||
|
||||
<h2><a href="#actiii" class="anchor" name="actiii"><span class="octicon octicon-link"></span></a>Act III</h2>
|
||||
<h2><a href="#actiii" class="anchor" id="actiii"><span class="octicon octicon-link"></span></a>Act III</h2>
|
||||
<p>My friend, do you fly away now?<br>
|
||||
To a world that abhors you and I?<br>
|
||||
All that awaits you is a somber morrow<br>
|
||||
@ -38,7 +38,7 @@ Is the bringer of life, the gift of the goddess<br>
|
||||
Even if the morrow is barren of promises<br>
|
||||
Nothing shall forestall my return.</p>
|
||||
|
||||
<h2><a href="#activ" class="anchor" name="activ"><span class="octicon octicon-link"></span></a>Act IV</h2>
|
||||
<h2><a href="#activ" class="anchor" id="activ"><span class="octicon octicon-link"></span></a>Act IV</h2>
|
||||
<p>My friend, the fates are cruel<br>
|
||||
There are no dreams, no honor remains<br>
|
||||
The arrow has left, the bow of the goddess<br>
|
||||
@ -50,7 +50,7 @@ Legend shall speak<br>
|
||||
Of sacrifice at world's end<br>
|
||||
The wind sails over the water's surface.</p>
|
||||
|
||||
<h2><a href="#actv" class="anchor" name="actv"><span class="octicon octicon-link"></span></a>Act V</h2>
|
||||
<h2><a href="#actv" class="anchor" id="actv"><span class="octicon octicon-link"></span></a>Act V</h2>
|
||||
<p>Even if the morrow is barren of promises<br>
|
||||
Nothing shall forestall my return<br>
|
||||
To become the dew that quenches the land<br>
|
||||
|
@ -8,7 +8,7 @@ title: Приложения, которые я использую
|
||||
short: my-desktop
|
||||
description: Небольшая статья, посвященная набору приложений и расширений, которые я использую в повседневной жизни на моем домашнем компьютере.
|
||||
---
|
||||
<h2><a href="#apps" class="anchor" name="apps"><span class="octicon octicon-link"></span></a>Приложения</h2>
|
||||
<h2><a href="#apps" class="anchor" id="apps"><span class="octicon octicon-link"></span></a>Приложения</h2>
|
||||
<ul>
|
||||
<li><p><b>Shell</b> - zshrc без вариантов. Некоторое описание моих настроек шелла могут быть найдены <a href="/ru/2014/01/14/about-zshrc/" title="Статья о zshrc">тут</a>. Сами настройки хранятся <a href="https://raw.githubusercontent.com/arcan1s/dotfiles/master/zshrc" title="Файл" type="text/plain">тут</a> или <a href="https://raw.githubusercontent.com/arcan1s/dotfiles/master/zshrc_server" title="Файл" type="text/plain">тут</a>.</p></li>
|
||||
|
||||
@ -42,7 +42,7 @@ description: Небольшая статья, посвященная набор
|
||||
</ul>
|
||||
|
||||
|
||||
<h2><a href="#kde" class="anchor" name="kde"><span class="octicon octicon-link"></span></a>Настройка KDE</h2>
|
||||
<h2><a href="#kde" class="anchor" id="kde"><span class="octicon octicon-link"></span></a>Настройка KDE</h2>
|
||||
<div class="thumbnails">
|
||||
{% assign scrdesc = "Нотариально заверенный скриншот" %}
|
||||
{% assign scrname = "kde" %}
|
||||
@ -61,7 +61,7 @@ description: Небольшая статья, посвященная набор
|
||||
</div>
|
||||
|
||||
|
||||
<h2><a href="#firefox" class="anchor" name="firefox"><span class="octicon octicon-link"></span></a>Настройка Firefox</h2>
|
||||
<h2><a href="#firefox" class="anchor" id="firefox"><span class="octicon octicon-link"></span></a>Настройка Firefox</h2>
|
||||
<p>В самих настройках ничего интересного нет, я просто напишу список аддонов. Дико радует, что для того, чтобы интерфейс был минималистичным (и удобным), нужно поставить кучу плагинов.</p>
|
||||
<ul>
|
||||
<li><p><b>Adblock plus</b> - куда же без него.</p></li>
|
||||
|
@ -8,15 +8,15 @@ title: Отключение baloo, gentoo-way
|
||||
short: disabling-baloo
|
||||
description: Пока ононимные онолитеги ЛОР'а ноют на тему baloo, я предпочел потратить 15 минут на то, чтобы отвязать приложения от этого чуда человеческой мысли.
|
||||
---
|
||||
<h2><a href="#disclaimer" class="anchor" name="disclaimer"><span class="octicon octicon-link"></span></a>Дисклеймер</h2>
|
||||
<h2><a href="#disclaimer" class="anchor" id="disclaimer"><span class="octicon octicon-link"></span></a>Дисклеймер</h2>
|
||||
<p>Сам этим я не пользуюсь, поскольку предпочитаю менее деструктивные методы. Однако, судя по всему, все работает без проблем, поскольку жалоб нет. Так как патч делался действительно за несколько минут, то он просто выкорчевывает все вызовы baloo из исходников (возможно, когда-нибудь я сделаю нормальный патч).</p>
|
||||
|
||||
<p>С другой стороны, я настоятельно рекомендую людям, которым по каким-либо причинам baloo не нужен, отключить его из меню настроек (добавили пункт в 4.13.1), либо воспользоваться этой <a href="http://blog.andreascarpino.it/disabling-baloo-the-arch-way/" title="Блог Скарпино">статьей</a>.</p>
|
||||
|
||||
<h2><a href="#intro" class="anchor" name="intro"><span class="octicon octicon-link"></span></a>Введение</h2>
|
||||
<h2><a href="#intro" class="anchor" id="intro"><span class="octicon octicon-link"></span></a>Введение</h2>
|
||||
<p>В Archlinux, на текущий момент (2014-05-18) от baloo, помимо <b>baloo-widgets</b>, зависит <b>gwenview</b> и <b>kdepim</b>. В версии 4.13.0, почему то, <b>kactivities</b> тоже зависел от baloo, однако, эта зависимость не требовалась явно (таким образом, достаточно было просто пересобрать его, удалив baloo из списка зависимостей).</p>
|
||||
|
||||
<h2><a href="#gwenview" class="anchor" name="gwenview"><span class="octicon octicon-link"></span></a>gwenview</h2>
|
||||
<h2><a href="#gwenview" class="anchor" id="gwenview"><span class="octicon octicon-link"></span></a>gwenview</h2>
|
||||
<p>Тут все довольно просто. Разработчики сами позаботились за нас о возможных пожеланиях простых пользователей и добавили специальный флаг:</p>
|
||||
|
||||
{% highlight cmake %}
|
||||
@ -32,8 +32,8 @@ cmake ../gwenview-${pkgver} \
|
||||
-DGWENVIEW_SEMANTICINFO_BACKEND=None
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#kdepim" class="anchor" name="kdepim"><span class="octicon octicon-link"></span></a>kdepim</h2>
|
||||
<h2><a href="#kdepim" class="anchor" id="kdepim"><span class="octicon octicon-link"></span></a>kdepim</h2>
|
||||
<p>Так как делалось все на скорую руку, то я предпочел пробежаться по исходникам с помощью grep и найти все упоминания baloo. Нужные строки (а это указания на baloo в файлах CMakeLists.txt, вызовы функций из его библиотек, объявления заголовочных файлов) просто закомментировал (в исходном коде местами пришлось добавить фейковые вызовы). Патч полностью здесь приводить не буду (он, к тому же, немного большой), а дам <a href="https://gist.github.com/arcan1s/b698bb586faef627b3bb" title="Gist">ссылку на него</a> (4.13.3). Далее просто требуется применить этот патч к исходникам и пересобрать kdepim.</p>
|
||||
|
||||
<h2><a href="#packages" class="anchor" name="packages"><span class="octicon octicon-link"></span></a>Пакеты</h2>
|
||||
<h2><a href="#packages" class="anchor" id="packages"><span class="octicon octicon-link"></span></a>Пакеты</h2>
|
||||
<p>Все пакеты для Archlinux для обеих архитектур доступны <a href="https://wiki.archlinux.org/index.php/Unofficial_user_repositories#arcanisrepo" title="ArchWiki">в моем репозитории</a>.</p>
|
||||
|
@ -8,7 +8,7 @@ title: Немного об Arch User Repository
|
||||
short: about-aur
|
||||
description: Статья посвященная работе с пользовательским репозиторием Archlinux. Постарался сделать акцент на сопровождении пакетов. Данная статья, в большей степени, представляет собой компиляцию нескольких англоязычных статей Wiki и немного личного опыта. Поэтому не уверен, что в данной статье на английском языке будет толк.
|
||||
---
|
||||
<h2><a href="#aur" class="anchor" name="aur"><span class="octicon octicon-link"></span></a>AUR</h2>
|
||||
<h2><a href="#aur" class="anchor" id="aur"><span class="octicon octicon-link"></span></a>AUR</h2>
|
||||
<p>Итак, <a href="https://aur.archlinux.org/" title="AUR">Arch User Repository</a> (AUR или АУР) - это репозиторий, поддерживаемый и развиваемый практически исключительно сообществом Archlinux. Есть еще отдельные люди, называемые <a href="https://www.archlinux.org/trustedusers/" title="Доверенные пользователи">доверенными пользователями</a> (TU), на плечах которых лежит своеобразная "модерация" этого репозитория. На мой скромный взгляд, едва ли не единственное отличие Archlinux от других дистрибутивов - это наличие AUR'а. Отличие этого репозитория от обычных прежде всего в том, что он <b>не содержит</b> архивов с исходниками или собранных пакетов - только скрипт сборки (PKGBUILD) и, возможно, дополнительные текстовые файлы.</p>
|
||||
|
||||
<p>Конечно, вручную скачивать архив с сайта AUR'а, а также проверять обновления, не совсем удобно, поэтому существует <a href="https://wiki.archlinux.org/index.php/AUR_Helpers" title="ArchWiki">набор хелперов</a>. Большинство хелперов представляет собой обертку над pacman. Я выделю только два - <a href="https://aur.archlinux.org/packages/packer/" title="AUR">packer</a> - минималистичный, удобный, быстрый - и <a href="https://aur.archlinux.org/packages/yaourt/" title="AUR">yaourt</a> - на шелле, но зато более функциональный. По не особо понятным мне причинам, в русскоязычном сегменте большее распространение получил yaourt, зарубежом - packer.</p>
|
||||
@ -25,7 +25,7 @@ description: Статья посвященная работе с пользов
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h2><a href="#install-from-aur" class="anchor" name="install-from-aur"><span class="octicon octicon-link"></span></a>Установка с AUR</h2>
|
||||
<h2><a href="#install-from-aur" class="anchor" id="install-from-aur"><span class="octicon octicon-link"></span></a>Установка с AUR</h2>
|
||||
<p>Для работы с AUR требуется установить группу пакетов <a href="https://www.archlinux.org/groups/x86_64/base-devel/" title="Группа пакетов Archlinux">base-devel</a>. Пакеты с этой группы, как правило, <b>не включены</b> в зависимости. Рекомендуемая установка пакетов с AUR выглядит примерно так:</p>
|
||||
|
||||
{% highlight bash %}
|
||||
@ -43,7 +43,7 @@ makepkg -csrf
|
||||
pacman -U foo-0.1-1-i686.pkg.tar.xz
|
||||
{% endhighlight %}
|
||||
|
||||
<h2><a href="#upload-to-aur" class="anchor" name="upload-to-aur"><span class="octicon octicon-link"></span></a>Загрузка пакета в AUR</h2>
|
||||
<h2><a href="#upload-to-aur" class="anchor" id="upload-to-aur"><span class="octicon octicon-link"></span></a>Загрузка пакета в AUR</h2>
|
||||
<p><b>Никаких</b> <code>makepkg -S</code>. С недавних пор данный метод считается устаревшим. Но обо всем по-порядку</p>
|
||||
|
||||
<p>Нам нужно загрузить архив на сайт. В этом архиве <b>должны быть</b> PKGBUILD и .AURINFO. По поводу первого я расскажу еще чуть ниже, второй генерируется автоматически. Также, там могут быть установочные скрипты (*.install), патчи, файлы лицензии (если не предоставляются апстримом с исходниками), сервисы systemd, скрипты запуска - это то, что обычно включено. <b>Никаких исходников</b>. И тем более <b>никаких бинарников</b>. (Шутки-шутками, а я помню пакет, в котором исходный код записывался с помощью <code>cat << EOF</code> прямо в тексте PKGBUILD'а.)</p>
|
||||
@ -60,10 +60,10 @@ pacman -U foo-0.1-1-i686.pkg.tar.xz
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h2><a href="#maintaining" class="anchor" name="maintaining"><span class="octicon octicon-link"></span></a>Сопровождение пакетов</h2>
|
||||
<h2><a href="#maintaining" class="anchor" id="maintaining"><span class="octicon octicon-link"></span></a>Сопровождение пакетов</h2>
|
||||
<p>Если вы сопровождаете пакет и хотите его обновить, просто загрузите обновленный пакет еще раз. Читайте - и, по возможности, отвечайте - комментарии к вашему пакету, там иногда могут быть очень полезные замечания или дельные предложения. Если вы не хотите сопровождать больше ваш пакет (или нет времени), то, пожалуйста, нажмите на кнопку справа (бросить/disown), чтобы те, кто в нем заинтересован, смогли поддерживать его. Если есть пакет, который не имеет сопровождающего, и вы хотели бы им стать, вы также можете нажать на соответствующую кнопку справа в веб-интерфейсе =)</p>
|
||||
|
||||
<h2><a href="#aur-list" class="anchor" name="aur-list"><span class="octicon octicon-link"></span></a>Список рассылки AUR</h2>
|
||||
<h2><a href="#aur-list" class="anchor" id="aur-list"><span class="octicon octicon-link"></span></a>Список рассылки AUR</h2>
|
||||
<p>По любому вопросу, связанному с работой AUR вы всегда можете обратиться в <a href="https://mailman.archlinux.org/mailman/listinfo/aur-general" title="Список рассылки">список рассылки</a> <a href="mailto:aur-general@archlinux.org" title="email">aur-general (at) archlinux (dot) org</a>. На ваш вопрос ответят, вероятно, достаточно быстро; причем, ответить могут не только обычные пользователи, но и доверенные пользователи. Также, если вы вдруг неуверены в своем PKGBUILD'е, вы тоже можете всегда обратиться в список рассылки и показать свой PKGBUILD.</p>
|
||||
|
||||
<p>Существует также отдельный список <a href="https://mailman.archlinux.org/mailman/listinfo/aur-requests" title="Список рассылки">рассылки для запросов</a> <a href="mailto:aur-requests@archlinux.org" title="email">aur-requests (at) archlinux (dot) org</a>. На текущий момент (AUR 3.2.0) общение через данный список рассылки напрямую не рекомендуется - все обычные запросы должны отсылаться с использованием веб-интерфейса (<a href="https://mailman.archlinux.org/pipermail/aur-general/2014-July/029045.html" title="Тред">подробности</a>). Запросы, которые вы можете послать:
|
||||
@ -77,7 +77,7 @@ pacman -U foo-0.1-1-i686.pkg.tar.xz
|
||||
<p>Пожалуйста, пишите письма в список рассылки аккуратно. И, желательно, вежливо (а то потом будете генерировать что-то вроде <a href="http://linux.sytes.net/post/2014/05/aur-driven-by-idiots/" title="Блог">такого</a>) (мы все знаем, что мы арче-школьники, не надо нас еще раз этим тыкать, мы обидимся). Также старайтесь избегать избыточного цитирования. И - это практически требование - предоставляйте ссылки на пакеты. Хороший вариант - составление списка ссылок в конце письма, а в теле ссылаться на них таким образом <code>[1]</code>. Если не уверены в корректности запроса - посмотрите <a href="https://mailman.archlinux.org/pipermail/aur-requests/" title="Список рассылки">архив списка рассылки</a>.</p>
|
||||
|
||||
|
||||
<h2><a href="#pkgbuild" class="anchor" name="pkgbuild"><span class="octicon octicon-link"></span></a>PKGBUILD</h2>
|
||||
<h2><a href="#pkgbuild" class="anchor" id="pkgbuild"><span class="octicon octicon-link"></span></a>PKGBUILD</h2>
|
||||
<p>PKGBUILD - это, де-факто, сценарий шелла, указывающий как и почему (в смысле, зачем) собираться пакету. Он имеет 4 части:
|
||||
<ul>
|
||||
<li><b>Объявление основных переменных</b>. Об этом я расскажу чуть ниже.</li>
|
||||
@ -87,7 +87,7 @@ pacman -U foo-0.1-1-i686.pkg.tar.xz
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h3><a href="#pkgbuild-vars" class="anchor" name="pkgbuild-vars"><span class="octicon octicon-link"></span></a>Переменные PKGBUILD</h3>
|
||||
<h3><a href="#pkgbuild-vars" class="anchor" id="pkgbuild-vars"><span class="octicon octicon-link"></span></a>Переменные PKGBUILD</h3>
|
||||
<p>Основные переменные следующие:
|
||||
<ul>
|
||||
<li><b>pkgbase</b> - группа пакетов. Например, пакеты <code>python-pyqt4</code> и <code>python2-pyqt4</code> имеют одну группу <code>pyqt4</code>.</li>
|
||||
@ -108,7 +108,7 @@ pacman -U foo-0.1-1-i686.pkg.tar.xz
|
||||
|
||||
<p>Все перечисленные выше переменные указываются в заголовке PKGBUILD. К ним также можно обращаться внутри PKGBUILD'а. Дополнительно стоит упомянуть переменные <b>startdir</b> - директория, откуда запускается makepkg, <b>srcdir</b> - директория с исходниками (<code>$startdir/src</code> по умолчанию), <b>pkgdir</b> - директория с собранным пакетом (<code>$startdir/pkg/$pkgname</code> по умолчанию). <b>Не используйте</b> переменную <b>startdir</b> без крайней необходимости.</p>
|
||||
|
||||
<h3><a href="#pkgbuild-features" class="anchor" name="pkgbuild-features"><span class="octicon octicon-link"></span></a>Некоторые особенности PKGBUILD'ов</h3>
|
||||
<h3><a href="#pkgbuild-features" class="anchor" id="pkgbuild-features"><span class="octicon octicon-link"></span></a>Некоторые особенности PKGBUILD'ов</h3>
|
||||
<p>К PKGBUILD применимы все правила программирования на шелле. Например, "смешная шутка":
|
||||
|
||||
{% highlight bash %}
|
||||
@ -176,7 +176,7 @@ pkgver() {
|
||||
Также, я отмечу, что некоторые пакеты имеют свой устоявшийся формат, поэтому, зачастую, полезно поискать что-то похожее в AUR и сделать свой PKGBUILD по образу и подобию.
|
||||
</p>
|
||||
|
||||
<h2><a href="#links" class="anchor" name="links"><span class="octicon octicon-link"></span></a>Дополнительные ссылки</h2>
|
||||
<h2><a href="#links" class="anchor" id="links"><span class="octicon octicon-link"></span></a>Дополнительные ссылки</h2>
|
||||
<ul>
|
||||
<li><a href="http://pkgbuild.com/git/aur-mirror.git/" title="Зеркало">Зеркало (git)</a></li>
|
||||
<li><a href="https://wiki.archlinux.org/index.php/AUR" title="ArchWiki">ArchWiki про AUR</a></li>
|
||||
|
@ -8,10 +8,10 @@ title: Написание своих дополнений для Shell. Zsh
|
||||
short: writting-own-completions-p1
|
||||
description: <figure class="img"><img src="/resources/papers/zsh_completion.png" alt="bash_completion"></figure> В данных статьях описываются некоторые основы создания файлов дополнений для собственной программы.
|
||||
---
|
||||
<h2><a href="#preamble" class="anchor" name="preamble"><span class="octicon octicon-link"></span></a>Преамбула</h2>
|
||||
<h2><a href="#preamble" class="anchor" id="preamble"><span class="octicon octicon-link"></span></a>Преамбула</h2>
|
||||
<p>В процессе разработки <a href="/ru/projects/netctl-gui" title="Страница netctl-gui">одного своего проекта</a> возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.</p>
|
||||
|
||||
<h2><a href="#introduction" class="anchor" name="introduction"><span class="octicon octicon-link"></span></a>Введение</h2>
|
||||
<h2><a href="#introduction" class="anchor" id="introduction"><span class="octicon octicon-link"></span></a>Введение</h2>
|
||||
<p>Существует несколько возможных вариантов написания файла автодополнения для zsh. В случае данной статьи я остановлюсь только на одном из них, который предоставляет большие возможности и не требует больших затрат (например, работы с регулярными выражениями).</p>
|
||||
|
||||
<p>Рассмотрим на примере моего же приложения, часть справки к которому выглядит таким образом:</p>
|
||||
@ -32,7 +32,7 @@ netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FI
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h2><a href="#file" class="anchor" name="file"><span class="octicon octicon-link"></span></a>Структура файла</h2>
|
||||
<h2><a href="#file" class="anchor" id="file"><span class="octicon octicon-link"></span></a>Структура файла</h2>
|
||||
<p>В заголовке должно быть обязательно указано, что это файл дополнений и для каких приложений он служит (можно строкой, если в файле будет содержаться дополнение для нескольких команд):
|
||||
|
||||
{% highlight bash %}
|
||||
@ -68,7 +68,7 @@ esac
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#flags" class="anchor" name="flags"><span class="octicon octicon-link"></span></a>Флаги</h2>
|
||||
<h2><a href="#flags" class="anchor" id="flags"><span class="octicon octicon-link"></span></a>Флаги</h2>
|
||||
<p>Как я и говорил во введении, существует несколько способов создания подобных файлов. В частности, они различаются декларацией флагов и их дальнейшей обработкой. В данном случае я буду использовать команду <code>_arguments</code>, которая требует специфичный формат переменных. Выглядит он таким образом <code>ФЛАГ[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ</code>. Последние два поля не обязательны и, как Вы увидите чуть ниже, вовсе и не нужны в некоторых местах. Если Вы предусматриваете два флага (короткий и длинный формат) на одно действие, то формат чуть-чуть усложняется: <code>{(ФЛАГ_2)ФЛАГ_1,(ФЛАГ_1)ФЛАГ_2}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ</code>. Замечу, что, если Вы хотите сделать дополнения для двух типов флагов, но некоторые флаги не имеют второй записи, то Вам необходимо продублировать его таким образом: <code>{ФЛАГ,ФЛАГ}[описание]:СООБЩЕНИЕ:ДЕЙСТВИЕ</code>. <code>СООБЩЕНИЕ</code> - сообщение, которое будет показано, <code>ДЕЙСТВИЕ</code> - действие, которое будет выполнено после этого флага. В случае данного туториала, <code>ДЕЙСТВИЕ</code> будет иметь вид <code>->СОСТОЯНИЕ</code>.</p>
|
||||
|
||||
<p>Итак, согласно нашим требованиям, получается такое объявление аргументов:
|
||||
@ -86,7 +86,7 @@ _netctl_gui_arglist=(
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#variables" class="anchor" name="variables"><span class="octicon octicon-link"></span></a>Массивы переменных</h2>
|
||||
<h2><a href="#variables" class="anchor" id="variables"><span class="octicon octicon-link"></span></a>Массивы переменных</h2>
|
||||
<p>В нашем случае есть два статических массива (не изменятся ни сейчас, ни через пять минут) (массивы умышленно уменьшены):
|
||||
|
||||
{% highlight bash %}
|
||||
@ -111,7 +111,7 @@ _netctl_profiles() {
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#body" class="anchor" name="body"><span class="octicon octicon-link"></span></a>Тело функции</h2>
|
||||
<h2><a href="#body" class="anchor" id="body"><span class="octicon octicon-link"></span></a>Тело функции</h2>
|
||||
<p>Помните, там выше было что-то про состояние? Оно хранится в переменной <code>$state</code>, и в теле функции делается проверка на то, чему оно равно, чтобы подобрать соответствующие действия. В начале также нужно не забыть вызвать <code>_arguments</code> с нашими флагами.
|
||||
|
||||
{% highlight bash %}
|
||||
@ -146,7 +146,7 @@ _netctl-gui() {
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#conclusion" class="anchor" name="conclusion"><span class="octicon octicon-link"></span></a>Заключение</h2>
|
||||
<h2><a href="#conclusion" class="anchor" id="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" title="Файл" type="text/plain">в моем репозитории</a>.</p>
|
||||
|
||||
<p>Дополнительная информация может быть найдена в репозитории <a href="https://github.com/zsh-users/zsh-completions" title="GitHub">zsh-completions</a>. Например, там есть такой <a href="https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org" title="Туториал">How-To</a>. А еще там есть много примеров.</p>
|
||||
|
@ -8,10 +8,10 @@ title: Написание своих дополнений для Shell. Bash
|
||||
short: writting-own-completions-p2
|
||||
description: <figure class="img"><img src="/resources/papers/bash_completion.png" alt="bash_completion"></figure> В данных статьях описываются некоторые основы создания файлов дополнений для собственной программы.
|
||||
---
|
||||
<h2><a href="#preamble" class="anchor" name="preamble"><span class="octicon octicon-link"></span></a>Преамбула</h2>
|
||||
<h2><a href="#preamble" class="anchor" id="preamble"><span class="octicon octicon-link"></span></a>Преамбула</h2>
|
||||
<p>В процессе разработки <a href="/ru/projects/netctl-gui" title="Страница netctl-gui">одного своего проекта</a> возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.</p>
|
||||
|
||||
<h2><a href="#introduction" class="anchor" name="introduction"><span class="octicon octicon-link"></span></a>Введение</h2>
|
||||
<h2><a href="#introduction" class="anchor" id="introduction"><span class="octicon octicon-link"></span></a>Введение</h2>
|
||||
<p>Bash, в <a href="/ru/2014/07/17/writting-own-completions-p1" title="Статья о дополнениях zsh">отличие от zsh</a>, требует к себе некоторого велосипедостроения в отношении дополнений. Бегло погуглив, я не нашел более-менее нормальных туториалов, потому за основу были взяты имеющиеся в системе файлы дополнений для <code>pacman</code>.</p>
|
||||
|
||||
<p>Рассмотрим на примере все того же моего приложения. Я напомню, что часть справки к которому выглядит таким образом:</p>
|
||||
@ -32,7 +32,7 @@ netctl-gui [ -h | --help ] [ -e ESSID | --essid ESSID ] [ -с FILE | --config FI
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h2><a href="#file" class="anchor" name="file"><span class="octicon octicon-link"></span></a>Структура файла</h2>
|
||||
<h2><a href="#file" class="anchor" id="file"><span class="octicon octicon-link"></span></a>Структура файла</h2>
|
||||
<p>Здесь <b>все</b> переменные должны возвращать массив. Каких-либо особых форматов тут уже нет. Сначала опишем флаги, потом уже все остальные переменные. Я напомню (так как ниже я уже не буду приводить функции более подробно), что <code>_netctl_profiles()</code>, в отличие от других переменных, должна возвращать актуальный на данный момент массив:
|
||||
|
||||
{% highlight bash %}
|
||||
@ -58,7 +58,7 @@ complete -F _netctl_gui netctl-gui
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#flags" class="anchor" name="flags"><span class="octicon octicon-link"></span></a>Флаги</h2>
|
||||
<h2><a href="#flags" class="anchor" id="flags"><span class="octicon octicon-link"></span></a>Флаги</h2>
|
||||
<p>Как было сказано выше, особого формата тут нет, доступные флаги располагаются просто массивом:
|
||||
|
||||
{% highlight bash %}
|
||||
@ -79,7 +79,7 @@ _netctl_gui_arglist=(
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#variables" class="anchor" name="variables"><span class="octicon octicon-link"></span></a>Массивы переменных</h2>
|
||||
<h2><a href="#variables" class="anchor" id="variables"><span class="octicon octicon-link"></span></a>Массивы переменных</h2>
|
||||
<p>Приведу только функцию, которая в zsh выглядела таким образом:
|
||||
|
||||
{% highlight bash %}
|
||||
@ -98,7 +98,7 @@ _netctl_profiles() {
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#body" class="anchor" name="body"><span class="octicon octicon-link"></span></a>Тело функции</h2>
|
||||
<h2><a href="#body" class="anchor" id="body"><span class="octicon octicon-link"></span></a>Тело функции</h2>
|
||||
<p>За дополнение в bash отвечает переменная <code>COMPREPLY</code>. Для отслеживания текущего состояния нужно вызвать функцию <code>_get_comp_words_by_ref</code> с параметрами <code>cur</code> (текущая опция) и <code>prev</code> (предыдущая, собственно состояние). Ну и нужно несколько точек, на которых сворачивать в определенную часть case (переменные <code>want*</code>). Для генерации дополнения используется <code>compgen</code>. После флага <code>-W</code> ему подается список слов. (Есть еще флаг <code>-F</code>, который вызывает функцию, но у меня он помимо этого еще и ворнинг выдает.) Последним аргументом идет текущая строка, к которой и нужно генерировать дополнение.</p>
|
||||
|
||||
<p>Таким образом, наша функция выглядит так:
|
||||
@ -140,5 +140,5 @@ _netctl_gui() {
|
||||
|
||||
</p>
|
||||
|
||||
<h2><a href="#conclusion" class="anchor" name="conclusion"><span class="octicon octicon-link"></span></a>Заключение</h2>
|
||||
<h2><a href="#conclusion" class="anchor" id="conclusion"><span class="octicon octicon-link"></span></a>Заключение</h2>
|
||||
<p>Файл хранится в директории <code>/usr/share/bash-completion/completions/</code> с произвольным именем. Файл примера полностью может быть найден <a href="https://raw.githubusercontent.com/arcan1s/netctl-gui/master/sources/gui/bash-completions" title="Файл" type="text/plain">в моем репозитории</a>.</p>
|
||||
|
Reference in New Issue
Block a user