Хорошо настроенный Emacs

от автора

Большая интерактивная статья о том как грамотно настроить Emacs.

Emacs [“Editor MACroS”, ​/ˈeditər ˈmakrōs/​​/ˈemaks/​, далее — «эмакс»] был создан давным давно в Лаборатории искусственного интеллекта Массачусетского технологического института MIT AI Lab. Эмакс это текстовый редактор поведение и возможности которого изменяются прямо во время написания в нем текста на языке программирования на котором написан сам эмакс. Более того, прямо во время написания в эмаксе текста на языке программирования на котором написан сам эмакс изменяется поведение и возможности самого языка программирования на котором написан эмакс. Все это делает эмакс самым гибким и универсальным текстовым редактором в сравнении с любым другим.

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

Универсальность эмакса играет вам на руку, если вы понимаете как он устроен: вы можете делать тысячу разных дел через единый интерфейс в котором все состоит из текста во всех его проявлениях. Возможно, это выглядит архаично с точки зрения представлений о современном пользовательском интерфейсе, но это не так; хотя бы потому что современные интерфейсы не раскрывают силу простого текста в полной мере. Чтобы стать грамотным пользователем эмакса, вам придется понять его концепцию и внутреннее устройство, а это значит — приобщиться к культуре хакеров 70-х годов прошлого века. Новичков такое положение дел пугает, но все не так плохо: эмакс сложен только для сложных задач, а для простых задач он прост, все зависит от ваших потребностей. Начать знакомство с ним лучше с общего обзора “A Guided Tour of Emacs” на сайте свободной операционной системы GNU.

Ричард Столлман описывает историю возникновения эмакса в статье «Мой опыт работы с лиспом и развитие GNU Emacs»; эта история тесно связана с не менее интересной историей проекта GNU из которой можно узнать, что GNU Emacs был первым проектом в проекте GNU. Суть того что из себя представляет эмакс подробно изложена в документе “EMACS: The Extensible, Customizable Display Editor” написанном в 1981 году — и за прошедшие годы эта суть ничуть не изменилась.

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

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

В изучении программирования поможет книга «Структура и интерпретация компьютерных программ» — это вводный курс по информатике в MIT. В деле написания программ для эмакса пригодится учебник «Введение в программирование на Emacs Lisp», справочник “GNU Emacs Lisp Reference Manual”, и брошюра “Common Lisp Quick Reference”.

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

Обычно создание удобной для себя конфигурации и ее последующая доводка растягивается на долгое время. Можно облегчить себе жизнь и установить фреймворк в котором все основные настройки выполнены в соответствии с видением автора фреймворка, и вам даже не придется править исходный код для того чтобы просто пользоваться эмаксом в свое удовольствие. Самые популярные фреймворки на сегодня: Spacemacs, Emacs Prelude, Eschulte Literate Emacs Starter Kit, Overtone Emacs Live, Purcell emacs.d, Oh My Emacs.

Все будет хорошо до тех пор пока вы не захотите встроить в эмакс некую невероятную функциональность которой в выбранном фреймворке нет, и тогда вам придется вручную интегрировать некий код не только в эмакс, но и во фреймворк, а для этого нужно будет разобраться с его внутренним устройством, что сводит все его достоинства на нет. К такому выводу пришел автор Emacs Starter Kit (см. Meet Emacs), когда закрыл свой проект после шести лет развития:

Старые версии Emacs Starter Kit были единой-для-всех кодовой базой заменяющей содержимое директории ~/.emacs.d. Это было очень популярное решение, но большая связка бессвязной функциональности вела к тому, что пользователь просто привыкал к ней ничего не понимая. Когда некоторые вещи ломались или вели себя не так как вам хотелось, вы и понятия не имели где их исправить.

Я понял, что пользователям лучше подходят маленькие пакеты дающие желаемую функциональность. Вместо свалки кода, Emacs Starter Kit сделался небольшим руководством. Как пользователю Emacs, вам предстоит искать новые фрагменты эмакс-лисп-кода, интегрировать их, конфигурировать, и даже писать свои собственные. Emacs Starter Kit поможет вам советами где начать и что именно искать, но сборка годной конфигурации это личное дело каждого.

Система пакетов [инфо] эмакса это встроенная в него лисп-программа [см. исходник на github; открыть графический интерфейс системы пакетов в эмаксеM-x list-packages] которая автоматически интегрирует в эмакс другие лисп-программы из интернета. Система пакетов работает независимо от операционной системы под которой запущен редактор, она сама отслеживает зависимости между лисп-программами и заботится об их обновлении. Разработку этой ситемы начал Том Тромей в 2007 году, в 2012 она была включена в состав Emacs 24.1; пик популярности Emacs Starter Kit пришелся именно на эти годы, то есть по большому счету сообщество использовало его для разработки системы пакетов.

Как бы там ни было, личная конфигурация эмакса по своей природе была есть и будет просто большой кучей бессвязаного кода, и лучший способ справиться с этим — оставить все как есть; или превратить эту кучу в руководство которое будет объяснять причины (в первую очередь чтобы не забыть самому) по которым тот или иной фрагмент находится в этой куче, а потом сделать так чтобы это руководство само превращало себя в лисп-программу и выполняло конфигурацию эмакса при запуске. А также пересобирало само себя при изменении и скачивало новые версии себя из удаленных источников. Почему бы и нет. Это же руководство для настройки эмакса мышью в лучших традициях Стэнфорда и MIT.

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

Статья целиком, в репозитории на гитхабе и в репозитории на гитлабе.

ссылка на оригинал статьи http://habrahabr.ru/post/274405/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *