Линукс для писателей: часть I
Год назад или около, мы с Кусо любили рассуждать об интерфейсах чтения и письма. Тогда же я пришел к идее разделения устройств. Вместе эти парадигмы породили интерфейс, который я создал для себя и описываю в этой заметке.
Для экономии места я не буду подробно рассказывать о разделении устройств. С годами я все хуже понимаю, почему аудиоплеер, телефон и фотокамера — один и тот же предмет. Моя аудиожизнь, к примеру, теперь обслуживается плеером Cowon X9 и диктофоном Zoom H2.
И вот, я завел отдельный компьютер для письма и чтения. В нем нет мессенджеров, почты и музыки — только текст. Выбрав одну из старых машин, я поставил на нее Ubuntu 15.04 и начал обустраиваться.
Двухпанельная парадигма
Содержание наших с Кусо рассуждений часто включало предположение о том, что работа с текстом — это всегда работа с текстом и чем-то еще. Поэтому было бы здорово разделить экран на две части, в одной из которых всегда находился бы текст, а в другой — вспомогательный источник.
Для меня это действительно оказалось чрезвычайно удобно. Вот несколько типичных примеров:
На месте каждого из окон может стоять любая программа на выбор: браузер, почта, заметка, научная статья, библиография и т.п. Расположением окон на экране занимается программа i3. Она делит экран на части так, что тот становится полностью замощен окнами. Каждый раз как я открываю новое окно, старому приходится уменьшаться в размерах. Такого типа оконные менеджеры называются tiling window managers. Если я открою на экране четыре окна, получится так:
Любители подобных вещей иногда настраивают очень сложные правила размещения окон; мои же — довольно просты. Все окна открываются в ряд и вертикально. Как только на экране становится больше двух окон, всё становится нечитаемым и вынуждает меня закрыть одно из окон — в чем и состояла исходная цель: иметь ровно два окна.
Управление окнами происходит без мыши. Я перемещаю фокус влево-вправо кнопками Command+Shift+< и Command+Shift+>. Если окно уже в фокусе, я могу сдвинуть его налево, стукнув Command+Shift+m. Я закрываю окна сочетанием Command+Shift+q. Вообще, любые операции с окнами начинаются с Command+Shift.
Запуск программ
Поскольку никаких экранных меню у меня нет вообще, все программы тоже запускаются с клавиатуры. Я могу набрать такую команду в терминале, или стукнуть Option+пробел. На экран вылезет крошечная утилита gmrun, куда я и вобъю нужный текст.
Для удобства я написал несколько собственных команд. Вот их неполный список:
- m Привет как дела — ищет текст «Привет как дела» в Мультитране
- www ya.ru — откроет Яндекс в браузере
- v hi.txt — создаст файл hi.txt в директории и откроет текстовый редактор с ним
Есть и системные команды: для управления сетью, к примеру, или для скриншотов.
Преимущество этого дела состоит в том, что команды не привязаны ни к какому конкретному приложению. Я могу выделить текст в редакторе и запустить команду, которая переведет его в словаре по моему выбору. Сам редактор даже не будет знать, что полез в словарь; его единственная забота — взять выделенный текст и засунуть его в ту команду, которую я указал.
Разметка и документы
Всё, что я пишу, пишется в разметке Markdown. Тексты, которые потом не уходят на основную машину чтобы быть сверстанными в индизайне, верстаются в html, pdf или почту автоматически, по написанным мной шаблонам.
Документы разложены по папкам с особой системой наименования. Папка logs, к примеру, предназначена для нескольких тематических дневников. Каждому из них посвящена подпапка: скажем, ~/logs/tech — это дневник о технологии. Одна запись в дневник — один markdown-файл в папке. Если я хочу прочесть дневник целиком, я запускаю в директории скрипт diary. Он собирает все файлы в один, упорядочивая их от нового к старому, автоматически верстает все это в html и открывает в браузере. Там я могу полистать дневник или поискать что-нибудь внутри.
Книги тоже хранятся в папках. О книгах и библиографиях я напишу отдельно, здесь только скажу, что каждой книге соответствует одноименный markdown-файл с конспектом. Если книга называется толстой.война-и-мир.epub, конспект будет называться толстой.война-и-мир.md. Это, в частности, означает, что и все конспекты я тоже могу объединить одной командой в большой мегаконспект и поискать там что-нибудь.
Так система заметок, конспектов, записок, книг и статей становится полностью оторвана от конкретных программ чтения. У меня есть скрипт bookread, который принимает на вход название книги или статьи и открывает на одном экране ее саму и ее конспект. С конспектами затем можно делать всё, что только возможно делать с текстовыми файлами — и возможности эти весьма широки. Если завтра я сменю текстовый редактор, программу чтения или даже операционную систему, все мои заметки останутся на месте в очень читаемой форме.
Весь домашний каталог включая настройки всех программ синхронизируется на Яндекс.диск.
Набор текста
Я пользуюсь обычной макинтошной раскладкой. Русский и английский переключаются по правому шифту, лампочка капслока служит индикатором русской раскладки. Я не стал повторять систему набора т.н. «типографских» знаков из Mac OS, она не вполне меня удовлетворяет.
Вместо этого я настроил все так: я нажимаю Caps Lock и потом тыкаю в одну или несколько кнопок, которые, в зависимости от сочетания, производят тот или иной символ. Система очень визуальная (Caps Lock сокращаю до CL):
- CL + < дает «
- CL + два раза - дает — (длинное тире)
- CL + -> дает →
- CL + qa дает ∀ (от quantifier any)
- CL+ldis дает ∨ (logical disjunction)
- CL+&e дает ε (все греческие литеры набираются через амперсанд)
Это, конечно, совсем не полный список.
Самопомощь
Как только я настраиваю ту или иную вещь, я пишу для себя документацию. Она хранится в папке ~/man. Когда я вызываю, к примеру, команду utfcs (от utf cheat sheet), скрипт берет markdown-файл из этой папки, делает из него красивый html и открывает его рядом с текстом.
Философия
Все это сделано для того, чтобы читать и писать продуктивно. В некотором отношении вся система задает кучу ограничений разного характера — от невозможности пользоваться мессенджерами до обязательности конспектирования любых книг и лекций. Это, конечно, сделано нарочно. В макоси документы теряются; их перечитываемость очень низка. Они разбросаны по разным приложениям. Внутри самих приложений — по меню.
Здесь же — файлы, файлы и ничего кроме. В поиске одной книжки ты неизбежно увидишь на экране другие — и, может, вспомнишь, что какую-то надо дочитать или перечесть.
Садясь за эту машину, я чувствую, что больше не должен реагировать на сигналы, читать соцсети, слушать музыку и прочее — всего этого здесь просто нет. Очень часто я даже отключаю вайфай.
Техника
Небольшой список того, как все это сделано.
- Window manager — i3wm. Простой и быстрый.
- Браузер — dwb. Движок вебкита, в 10 раз быстрее хрома, можно назначать собственные клавиатурные сочетания, есть режим hints, который позволяет открывать ссылки без мыши.
- Текстовый редактор — как ни странно, gedit. Для vim есть масса писательских плугинов, но оказывается, что с ним очень сложно работать с двумя раскладками. Gedit же оказался мощнее, чем предполагалось.
- Читалка epub — ebook-viewer, утилита из пакета calibre. С помощью calibre же книги из киндла становятся файлами на диске. Русская литература покупается на Литресе.
- Читалка pdf — evince. Умеет запоминать место, на котором ты остановился в прошлый раз.
- Переключалка клавиатуры — xkb. Стандартный убунтовый ibus медленный и до версии 1.5.11 будет игнорировать файл ~/.XCompose, где как раз все utf-символы. На момент написания этой заметки эта версия еще недоступна в бинарниках.
- У Яндекс.диска есть консольные инструменты. На маке этот аккаунт монтируется у меня как сетевой диск через webdav.
- Сеть — networkmanager, батарейка — upower, автомонтирование usb — udiskie (usbmount глючит).
- Документы мотаются туда-сюда через pandoc, очевидно.
- Управление яркостью экрана — xbacklight.