Матвей Андриенко

Текстовый редактор для текста

Тавтология в заголовке означает: для текста, не для кода. В прошлой серии мы выяснили, что Sublime Text — идеальный редактор для кода. Попытаемся сформулировать признаки идеального текстового редактора для писателей.

Политика невмешательства. Ничто не должно стоять между автором и текстом. Элементы интерфейса, кроме поля для набора текста, должны быть скрыты по умолчанию; проверка орфографии не должна выделять неправильно набранные слова, пока не будет включена специально; и так далее.

Не WYSIWYG. Писатель работает с текстом, а не с оформлением. Богатые возможности форматирования текста отвлекают от основной задачи. Лучше поддерживать язык разметки, вроде Markdown: это быстрее и удобнее, чем WYSIWYG.

Размеченный текст должен легко экспортироваться в распространенные форматы. Для меня необходимый минимум: HTML, PDF, ePub или FB2 и один из офисных форматов (ODF, Word, Pages).

Забота о типографике. Отказ от WYSIWG не означает, что редактор не должен автоматически заменять кавычки на правильные, а дефисы — на тире там, где это необходимо. Предлоги, союзы и инициалы должны привязываться к следующим за ними словам, а тире и единицы измерения — к предыдущему слову. Проверка текста на двойные пробелы, лишние пробелы перед знаками препинания или пропущенные пробелы после них была бы полезной возможностью, но следуя политике невмешательства, не должна проявлять себя, пока не будет специально включена.

Работа с клавиатуры. Интерфейс должен быть построен так, чтобы любое действие можно было выполнить с клавиатуры с помощью сочетаний клавиш: никто не любит отрываться от клавиатуры. Например, в Sublime Text сочетанием клавиш вызывается универсальная панель команд:

Панель команд в Sublime Text

Лучше всего, если у редактора вообще не будет интерфейса, ведь интерфейс — зло.

Завершение и продолжение работы без лишних вопросов. При открытии редактора должен загружаться файл, с которым работали прошлый раз. Курсор должен стоять в той позиции, в которой его оставили. В идеале, история изменений должна храниться между запусками редактора, и Ctrl + Z должен сработать даже если файл только что открыли.

Удобство набора, чтения и навигации. Длинные строки неудобно читать, поэтому текст должен автоматически переноситься на новую строку после 80–100 символов. Межстрочный интервал должен быть достаточно свободным, близким к полуторному. При наборе писатели часто отделяют абзацы друг от друга пустой строкой — при крупном межстрочном интервале такой отступ может оказаться слишком большим, тогда он должен быть визуально уменьшен.

Быстрая навигация по тексту — одна из важнейших возможностей. Я бы предусмотрел сочетания клавиш для перехода между словами, абзацами, главами, а также меню для навигации по главам. Следуя политике невмешательства, меню должно быть скрыто по умолчанию.

Активная строка должна оставаться посередине экрана. Крайне неприятно, когда поле набора нельзя прокрутить ниже последней строки текста: получается, что набирающий вынужден постоянно смотреть в нижнюю часть окна.

Некоторые возможности важнее других. Для писателя важнее подсчет слов и поиск с учетом морфологии, чем поддержка регулярных выражений.

Комментарии. При написании текста часто требуется добавлять комментарии из серии: «подобрать иллюстрацию», «указать источник», «здесь переписать» и так далее. Такие комментарии должны отделяться от основного текста, размещаться на полях и, следуя политике невмешательства, быть скрытыми, пока их отображение не включат явно.

Sublime Text

Sublime Text — лучший текстовый редактор, созданный человечеством. Я использую его с нового года.

Sublime Text 3

Вот краткий список достоинств:

  • Запускается за полсекунды.
  • Гибкая настройка интерфейса, для текстового редактора это супер-важно. Это первый текстовый редактор, в котором мне удалось увеличить межстрочный интервал (повышает читаемость кода).
  • Есть карта документа (миниатюрное представление документа справа возле полосы прокрутки).
  • Волшебным сочетанием клавиш Ctrl + Shift + P выполняется любая команда без отрыва от клавиатуры.
  • Еще более волшебным сочетанием клавиш Ctrl + P можно переходить как по коду внутри файла, так и между файлами.
  • Пакетный менеджер Package Control берет на себя заботы по установке плагинов. Я использую Emmet и SideBarEnhancements.

Сначала меня пугала несколько гиковая настройка JSON-файлами. На деле это оказалось удобным решением: гораздо хуже, когда каждый плагин предоставляет свой GUI. JSON обеспечивает единообразие.

Для веб-проектов я использую Require.js и его оптимизатор. Для него я настроил систему сборки:

{
    "name": "Require.js",
    "shell_cmd": "r.js.cmd -o build.js",
    "working_dir": "${project_path:${folder}}"
}

Настроил — это громко сказано. Система сборки предполагает, что в корне проекта лежит файл build.js с конфигурацией оптимизатора. Я оптимизирую сразу все, получая на выходе проект с минифицированными и склеенными яваскрипт-файлами и CSS. Когда научусь использовать Gulp, уверен, найдется готовое решение для него.

Irn Bru

Попробовал напиток, постоянно попадавшийся на глаза, но который до этого ни разу не покупал: Irn-Bru — второй по известности шотландский напиток (после скотча). Довольно-таки отстой. Если и пить напиток с названием из двух слов по три буквы, то Mnt Dew.

Загрузка твитов яваскриптом без авторизации и смс

Текущий REST API Твиттера требует обязательной авторизации. Это неудобно и глупо, например, для чтения твитов из открытого аккаунта авторизация явно излишняя.

Зато при использовании виджетов авторизация не требуется, что дает возможность получить последние твиты пользователя (не более 20) чисто клиентским яваскриптом. Идея в том, чтобы загрузить виджет в скрытый контейнер на странице, а потом распарсить его содержание. Моя небольшая библиотека это и делает, использовать ее можно так:

loadTweets('123456789012345678', 10).done(function(tweets) {
    console.log(tweets);
});

Здесь первый параметр — ID виджета, созданного в настройках вашего профиля, второй параметр — количество твитов для загрузки. Все работает асинхронно и возвращает объект Deferred из jQuery.

Код, оформленный в виде в виде модуля Require.js, и крошечная документация доступны в репозитории на битбакете.

2015