<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Unix Way]]></title>
  <link href="https://paul.elms.pro/atom.xml" rel="self"/>
  <link href="https://paul.elms.pro/"/>
  <updated>2026-04-29T20:32:43+00:00</updated>
  <id>https://paul.elms.pro/</id>
  <author>
    <name><![CDATA[Павел Вязовой]]></name>
    
  </author>
  <generator uri="http://github.com/">Jekyll</generator>

  
  <entry>
    <title type="html"><![CDATA[Управление проектами в Vim]]></title>
    <link href="https://paul.elms.pro/blog/2014/05/06/vim-projects/" rel="alternate" />
    <updated>2014-05-06T17:00:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2014/05/06/vim-projects</id>
    <content type="html"><![CDATA[<p>На тему Vim vs Sublime мне тоже очень хочется много всяких мыслей
написать, но не сейчас. А сейчас расскажу как можно организовывать
проекты в Vim не хуже, чем в Sublime Text.</p>

<p>У Sublime Text управление проектами организовано очень удобно: проект
это файл, в котором описаны вложенные директории, любые настройки
(например, отступы или используемый для этого проекта набор линтеров).</p>

<p>Т.к. проекты хранятся в файлах, то очень легко сделать alfred workflow
для быстрого доступа к проектам.</p>

<p>Примерно такого же я хотел и от Vim. И вот что получилось:</p>

<ol>
  <li>
    <p>Для работы с проектами в Vim можно использовать сессии. Сессия это
  файл, такой же как и основной конфиг Vim. Когда он выполняется можно
сделать что угодно: установить рабочую директорию, открыть боковую
панель с файлами проекта, переключить tags-файлы и т.д. Возможностей
даже больше, чем у проектов Sublime. Файлы сессий создаются в ~/.vim/sessions.
Для запуска используется vim -S ~/.vim/sessions/project.vim или :source из запущенного инстанса.</p>
  </li>
  <li>
    <p>Для выбора проекта можно использовать плагин <a href="https://github.com/mhinz/vim-startify">startify</a>.
Он отображает последние открытые файлы и все сессии из ~/.vim/sessions.</p>
  </li>
  <li>
    <p>Запускать таким образом сессии не очень удобно, поэтому я предлагаю
  использовать для этого Alfred. Ниже я приложил ссылки на workflow Vim
проектов. Просто набираем “vims часть_имени_проекта” и выбираем нужный проект, он откроется в новом окне
MacVim.</p>
  </li>
</ol>

<p><i class="icon-cloud-download"></i><a href="https://github.com/vyazovoi/AlfredWorkflows/blob/master/VimSessions.alfredworkflow?raw=true">Скачать Vim workflow</a></p>

<p>Простой пример файла проекта:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ~/Projects/projectname
set tags=""
set tags+=~/Sites/include/tags
set tags+=~/Projects/projectname/tags
let g:syntastic_php_phpcs_args="--report=csv --standard=/Users/paul/Documents/LSCS/LS"
args app/index.php app/includes/* css/*
edit app/index.php
vertical sb css/default.css
</code></pre></div></div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Красивый git log]]></title>
    <link href="https://paul.elms.pro/blog/2014/04/09/pretty-git-log/" rel="alternate" />
    <updated>2014-04-09T09:25:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2014/04/09/pretty-git-log</id>
    <content type="html"><![CDATA[<p style="text-align: center;">
<a class="screenshot" href="http://monosnap.com/image/SjjpMWrXkdXmMwb4OYT0wyu3O6rxZB.png" rel="screenshot" style="margin: 0 auto;" title="Красивый git log"><img src="http://monosnap.com/image/SjjpMWrXkdXmMwb4OYT0wyu3O6rxZB.png" alt="pretty git log" style="max-width: 700px;" /></a>
</p>

<p>Добавить alias:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative"
</code></pre></div></div>

<p>Подсмотрел где-то в комментариях на хабре.<br />
Использовать через git lg.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Относительная нумерация строк в Emacs и VIM]]></title>
    <link href="https://paul.elms.pro/blog/2014/02/07/emacs-and-vim-relative-line-numbers/" rel="alternate" />
    <updated>2014-02-07T14:32:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2014/02/07/emacs-and-vim-relative-line-numbers</id>
    <content type="html"><![CDATA[<p>Я не стану в очередной раз писать, что многие пользователи Emacs и VIM используют свои редакторы не эффективно, применяя к ним принципы работы с “обычными” редакторами кода типа Sublime Text и Textmate. Скажу только что среди всего прочего, для эффективного использования можно применять цифровые префиксы.</p>

<p>Например, если мне в Emacs надо удалить десять строк подряд: то я могу выжать комбинацию C-1 C-0 C-k. Это значит с зажатым контролом нажать по очереди 10 и k. Таким образом, Emacs повторит удаление строки 10 раз.</p>

<p>Отвлекаясь от темы, скажу что у меня контрол висит на капслоке и на return. Поэтому сложные емаксовые комбинации выжимать очень удобно. С дефолтным расположением контролов я бы использовал vim или один из “вимификаторов” емакса. Как настроить таким образом OS X я тоже напишу. А заодно и обновлю статью про переключение раскладок в Linux под OS X.</p>

<p>Итак, возвращаемся к теме: выжать числовой префикс удобнее, чем выделять эти строки или 10 раз нажимать C-k. Особенно если строк не 10, а скажем 30. Есть конечно и другие способы навигации и редактирования, но числовые префиксы – один из них, не самый худший.</p>

<p>Но… это не работает так хорошо, если нет относительной нумерации строк. Когда она включена, достаточно просто посмотреть на номер той строки, до которой необходимо выполнить удаление строк (или любое другое действие). Числовые префиксы можно использовать не только для работы со строками само собой, но для строк это удобно.</p>

<p>В vim относительная нумерация строк появилась, кажется, в версии 7.3. Включается она очень просто:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>set number
set relativenumber
</code></pre></div></div>

<p>А в Emacs у меня есть два варианта. Во-первых, старый кусок кода, который устанавливает две полосы номеров строк: обычную и относительную. Но он гадит в Messages варнингами (но работает):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(eval-after-load "linum"
  '(defun linum-update (buffer)
     "Update line numbers for all windows displaying BUFFER."
     ;; this is only change but couldn't find better way to do it, tried
     ;; linum-before-update-hook but it runs in an excursion so I couldn't get
     ;; current line number
     (setq linum-last-pos (line-number-at-pos))
     (with-current-buffer buffer
       (when linum-mode
         (setq linum-available linum-overlays)
         (setq linum-overlays nil)
         (save-excursion
           (mapc #'linum-update-window
                 (get-buffer-window-list buffer nil 'visible)))
         (mapc #'delete-overlay linum-available)
         (setq linum-available nil)))))

(defun linum-relativenumber-format (line-number)
  (let ((diff (abs (- line-number linum-last-pos))))
    (concat (propertize (format "%5d" line-number)
                        'face 'linum-line)
            (propertize (format "%3d" diff)
                        'face (cond ((zerop diff) 'linum-zero)
                                    ((eq 1 line-number) 'linum-top)
                                    (t 'linum))))))

;; (setq linum-format 'dynamic)
(setq linum-format 'linum-relativenumber-format)
</code></pre></div></div>

<p>Во-вторых, в melpa и в рецептах el-get есть пакет linum-relative. Он заменяет обычную нумерацию на относительную. Работает из коробки, только я поменял у него оформление текущей строки через customize-face linum-relative-current-face.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Смена дневной и ночной цветовых схем в VIM]]></title>
    <link href="https://paul.elms.pro/blog/2014/02/07/vim-color-themes-day-and-night/" rel="alternate" />
    <updated>2014-02-07T12:26:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2014/02/07/vim-color-themes-day-and-night</id>
    <content type="html"><![CDATA[<p>Я предпочитаю светлые цветовые схемы редактора кода, но пользоваться могу ими только днем. К вечеру приходится переключаться на менее привлекательную темную схему. Кроме того, на ярком солнце светлые темы предпочтительней.</p>

<p>Я уже писал про то, как менять <a href="/blog/2013/04/11/emacs-theme-change/">цветовые схемы по времени восхода и захода солнца в Emacs</a>. Для VIM у меня есть даже больше вариантов: по времени восхода и захода солнца, по датчику освещения макбука, просто по времени. Сейчас я ими поделюсь.</p>

<h2 id="по-времени">По времени</h2>

<p>Самое простое – переключать цветовые схемы по времени. Реализация очень простая:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>function MyColors()

  let morning=6
  let night=19

  if strftime("%H") &gt;= morning &amp;&amp; strftime("%H") &lt;= night
    if &amp;background == "dark"
      set background=light
    endif
  elseif &amp;background == "light"
    set background=dark
  endif

  execute ":AirlineRefresh"

endfunction

if has("autocmd")
  autocmd VimEnter * call MyColors()
  autocmd bufwritepost * call MyColors()
endif
</code></pre></div></div>

<p>Таким образом, мы можем не только переключать цветовые схемы, но и свойство background (это нужно для вимовского варианта solarized).</p>

<p>Вызов AirlineRefresh нужен после изменения темы, иначе он не переисовывается корректно.</p>

<p>Также можно настроить разные схемы для терминала и GUI, делается это примерно так:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>if has('gui_running')
  set background=light
else
  set background=dark
endif
</code></pre></div></div>

<h2 id="вариант-по-времени-2">Вариант по времени №2</h2>

<p>Есть ещё плагин для вима, который переключает цветовые схемы четыре раза в день. Но он переключает именно цветовые схемы, так что для популярной темы solarized не подходит (там нужно переключать свойство background).</p>

<p>Устанавливаем плагин, настраиваем темы (отдельно для gui и терминала) и время для переключения:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Bundle 'daf-/vim-daylight'

let g:daylight_morning_color_gvim = "Tomorrow"
let g:daylight_afternoon_color_gvim = "solarized"
let g:daylight_evening_color_gvim = "Tomorrow-Night"
let g:daylight_late_color_gvim = "jellybeans"

let g:daylight_morning_color_term = "Tomorrow"
let g:daylight_afternoon_color_term = "mayansmoke"
let g:daylight_evening_color_term = "Tomorrow-Night"
let g:daylight_late_color_term = "jellybeans"

let g:daylight_late_hour = 21
let g:daylight_morning_hour = 7
let g:daylight_afternoon_hour = 12
let g:daylight_evening_hour = 18
</code></pre></div></div>

<h2 id="переключение-по-восходу-и-заходу-солнца">Переключение по восходу и заходу солнца</h2>

<p>Это уже интереснее. Для настройки плагина необходимо указать свои координаты, где их взять я уже писал в заметке для <a href="/blog/2013/04/11/emacs-theme-change/">Emacs</a>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Bundle 'cadadr/vim-sunflower'
let g:sunflower_lat=53
let g:sunflower_long=58
let g:sunflower_colorscheme_day='solarized'
let g:sunflower_colorscheme_night='jellybeans'
</code></pre></div></div>

<p>Минус реализации в том, что переключает только темы. С solarized работать не будет. Но исправить ведь очень легко, если кому-то захочется.</p>

<h2 id="переключение-по-датчику-освещения-макбука">Переключение по датчику освещения макбука</h2>

<p>Это самое интересное, подумываю утащить к себе в Emacs. Ведь можно средь бела дня сидеть с наглухо закрытыми шторами, или вечером при искусственном освещении. Только нужно правильно настроить чувствительность, потому что будет очень неудобно, если тема будет меняться много раз за день.</p>

<p>Настроек у плагина никаких нет, потому что он просто меняет свойство background. В этом заключается и минус: с популярной темой solarized будет работать из коробки, а переключаться между разными темами не будет. Но я думаю каждый пользователь вима в состоянии хакнуть плагин и поменять set background на colorscheme.</p>

<p>В общем, просто устанавливаем плагин:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Bundle 'Dinduks/vim-holylight'
</code></pre></div></div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Правильная установка ctags с расширенной поддержкой PHP в OS X]]></title>
    <link href="https://paul.elms.pro/blog/2013/10/03/osx-ctags-php-homebrew/" rel="alternate" />
    <updated>2013-10-03T15:09:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2013/10/03/osx-ctags-php-homebrew</id>
    <content type="html"><![CDATA[<p>На github есть <a href="https://github.com/zargener/ctags">форк ctags с расширенной поддержкой PHP</a>. Скорее всего, мы не скоро дождемся этого в основной ветке, поэтому проще всего установить этот форк самостоятельно прямо сейчас. Вопрос только в том, как это правильно сделать.</p>

<p>У вас уже установлен <a href="http://brew.sh">homebrew</a>? Если нет, устанавливайте:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
</code></pre></div></div>

<p>В homebrew уже есть рецепт для сборки и установки ctags, нужно только правильно отредактировать его.</p>

<p>Сначала делаем так:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew update
brew edit ctags
</code></pre></div></div>

<p>Откроется рецепт на редактирование, меняем в нем следующее:</p>

<ol>
  <li>
    <p>Url меняем на следующий:</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> url 'https://github.com/vyazovoi/ctags/archive/master.zip'
</code></pre></div>    </div>
  </li>
  <li>
    <p>Обычно brew берет номер версии из имени файла, но в master.zip нет информации о версии, поэтому на следующей строке после url добавляем:</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> version '5.8'
</code></pre></div>    </div>
  </li>
  <li>
    <p>Комментируем символом “#” строку с sha:</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> # sha1 '482da1ecd182ab39bbdc09f2f02c9fba8cd20030'
</code></pre></div>    </div>
  </li>
</ol>

<p>Всё, закрываем редактор с сохранением изменений и запускаем сборку ctags:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew install ctags
</code></pre></div></div>

<p>Он сам подтянет за собой все зависимости и соберет ctags (как в портах freebsd или портеже gentoo).</p>

<p>P.S. А ещё можно установить <strong>brew-cask</strong> и после этого можно устанавливать многие программы без сборки: brew cask install evernote, brew cask install aquamacs, brew cask install iterm2 и т.д.</p>

<p>P.P.S. Вот только проблема — textmate вообще никак работает с ctags, поэтому я возвращаюсь к Emacs.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[История о том, как я чуть не сменил платформу для блога]]></title>
    <link href="https://paul.elms.pro/blog/2013/05/04/novaia-platforma-dlia-blogha/" rel="alternate" />
    <updated>2013-05-04T20:25:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2013/05/04/novaia-platforma-dlia-blogha</id>
    <content type="html"><![CDATA[<p><em>Сегодня я менял платформу для блога, но в процессе переноса заметок и настройки блога я передумал. Далее следует текст заметки, которую я уже было написал в новый блог. Почему я остался на octopress – в конце заметки.</em></p>

<p>Вчера вечером я лежал перед сном в кровати, читал твиттер на телефоне, и пришла мне в голову мысль дополнить одну заметку новой информацией. Для этого мне нужно было встать, включить компьютер, отредактировать запись в octopress и сделать деплоймент на github. Слишком сложно.</p>

<!--more-->

<p>У меня на телефоне уже был <a href="http://www.iawriter.com/">iA Writer</a> – замечательный редактор markdown-текстов, который умеет работать с файлами в icloud и dropbox. Как было бы здорово просто открыть нужную заметку в iA Writer, отредактировать, сохранить, и … и всё! Я решил погуглить и нагуглил несколько готовых решений, среди которых был и <a href="http://scriptogr.am/">Scriptogram</a>, на который я сегодня и мигрировал.</p>

<p>Scriptogram – блог-платформа, которая использует markdown-файлы из dropbox для публикации блога. Конечно, возможностей у неё куда меньше чем у octopress, с которым можно творить что угодно. Но как же это удобно – просто редактировать посты в iA Writer и всё, никаких лишних действий и зависимости от большого компьютера.</p>

<p>Записи в Scriptogram не публикуются сами по себе – думаю, это сделано во избежание попадания черновиков в блог. Несмотря на то, что для предотвращения публикации есть специальная переменная – “Published: false”, для деплоймента надо нажать кнопку “синхронизировать” в веб-интерфейсе. Но у Scriptogram есть API, позволяющий публиковать из приложения. Поддержка этого API есть в <a href="http://mouapp.com">Mou</a> - неплохом редакторе markdown для Mac OS X.</p>

<p>Думаю, у кого-нибудь возникнет вопрос, почему я не выбрал <a href="https://www.tumblr.com">Tumblr</a>. В его мобильном клиенте можно отправлять пост в markdown, но после отправки он в одностороннем порядке преобразуется в html. Это не удобно. В случае Scriptogram – я работаю с исходными markdown-файлами в любом удобном редакторе.</p>

<p>На данный момент дизайн и навигация этого блога – “что под руку попалось”, над этим я буду работать позже.</p>

<p><a href="http://scriptogr.am"><img src="/images/articles/old/scriptogram.png" alt="writing" style="display: block; margin: 0 auto;" /></a></p>

<hr />

<h3 id="и-все-таки-почему-я-не-перешёл-на-scriptogram">И все-таки, почему я не перешёл на Scriptogram…</h3>

<p>Во-первых, у меня так и не получилось опубликовать эту заметку. Вот эту, которая выше по тексту. Синтаксис правильный, заметка в админке Scriptogram присутствует, а в блоге не публикуется, хоть ты тресни. Ни ошибок тебе, ничего.</p>

<p>Во-вторых, ощущение ненадежности сервиса на этом не закончилось. Один альтернативный сервис однажды закрылся (уже не помню какой именно), а Scriptogram давно не обновлялся. Платность сервиса – вопрос времени, но в случае неудачи его постигнет судьба других закрытых проектов. С octopress и github такое не произойдет.</p>

<p>В-третьих, возможности очень и очень ограничены – не хватает liquid extensions и других возможностей jekyll.</p>

<p>Я по-прежнему хотел бы сменить платформу для блога на такую, с которой можно было бы работать полностью с телефона. Есть такие варианты:</p>

<ul>
  <li><a href="http://calepin.co">Calepin</a> - нет вообще никакой кастомизации. Абсолютно никак не настраивается внешний вид блога</li>
  <li><a href="http://www.markbox.io">Markbox</a> - жду инвайт</li>
  <li><a href="http://skrivr.com">Skrivr</a> - выглядит интересно, жду инвайт</li>
  <li><a href="http://roon.io">roon.io</a> - не устраивает меня по ряду параметров</li>
  <li><a href="http://postach.io">postach.io</a> — блог в Evernote</li>
</ul>

<p>Если у кого-нибудь ещё есть идеи, я очень рад буду увидеть их в комментариях.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Смена цветовой схемы Emacs по времени восхода и захода солнца]]></title>
    <link href="https://paul.elms.pro/blog/2013/04/11/emacs-theme-change/" rel="alternate" />
    <updated>2013-04-11T11:09:00+00:00</updated>
    <id>https://paul.elms.pro/blog/2013/04/11/emacs-theme-change</id>
    <content type="html"><![CDATA[<p>Я давно хотел поделиться интересными сниппетами из моего конфига Emacs. Сам конфиг я публиковать не хочу, потому что в нём половина кода не работает, другая половина содержит какие-то пароли и личные данные, которые я не вынес в отдельный файл. А вот этот сниппет опубликую. Даже не сниппет, а пример конфигурации готового пакета <a href="https://github.com/hadronzoo/theme-changer">theme-changer</a>.</p>

<p>Есть такой пакет для Emacs: <a href="https://github.com/hadronzoo/theme-changer">theme-changer</a>. Он умеет переключать цветовую схему по времени восхода и захода солнца. А настраивается он вот так:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(setq calendar-location-name "Dallas, TX") 
(setq calendar-latitude 32.85)
(setq calendar-longitude -96.85)

(require 'theme-changer)
(change-theme 'solarized-light 'solarized-dark)
</code></pre></div></div>

<p>Значения latitude и longitude можно узнать несколькими способами. Во-первых, можно просто тыкнуть в google maps и скопировать координаты. Кроме того можно найти свой город в википедии и там в шаблоне справа будет ссылка на сервис geohack, откуда нужно скопировать координаты в десятичном формате.</p>

<h2 id="emacs-24-vs-пакет-color-theme">Emacs 24 vs пакет color-theme</h2>

<p>В Emacs 24 появился свой механизм тем на замену пакету color-theme. Сниппет выше – пример конфигурации уже для встроенного механизма тем. Для старого пакета color-theme конфигурация будет выглядеть следующим образом:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(setq calendar-location-name "Dallas, TX") 
(setq calendar-latitude 32.85)
(setq calendar-longitude -96.85)

(require 'theme-changer)
(setq theme-changer-mode "color-theme")
(change-theme 'color-theme-solarized-light 'color-theme-solarized-dark)
</code></pre></div></div>

<p>Кстати, лично я предпочитаю схему xemacs днём (самая лучшая схема, по моему мнению) и схему zen-and-art ночью.<br />
<strong>UPD:</strong> уже переключился на solarized.</p>
]]></content>
  </entry>
  
</feed>
