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.

-

Variables

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

@@ -558,4 +556,4 @@ hash -d u2=/mnt/usbdev

File

-

Here is my .zshrc.

+

Here is my .zshrc.

diff --git a/_posts/2014-03-06-site-changes.html b/_posts/2014-03-06-site-changes.html index fb7b442..80135d9 100644 --- a/_posts/2014-03-06-site-changes.html +++ b/_posts/2014-03-06-site-changes.html @@ -42,8 +42,7 @@ domain.name. 912 IN A 192.30.252.154 /home/arcanis/share.fs /srv/ftp/share ext4 defaults,rw 0 0 {% endhighlight %} -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: +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

A bit of theory

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:

  1. Creating PKGBUILDs (or updating them from AUR).
  2. diff --git a/_posts/2014-04-18-loveless.html b/_posts/2014-04-18-loveless.html index fb8aade..8966097 100644 --- a/_posts/2014-04-18-loveless.html +++ b/_posts/2014-04-18-loveless.html @@ -13,11 +13,13 @@ description: Here is a small poem from Final Fantasy VII Crisis Core. The goddess descends from the sky
    Wings of light and dark spread afar
    She guides us to bliss, her gift everlasting.

    +

    Act I

    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.

    +

    Act II

    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.

    +

    Act III

    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.

    +

    Act IV

    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.

    +

    Act V

    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

    KDE settings

    -

    +

    {% assign scrdesc = "KDE screenshot" %} {% assign scrname = "kde" %} {% include prj_scr.html %} -

    +
    -

    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.

    -

    +

    {% assign scrdesc = "Zsh demonstation" %} {% assign scrname = "zshrc_demo" %} {% include prj_scr.html %} -

    +

    Firefox settings

    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:
    bash_completion
    Some basics of creating a completion files for own application are described in these articles. ---

    Preamble

    -

    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.

    Introduction

    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+, поэтому я назначаю клавиши на их стандартное использование:

    + {% highlight bash %} # bindkeys bindkey '^[[A' up-line-or-search # up arrow for back-history-search @@ -38,9 +42,11 @@ bindkey '\e[4~' end-of-line # end bindkey '\e[5~' up-line-or-history # page-up bindkey '\e[6~' down-line-or-history # page-down {% endhighlight %} +

    Но здесь важно, что стрелки вверх/вниз служат для навигации по истории с учетом уже введенной части команды. А 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 %} # autocd setopt autocd {% endhighlight %} +

    Корректировка опечаток (и шаблон вопроса):

    + {% 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:

    + {% highlight bash %} # pkgfile source /usr/share/doc/pkgfile/command-not-found.zsh {% endhighlight %} -

    Подсветка синтаксиса

    +

    Подсветка синтаксиса

    + {% highlight bash %} # highlighting source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh @@ -159,10 +186,12 @@ ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' # конс # root #ZSH_HIGHLIGHT_STYLES[root]='bg=red' {% endhighlight %} +

    В первой строке включаем подсветку. Затем включаем основную подсветку, а также подсветку скобок и шаблонов. Шаблоны указываются ниже (rm -rf * в примере). Также может быть включена подсветка команд от root и курсора cursor. Синтаксис настроек понятен, fg цвет шрифта, bg цвет фона.

    -

    $PROMPT и $RPROMPT

    +

    $PROMPT и $RPROMPT

    Я хочу использовать один файл .zshrc для рута и обычного пользователя:

    + {% highlight bash %} # PROMPT && RPROMPT if [[ $EUID == 0 ]]; then @@ -185,6 +214,7 @@ fi {% endhighlight %}

    fg цвет шрифта, bg цвет фона. _bold и _no_bold регулируют оттенок. Команды должны быть обрамлены в %{ ... %}, чтобы не показывались. Доступные цвета:

    + {% highlight bash %} black red @@ -197,6 +227,7 @@ white {% endhighlight %}

    Доступные переменные:

    + {% highlight bash %} %n - имя пользователя %m - хостнейм (выставляется только в начале сессии) @@ -213,6 +244,7 @@ white {% endhighlight %}

    RPROMPT (необходим пакет acpi):

    + {% highlight bash %} precmd () { # battery charge @@ -237,12 +269,14 @@ $(batcharge)\ $returncode\ "%{$fg_bold[white]%}]%{$reset_color%}" {% endhighlight %} +

    Мой 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:

    + {% highlight bash %} # global alias alias -g g="| grep" @@ -325,7 +364,7 @@ alias -g h="| head" alias -g dn="&> /dev/null &" {% endhighlight %} -

    Функции

    +

    Функции

    Специальная функция для xrandr:

    {% highlight bash %} @@ -352,6 +391,7 @@ projctl () { {% endhighlight %}

    К сожалению, я не могу запомнить флаги tar, поэтому я использую специальные функции:

    + {% highlight bash %} # function to extract archives # EXAMPLE: unpack file @@ -405,6 +445,7 @@ pack () { {% endhighlight %}

    Специальная функция для su:

    + {% highlight bash %} su () { CHECKSU=0 @@ -423,6 +464,7 @@ su () { {% endhighlight %}

    Функция, которая заменяет оригиналькую команду rm. Если Вы наберете rm, это будет эквивалентно перемещению в корзину, также, Вы можете легко восстановить удаленный файл:

    + {% highlight bash %} rm () { # error check @@ -466,6 +508,7 @@ rm () { {% endhighlight %}

    Функция для автоматических обновлений путей после установки пакетов:

    + {% 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:

    + {% highlight bash %} # hash hash -d global=/mnt/global @@ -504,8 +548,12 @@ hash -d u1=/mnt/usbdev1 hash -d u2=/mnt/usbdev2 {% endhighlight %} -

    Скриншот

    -

    +

    Скриншот

    +
    + {% assign scrdesc = "Как оно выглядит" %} + {% assign scrname = "zshrc_demo" %} + {% include prj_scr.html %} +
    -

    Файл

    -

    Мой .zshrc.

    +

    Файл

    +

    Мой .zshrc.

    diff --git a/ru/_posts/2014-01-21-building-qutim-using-qt5.html b/ru/_posts/2014-01-21-building-qutim-using-qt5.html index f3793b3..376cd50 100644 --- a/ru/_posts/2014-01-21-building-qutim-using-qt5.html +++ b/ru/_posts/2014-01-21-building-qutim-using-qt5.html @@ -6,30 +6,36 @@ layout: paper tags: archlinux, linux, сборка, qutim title: Сборка Qutim с Qt5 short: building-qutim-using-qt5 -description: Если кто-то не знает, Qutim - мультипротокольный кросс-платформенный месседжер. Написан он на 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:

    + {% highlight bash %} pacman -Sy --asdeps clang git libc++abi qt5-quick1 qt5-x11extras yaourt -S --asdeps jreen-git qbs-git {% endhighlight %} -

    Настройка qbs

    -

    Желающие могут почитать документацию по ссылке или посмотреть примеры (включены в пакет). Загвоздка в том, что эта штука использует файл настроек, который, во-первых, нужно сначала сгенерировать, во-вторых, хранится в домашней директории (и только там). В теории, генерация файла настроек (~/.config/QtProject/qbs.conf) происходит следующим образом:

    +

    Настройка qbs

    +

    Желающие могут почитать документацию по ссылке или посмотреть примеры (включены в пакет). Загвоздка в том, что эта штука использует файл настроек, который, во-первых, нужно сначала сгенерировать, во-вторых, хранится в домашней директории (и только там). В теории, генерация файла настроек (~/.config/QtProject/qbs.conf) происходит следующим образом:

    + {% highlight bash %} qbs-setup-qt --detect qbs-detect-toolchains {% endhighlight %} +

    Сначала находим Qt для сборки, потом находим инструментарий (компиляторы, например). Дальше вставляем инструментарий (например, нам для Qutim нужен clang) в Qt, например, так:

    + {% highlight bash %} sed 's/clang\\/qt-5-2-0\\/g' -i ~/.config/QtProject/qbs.conf {% endhighlight %} +

    Альтернативные варианты - править файл вручную или воспользоваться 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 %} -

    qbs-qutim.conf

    -

    Готовим патч для исходников

    +

    qbs-qutim.conf

    + +

    Готовим патч для исходников

    Первая проблема - clang (по крайней мере, в Archlinux):

    + {% highlight diff %} diff -ruN qutim.orig/core/libqutim.qbs qutim/core/libqutim.qbs --- qutim.orig/core/libqutim.qbs 2014-01-06 15:39:56.000000000 +0400 @@ -83,7 +91,9 @@ diff -ruN qutim.orig/core/libqutim.qbs qutim/core/libqutim.qbs } {% endhighlight %} +

    И пофиксить сборку библиотеки для 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 %} -

    qutim-qbs-1.1.patch

    -

    Получаем исходники

    +

    qutim-qbs-1.1.patch

    + +

    Получаем исходники

    + {% highlight bash %} # клонируем репозиторий git clone https://github.com/euroelessar/qutim @@ -116,20 +128,25 @@ cd .. patch -p0 -i qutim-qbs-1.1.patch {% endhighlight %} -

    Сборка

    +

    Сборка

    + {% highlight bash %} cd qutim HOME=$(pwd) qbs -j $(nproc) -d ../build release profile:qutim {% endhighlight %} +

    Я пытался сделать универсальный способ сборки пакета, поэтому такое странное переназначение домашней директории. Флаг -j указывает число потоков сборки, флаг -d директорию сборки, release тип сборки (debug, release), profile используемый профиль, описанный в файле настроек.

    -

    Установка

    +

    Установка

    + {% highlight bash %} HOME=$(pwd) sudo qbs install -d ../build --install-root "/usr" profile:qutim {% endhighlight %} +

    Из нового - указание корневого каталога (--install-root). Без этого пакет будет установлен в / (/bin и /lib).

    -

    PKGBUILD

    +

    PKGBUILD

    + {% highlight bash %} pkgname=qutim-qt5-git _gitname=qutim @@ -182,4 +199,5 @@ package() { HOME="${srcdir}" qbs install -d ../build --install-root "${pkgdir}/usr" profile:qutim } {% endhighlight %} -

    PKGBUILD

    + +

    PKGBUILD

    diff --git a/ru/_posts/2014-03-06-site-changes.html b/ru/_posts/2014-03-06-site-changes.html index 1919084..ca9a9f5 100644 --- a/ru/_posts/2014-03-06-site-changes.html +++ b/ru/_posts/2014-03-06-site-changes.html @@ -8,16 +8,19 @@ title: Изменения сайта short: site-changes description: Решил немного поиграться с сайтом. Краткий список изменений ниже. --- -

    Cписок изменений:

    +

    Cписок изменений:

    diff --git a/ru/_posts/2014-03-23-creating-custom-repo.html b/ru/_posts/2014-03-23-creating-custom-repo.html index 24e7467..acd51ba 100644 --- a/ru/_posts/2014-03-23-creating-custom-repo.html +++ b/ru/_posts/2014-03-23-creating-custom-repo.html @@ -8,13 +8,16 @@ title: Создание собственного репозитория short: creating-custom-repo description: Небольшая статья, посвященная созданию собственного репозитория для Archlinux. --- -

    Подготовка

    +

    Подготовка

    Для начала находим сервер и желание с ним заниматься сексом. Для простоты, лучше, чтобы там стоял Archlinux, хотя, это и не совсем обязательно (можно создать отдельный корень под Arch). Из пакетов, пожалуй, нам понадобится только два, devtools и сам pacman:

    + {% highlight bash %} pacman -Sy devtools {% endhighlight %} -

    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, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.

    +

    Процесс обновления репозитория можно разбить на следующие части:

    1. Создание PKGBUILD'ов (обновление их из AUR'а).
    2. @@ -67,17 +72,20 @@ fi
    3. Очистка.
    +

    Теперь по шагам.

    -

    Создание PKGBUILD'ов

    +

    Создание PKGBUILD'ов

    Скачаем исходники для всех нужных пакетов из 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 следующие строки:

    + {% highlight bash %} username ALL=NOPASSWD: /usr/bin/staging-i686-build username ALL=NOPASSWD: /usr/bin/staging-x86_64-build username ALL=NOPASSWD: /usr/bin/multilib-staging-build {% endhighlight %} -

    Подпись пакетов

    +

    Подпись пакетов

    + {% highlight bash %} # подпись if [ ${USEGPG} == "yes" ]; then @@ -133,9 +144,11 @@ if [ ${USEGPG} == "yes" ]; then done fi {% endhighlight %} -

    Для удобства рекомендую настроить gpg-agent.

    -

    Создание списка пакетов

    +

    Для удобства рекомендую настроить gpg-agent.

    + +

    Создание списка пакетов

    + {% highlight bash %} # создание списка пакетов cd "${PREPAREDIR}" @@ -145,15 +158,18 @@ 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 %} -

    Обновление репозиториев

    +

    Обновление репозиториев

    Функция для удаления пакетов из базы данных и из репозитория:

    + {% highlight bash %} func_remove() { _PACKAGE="$1" /usr/bin/rm -f "${_PACKAGE}"{,.sig} } {% endhighlight %} +

    Обновление репозитория i686:

    + {% highlight bash %} # обновление репозитория i686 echo -e "${bwhite}[II]${cclose} Updating ${bwhite}i686${cclose} repo" @@ -170,7 +186,9 @@ for PACKAGE in ${i686_PACKAGES}; do /usr/bin/repo-add --files ${DBNAME}.files.tar.gz "${PACKAGE}" done {% endhighlight %} +

    Обновление репозитория x86_64:

    + {% highlight bash %} # обновление репозитория x86_64 echo -e "${bwhite}[II]${cclose} Updating ${bwhite}x86_64${cclose} repo" @@ -188,7 +206,8 @@ for PACKAGE in ${x86_64_PACKAGES}; do done {% endhighlight %} -

    Очистка

    +

    Очистка

    + {% highlight bash %} # очистка cd "${PREPAREDIR}" @@ -197,8 +216,9 @@ cd "${STAGINGDIR}" /usr/bin/rm -rf * {% endhighlight %} -

    Создание симлинков

    +

    Создание симлинков

    Вы можете захотеть создать директорию, которая будет содержать симлинки на актуальные версии пакетов с именами, не содержащими версии:

    + {% highlight bash %} # создание симлинков if [ ${SYMLINK} == "yes" ]; then @@ -220,11 +240,12 @@ if [ ${SYMLINK} == "yes" ]; then fi {% endhighlight %} -

    Файл

    -

    Скрипты целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.

    +

    Файл

    +

    Скрипты целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.

    -

    Использование репозитория

    +

    Использование репозитория

    Просто добавляем в файл /etc/pacman.conf следующие строки:

    + {% highlight bash %} [$REPONAME] Server = ftp://$REPOADDRESS/repo/$arch diff --git a/ru/_posts/2014-04-18-loveless.html b/ru/_posts/2014-04-18-loveless.html index 94e98d1..ec4f81c 100644 --- a/ru/_posts/2014-04-18-loveless.html +++ b/ru/_posts/2014-04-18-loveless.html @@ -8,25 +8,27 @@ title: Loveless short: loveless description: На правах оффтопа, небольшая поэма из Final Fantasy VII Crisis Core. --- -

    Prologue

    -

    -When the war of the beasts brings about the world's end
    +

    Prologue

    +

    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.

    -

    Act I

    + +

    Act I

    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.

    -

    Act II

    + +

    Act II

    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.

    -

    Act III

    + +

    Act III

    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.

    -

    Act IV

    + +

    Act IV

    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.

    -

    Act V

    + +

    Act V

    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: Небольшая статья, посвященная набору приложений и расширений, которые я использую в повседневной жизни на моем домашнем компьютере. --- -

    Приложения

    +

    Приложения

    -

    Настройка KDE

    -

    Нотариально заверенный скриншот:
    -

    +

    Настройка KDE

    +
    + {% assign scrdesc = "Нотариально заверенный скриншот" %} + {% assign scrname = "kde" %} + {% include prj_scr.html %} +
    -

    В качестве стиля 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):

    +
    + {% assign scrdesc = "Как оно выглядит" %} + {% assign scrname = "zshrc_demo" %} + {% include prj_scr.html %} +
    -

    Настройка Firefox

    +

    Настройка Firefox

    В самих настройках ничего интересного нет, я просто напишу список аддонов. Дико радует, что для того, чтобы интерфейс был минималистичным (и удобным), нужно поставить кучу плагинов.

    -

    Структура файла

    +

    Структура файла

    В заголовке должно быть обязательно указано, что это файл дополнений и для каких приложений он служит (можно строкой, если в файле будет содержаться дополнение для нескольких команд): {% 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: В данных статьях описываются некоторые основы создания файлов дополнений для собственной программы. +description:
    bash_completion
    В данных статьях описываются некоторые основы создания файлов дополнений для собственной программы. --- -

    Преамбула

    -

    В процессе разработки одного своего проекта возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.

    +

    Преамбула

    +

    В процессе разработки одного своего проекта возникло желание добавить также файлы дополнений (только не спрашивайте зачем). Благо я как-то уже брался за написание подобных вещей, но читать что-либо тогда мне было лень, и так и не осилил.

    -

    Введение

    -

    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/ с произвольным именем. Файл примера полностью может быть найден в моем репозитории.