Emacs
Emacs (И́макс, Ема́кс, также Е́макс) — семейство многофункциональных расширяемых текстовых редакторов.
Emacs | |
---|---|
Тип | Текстовый редактор |
Автор | Ричард Столлман, Гай Стил[d] и Дэвид Мун[d] |
Разработчик | Проект GNU |
Написана на | C и Emacs lisp [1] |
Операционная система | Кроссплатформенный |
Первый выпуск | 1976[2] |
Аппаратная платформа | кроссплатформенность |
Последняя версия | 27.1[3] (10 августа 2020 ) |
Тестовая версия | 25.2-RC1 (3 февраля 2017 ) |
Лицензия | GNU GPL |
Сайт | gnu.org/software/emacs/ |
Медиафайлы на Викискладе |
Оригинальный EMACS был написан в 1976 году Ричардом Столлманом и Гаем Стилом (англ.) как набор макросов для редактирования (англ. Editor MACroS) для редактора TECO.[4][5][6][7]
История[8][9]
С заменой телетайпов терминалами в начале 1970-х получил популярность текстовый редактор TECO. Недостатком его было то, что он работал в командном режиме. Каждое действие (открыть файл, закрыть, сохранить, ввести текст и т. п.) осуществлялось соответствующей командой редактора, представлявшей собой цепочку инструкций.
В 1972 или 1974 году (по другим данным, в 1976) Ричард Столлман посетил Stanford AI Lab, где познакомился с текстовым редактором E, который произвёл на него большое впечатление. E позволял осуществлять редактирование в реальном времени, когда экран обновлялся с каждым нажатием клавиши.
В 1972 году Карл Миккельсен (или Миккельсон) добавил в TECO функцию, переключавшую его из командного режима в режим редактирования в реальном времени, в котором экран обновлялся с каждым нажатием клавиши. Функция была названа «Control-R», по имени клавишной комбинации, запускавшей её. Ричард Столлман модифицировал эту функцию, сделав её более эффективной и добавив возможность вызова макросов, позволявших с помощью комбинаций клавиш вызывать соответствующие команды TECO.
В 1978 году Бернардом Гринбергом из Honeywell Cambridge Information Systems Lab был создан Multics Emacs, написанный на MacLisp. Пользовательские расширения были также написаны на Лиспе. Выбор Лиспа обеспечил большую, чем когда-либо прежде, гибкость, и за ним последовало большинство последующих реализаций Emacs.
В 1981 году Джеймсом Гослингом был создан Gosling Emacs, первый Emacs, работавший на UNIX. Он был написан на Си, а расширения — на диалекте языка Лисп под названием Mocklisp.
В 1984 году Ричард Столлман начал разработку новой реализации Emacs как свободной альтернативы проприетарному Gosling Emacs. GNU Emacs стал первой программой проекта GNU. Ядро редактора было написано на Си, а расширения писались на Emacs Lisp. Первые версии GNU Emacs использовали часть кода Gosling Emacs, но когда Gosling Emacs был продан компании UniPress и стал проприетарным, исходный код GNU Emacs был очищен от исходного кода Gosling Emacs.
В 1991 году появился форк Emacs от компании Lucid Inc., названный LucidEmacs. Он был основан на ранней альфа-версии GNU Emacs 19. Впоследствии он был переименован в XEmacs. Форк продержался вплоть до 2009 года, когда была выпущена последняя стабильная версия XEmacs (последняя бета версия была выпущена в 2013[10]). Фактически все уникальные особенности этой вариации Emacs были возвращены в основную ветку GNU/Emacs.
В 2008 году Ричард Столлман отошёл от непосредственной поддержки разработки GNU/Emacs. Место основных разработчиков заняли Стефан Моньер (Stefan Monnier) и Чонг Юдонг (Chong Yidong)[11].
В 2015 году Джон Вайдли (John Wiegley) сменил Стефана Моньера на посту основного разработчика GNU/Emacs[12].
Терминология
Поскольку Emacs появился давно и изначально работал только на текстовых терминалах, его терминология не совсем совпадает с таковой современных оконных систем. Основные специфические термины Emacs:
- Буфер — объект, представляющий какой-либо текст. Большинство буферов соответствует открытым файлам, но в принципе буфер может содержать что угодно, например результаты компиляции программы или встроенные подсказки. Emacs в этом плане очень однороден и практически всё общение с пользователем, в том числе интерактивное, идёт через буфера.
- Фрейм соответствует окну в обычном понимании этого слова (как у X Window System). Каждый фрейм содержит область вывода и одно или несколько окон Emacs.
- Окно — это просто прямоугольная область фрейма, которая отображает один из буферов. Помимо этого, каждое окно имеет свою строку состояния (англ. mode line), где выводится название буфера, его основной режим и т. п.
- Область вывода (echo area) — одна или несколько (по необходимости) строк внизу фрейма, в которой Emacs выводит различные сообщения, а также запрашивает подтверждения и дополнительную информацию от пользователя.
- Минибуфер используется для ввода дополнительной информации. Он всегда отображается в области вывода. Это такой же буфер, как и все остальные, что даёт интересный эффект: например, при операции замены текста можно ввести многострочный текст, что невозможно в большинстве других редакторов.
Основные особенности
Основу идеологии Emacs составляют принципы «всё в одном», расширяемости, настраиваемости под пользователя и документированности.
«Всё в одном»
Функциональность Emacs можно разделить на три уровня: базовая, основной режим и дополнительные режимы. Сочетание этих трёх уровней позволяет выполнять огромное количество задач (в том числе и не связанных напрямую с редактированием текста) не выходя из редактора.
Базовая функциональность включает в себя основные операции работы с текстом, как присутствующие в любом редакторе, так и уникальные для Emacs. Сюда входят вставка и удаление текста, перемещение по тексту, открытие и сохранение файлов и т. п. Уникальным для Emacs является множество этих операций и доступность практически всех из них с клавиатуры. Так, например, по тексту можно перемещаться посимвольно, по словам, строкам, страницам, предложениям, абзацам, сбалансированным спискам (то есть по выражениям, заключённым в скобки), функциям…
Основной режим Emacs определяется типом редактируемого файла. Существуют режимы для различных языков программирования, языков разметки текста (HTML, TeX и т. п.), для просмотра каталогов, для чтения и отправления электронной почты и многие другие. Основной режим определяет способ подсветки синтаксиса, способ выравнивания кода для языков программирования, специальные команды для выполнения часто используемых операций и др. Основной режим может также переопределять базовые элементы текста. Так, при редактировании программ на C и подобных языках предложением считается одна команда программы. При этом в комментариях предложение имеет обычный текстовый смысл.
Дополнительные режимы обычно обеспечивают функциональность, не зависящую или слабо зависящую от формата редактируемого файла. В отличие от основного режима, который для любого буфера один, количество активных дополнительных режимов не ограничено. Например, существуют режимы для подсветки текущей строки, постоянного вывода имени текущей функции для текстов программ, подсветки соответствующих друг другу скобок и многие другие.
Расширяемость
Emacs написан на двух языках: C и Emacs Lisp (Elisp, диалект Лиспа). При этом сам редактор является интерпретатором Elisp. По сути дела, большая часть Emacs написана на языке Elisp и её можно рассматривать как расширение к основной программе.
Пользователи могут сами создавать части Emacs, от отдельных функций до новых основных режимов. При этом можно переопределять любые Elisp-функции, в том числе и те, что являются частью самого редактора. Так что можно легко модифицировать функциональность Emacs, просто соответствующим образом «подправив» некоторые функции.
Помимо большого количества расширений, ориентированных на написание текста или разработку программ, существуют пакеты для Emacs, выполняющие функции полноценных приложений для чтения почты и новостей (например, Gnus), организации личного времени и учёта информации, создания и прослушивания музыки, общения через Jabber или IRC. Количество созданных для Emacs приложений таково, что можно с успехом выполнять множество задач, не выходя из Emacs.
Кроме этого, Emacs позволяет переопределять практически любые клавиши, как глобально, так и для каждого основного режима в отдельности. Поэтому легко можно назначить часто используемое действие на свободное сочетание клавиш (или на занятое, предварительно его освободив).
Настраиваемость
Emacs написан с учётом того, что разные пользователи имеют разные предпочтения. Различные параметры редактирования можно изменять, используя Elisp-переменные. Кроме того, для удобства, а также для тех, кто не знает Elisp, предусмотрен режим настройки, где значения параметров можно вводить в специальные поля или выбирать из списков. Emacs позволяет устанавливать различные значения переменных-параметров для разных буферов. Значения переменных можно также сохранять в файлах, так что можно без дополнительных усилий редактировать C-файлы с базовым отступом в 2 пробела или в 4 — это значение можно просто сохранить в файле.
Как уже указывалось выше, можно настраивать Emacs под свои нужды, используя функции, написанные на языке Elisp, в том числе и переопределяя уже существующие. Наконец, Emacs предоставляет очень мощную возможность выполнять произвольный набор функций при наступлении некоторых условий. Такие функции добавляются в так называемые «ловушки» (англ. hook — ловушка, западня, крючок). При помощи «ловушек» можно «отлавливать» (перехватывать) определённые события (например, включение того или другого режима). Есть даже такое мощное средство, как возможность выполнения функций после каждого изменения буфера.
Документированность
Emacs обладает подробной документацией, включая и документацию по Elisp. Но особенностью Emacs является то, что каждая функция или переменная может быть снабжена документацией при своём определении. Такую документацию можно просмотреть, просто указав имя функции или переменной.
Интересные факты
- Emacs имеет режим «психотерапевта», доступный, в частности, через пункт меню «Help→Emacs Psychotherapist» (
M-x doctor
), см. Элиза. - В Emacs есть встроенные игры, например тетрис (
M-x tetris
). Есть также расширение (устанавливаемое из внешних репозиториев), которое позволяет Emacs играть в тетрис автоматически, без участия человека.[13] - «Высокий» номер версий Emacs (21, 22) связан не только с высокой интенсивностью разработки редактора и его почтенным возрастом. Вначале версии нумеровались как 1.15, но потом было принято решение отказаться от ведущей единицы.
- Слово «Emacs» берёт начало в аббревиатуре «Editor MACroS», наборе макросов для редактора TECO, написанном Столлманом и другими в 1976 году. Однако существует множество других, отчасти шутливых расшифровок этого слова:
Примечания
- Emacs Timeline
- Stallman R. 7. History // EMACS (англ.): The Extensible, Customizable Self-Documenting Display Editor — 1981. — P. 18.
- Emacs 27.1 released . mail-archive.com.
- Bernard S. Greenberg. Multics Emacs: The History, Design and Implementation (недоступная ссылка). Архивировано 29 июня 2013 года.
- GNU Emacs FAQ (недоступная ссылка). Архивировано 29 июня 2013 года.
- Jamie Zawinski. Emacs Timeline .
- Adrienne G. Thompson. MACSimizing TECO (недоступная ссылка). Архивировано 29 июня 2013 года.
- Содружество Emacs Архивировано 10 ноября 2013 года.
- EmacsWiki: EmacsHistory
- Архивированная копия (недоступная ссылка). Дата обращения: Сентябрь 22, 2015. Архивировано Март 4, 2016.
- Re: Looking for a new Emacs maintainer or team . gnu.org Mailing List. Дата обращения: 23 февраля 2008.; см. также «Stallman on handing over GNU Emacs, its future and the importance of nomenclature»
- Emacs gets new maintainer as Richard Stallman signs off .
- skeeto/autotetris-mode . GitHub. Дата обращения: 19 декабря 2016.
- EMACS
Ссылки
- Сайт GNU Emacs (англ.)
- Сайт XEmacs (англ.)
- GNU Emacs на сервере ЯрГУ (рус.)
- Вики о Emacs (рус.)
- Emacs Wiki (англ.)
- WikiEmacs (англ.)
- Эффективное использование Emacs (рус.)
- #emacs — IRC-канал Emacs в сети Freenode (англ.)
- xmpp: emacs@conference.jabber.ru — Jabber-конференция (рус.)
- Emacs @ dmoz.org