xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Category:

емакс, часть 2: восторг

емакс, часть 1: первый взгляд
емакс, часть 2: восторг
емакс, часть 3: windows
емакс, часть 4: ретроспектива

Неделю назад я начал исследовать емакс с конкретной целью - привести сабж в состояние, пригодное для промышленного использования: в частности, для работы над Дилайтом (это небольшая по размеру библиотечка на Скале, использующая базовые тулы из скаловской экосистемы).

Вначале я хотел все сделать правильно - пройти туториал, освоить emacs way (например, редактирование текста без стрелочек), но дело продвигалось крайне медленно в силу отсутствия привычки. Дело в том, что емакс появился задолго до того, как сформировались современные стандарты графического интерфейса, поэтому многие вещи для непосвященных вроде меня там кажутся... гм, экстравагантными. Поэтому, я решил сделать хитрее, а именно: адаптировать емакс под мои привычки после вижуал-студии. CUA-мод, undo-tree, tabbar, бессовестный ремап хоткеев сохранения, поиска и так далее - все пошло в дело.

После того, как лед тронулся, дела пошли все лучше и лучше. Когда я перестал спотыкаться на базовых вещах, играться стало гораздо интереснее. Через пару дней даже скобочки перестали казаться вырвиглазным абстракционизмом. По концовке удалось запилить:
1) Мейнстримный флейвор редактирования текста (виджет с деревом файлов, закладки, копипаста, традиционный undo/redo, привычные функции мышки),
2) Поддержку мультимониторности,
3) Простенький механизм проектов (в емаксе проектов нет, поэтому пришлось все делать самому - впрочем, 90% строительных блоков были уже реализованы в сторонних модулях),
4) Интеграцию с основными тулами (sbt для компиляции, git для сорс контроля).



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



Скажем, буквально вчера я заставил шифт-клик выделять текст (по умолчанию шифт-клик замаплен на нечто невразумительное). Все, что мне понадобилось - открыть файлик mouse.el, посмотреть как в этом файлике получают текущие координаты мышки и заюзать этот рецепт в своем обработчике шифт-клика. Написанный кодярник я сразу же проверил во встроенном REPL, нашел ошибку, поправил ее и скопипастил результат в файлик автозагрузки. Делов-то, правда?



Конечно, не обошлось без косяков. Например, мне никак не удалось заставить курсор оставаться на месте, даже если я выскролливаюсь мышкой за границы экрана. Понятно, что это можно побороть букмарками, да и не всегда это так уж необходимо, но осадок остается. Или, вот, полоска с табами рендерится сверху каждого текстового окна, и нет возможности ее показывать только сверху, а в других местах спрятать (это хорошо заметно на следующем скриншоте). Так получается потому, что в емаксе нет отдельной абстракции для табов - есть просто место для хедера, куда модуль tabbar рендерит гиперлинки, обернутые в специальный кнопкоподобный стиль. Но, лично в моем случае, это были мелочи на фоне того, что почти все удалось сконфигурировать себе по нраву.

Отдельного восторга заслуживает коллективный разум емаксеров, который нашел миллион способов выполнять самые разные задачи в text-only режиме. Вот, например, диред (dired). На первый взгляд, в текстовом буфере просто-напросто отображается вывод команды ls. Но, присмотревшись, понимаешь, что имена файлов и папок отрендерены гиперлинками и, кроме того, команды перемещения курсора сами прыгают к именам, даже если курсор был в другой части строки. Еще присмотревшись, понимаешь, что обычные кнопки вроде d или r перемаплены на выполнение операций с файловой системой. Дальше замечаешь вещи вроде dired-dwim-target. Скажем, если в двух окнах открыто по инстансу диреда, то диред уже не будет спрашивать куда копировать, а сам догадается, что надо использовать директорию, открытую в другом окне. Удобно - дает мне надежду на то, что со временем удастся-таки найти/написать замену тотал-коммандеру для линухи.



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

Самый большой страх у меня был связан с тем, что придется осваивать на каждом шагу непривычные хоткеи, но его удалось побороть тривиальным образом - просто методично перемаппить часто используемые фичи на удобные сочетания клавиш. Конечно, это неолдскульно и, наверняка, неэкономично с точки зрения движения рук - короче, полный постмодерн, но зато позволило мне сделать первый шаг в использовании емакса, отчего я сейчас невероятно счастлив! =)
Tags: dreams2011, emacs-ru, tools
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 23 comments