Эмакс
Emacs ( / ˈ iː m æ k s / ), первоначально называвшийся EMACS (аббревиатура от «Editor Macros»), [ 1 ] [ 2 ] [ 3 ] — семейство текстовых редакторов , отличающихся своей расширяемостью . [ 4 ] Руководство для наиболее широко используемого варианта, [ 5 ] GNU Emacs описывает его как «расширяемый, настраиваемый, самодокументируемый редактор, отображаемый в реальном времени». [ 6 ] Разработка первого Emacs началась в середине 1970-х годов. [ 7 ] [ 8 ] и работа над GNU Emacs, прямым потомком оригинала, продолжается; его последняя версия — 29.4, выпущенная в июне 2024 года. [ 9 ]
Emacs имеет более 10 000 встроенных команд, а его пользовательский интерфейс позволяет пользователю объединять эти команды в макросы для автоматизации работы. Реализации Emacs обычно содержат диалект языка программирования Lisp , позволяющий пользователям и разработчикам писать новые команды и приложения для редактора. Были написаны расширения, среди прочего, для управления файлами , удаленного доступа , [ 10 ] электронная почта , схемы , мультимедиа , с Git интеграция , RSS- каналы, [ 11 ] и совместное редактирование , [ 12 ] а также реализации ELIZA , Pong , Conway's Life , Snake , Dunnet и Tetris . [ 13 ]
Оригинальная версия EMACS была написана в 1976 году Дэвидом А. Муном и Гаем Л. Стилом-младшим как набор макросов для редактора TECO . [ 14 ] [ 1 ] [ 2 ] [ 3 ] [ 15 ] Он был вдохновлен идеями макроредакторов TECO TECMAC и TMACS. [ 16 ]
Самая популярная и наиболее портированная версия Emacs — GNU Emacs, созданная Ричардом Столлманом для проекта GNU . [ 17 ] XEmacs — это вариант, ответвленный от GNU Emacs в 1991 году. GNU Emacs и XEmacs используют схожие диалекты Lisp и по большей части совместимы друг с другом. Разработка XEmacs неактивна.
GNU Emacs , наряду с vi , является одним из двух главных соперников в традиционных войнах редакторов культуры Unix . GNU Emacs — один из старейших бесплатных проектов с открытым исходным кодом, которые все еще находятся в стадии разработки. [ 18 ]
История
[ редактировать ]Разработка Emacs началась в 1970-х годах в Лаборатории искусственного интеллекта Массачусетского технологического института , чьи компьютеры PDP-6 и PDP-10 использовали Inсовместимой системы разделения времени (ITS) операционную систему , в которой по умолчанию использовался строковый редактор , известный как Tape Editor and Corrector (TECO). В отличие от большинства современных текстовых редакторов, в TECO использовались отдельные режимы, в которых пользователь либо добавлял текст, редактировал существующий текст, либо отображал документ. Нельзя было помещать символы непосредственно в документ, вводя их в TECO, вместо этого можно было ввести символ («i») на командном языке TECO, указывающий ему переключиться в режим ввода, ввести необходимые символы, в течение которых редактируемый текст не отображался на экране, и, наконец, введите символ (<esc>), чтобы переключить редактор обратно в командный режим. (Аналогичный метод использовался, чтобы разрешить перепечатку.) Такое поведение аналогично поведению программы ed .
К 1970-м годам TECO уже была старой программой, первоначально выпущенной в 1962 году. Ричард Столлман посетил Стэнфордскую лабораторию искусственного интеллекта в 1976 году. [ 20 ] лаборатории и увидел редактор E , написанный Фредом Райтом. [ 21 ] Он был впечатлен интуитивно понятным поведением редактора WYSIWYG («Что видишь, то и получаешь»), которое с тех пор стало поведением по умолчанию для большинства современных текстовых редакторов. Он вернулся в Массачусетский технологический институт, где Карл Миккельсен, хакер из лаборатории искусственного интеллекта, добавил в TECO комбинированный режим отображения/редактирования под названием Control-R , который позволял обновлять изображение на экране каждый раз, когда пользователь нажимал клавишу. Столлман переопределил этот режим для более эффективной работы, а затем добавил функцию макроса в режим редактирования дисплея TECO, которая позволяла пользователю переопределять любое нажатие клавиши для запуска программы TECO. [ 3 ]
У E была еще одна функция, которой не хватало TECO: редактирование с произвольным доступом. TECO был редактором с последовательной постраничной обработкой, который был разработан для редактирования бумажной ленты на PDP-1 в то время, когда память компьютера обычно была небольшой из-за стоимости, и это была функция TECO, которая позволяла последовательно редактировать только одну страницу за раз. в порядке страниц в файле. Вместо того, чтобы использовать подход E по структурированию файла для произвольного постраничного доступа на диске, Столлман модифицировал TECO для более эффективной обработки больших буферов и изменил метод управления файлами, чтобы читать, редактировать и записывать весь файл как один буфер. Практически все современные редакторы используют этот подход.
Новая версия TECO быстро стала популярной в лаборатории искусственного интеллекта и вскоре собрала большую коллекцию пользовательских макросов, имена которых часто заканчивались на MAC или MACS , что означало макрос . Два года спустя Гай Стил взялся за проект объединения разнообразных макросов в единый набор. [ 22 ] Законченная реализация Стила и Столлмана включала средства для расширения и документирования нового набора макросов. [ 3 ] Получившаяся система получила название EMACS, что расшифровывалось как «Редактирование MACroS» или, альтернативно, E с MACroS . Столлман выбрал имя Emacs, «потому что <E> в то время не использовался в качестве аббревиатуры в ITS». [ 23 ] В апокрифическом хакерском коане утверждается, что программа была названа в честь Emack & Bolio's , популярного бостонского магазина мороженого. [ 24 ] Первая действующая система EMACS появилась в конце 1976 года. [ 25 ]
Столлман увидел проблему в слишком большой настройке и де-факто разветвлении и установил определенные условия для использования. [ нужна ссылка ] Позже он написал: [ 25 ]
EMACS распространялся на основе совместного использования, что означает, что все улучшения должны быть возвращены мне для включения и распространения.
Оригинальный Emacs, как и TECO, работал только на PDP-10 с ITS. Его поведение настолько отличалось от поведения TECO, что его можно было считать самостоятельным текстовым редактором, и он быстро стал стандартной программой редактирования в ITS. Майк МакМахон портировал Emacs с ИТС на операционные системы «Техснабэкспорт» и ТОПС-20 . Среди других участников ранних версий Emacs — Кент Питман , Эрл Киллиан и Юджин Сиккарелли . К 1979 году Emacs был основным редактором, используемым в лаборатории искусственного интеллекта Массачусетского технологического института и его лаборатории компьютерных наук. [ 26 ]
Реализации
[ редактировать ]Ранние реализации
[ редактировать ]В последующие годы программисты написали множество редакторов, подобных Emacs, для других компьютерных систем. К ним относятся EINE ( EINE — это не EMACS ) и ZWEI . [ 27 ] ( ZWEI Was EINE Initially ), которые были написаны для Lisp-машины Майком МакМахоном и Дэниелом Вайнребом , и Sine ( Sine Is Not Eine ), [ 28 ] который был написан Оуэном Теодором Андерсоном. Вайнреба EINE был первым Emacs, написанным на Lisp. В 1978 году Бернард Гринберг написал Multics Emacs почти полностью на Multics Lisp в Кембриджской лаборатории информационных систем компании Honeywell . Multics Emacs позже поддерживался Ричардом Соли , который продолжил разработку редактора, подобного NILE Emacs, для проекта NIL, и Барри Марголина. Многие версии Emacs, включая GNU Emacs, позже приняли Lisp в качестве языка расширения.
Джеймс Гослинг , который позже изобрел NeWS и язык программирования Java , написал Gosling Emacs в 1981 году. Первый Emacs-подобный редактор, работавший в Unix. [ нужна ссылка ] Gosling Emacs был написан на C и использовал Mocklisp , язык с синтаксисом, подобным Lisp, в качестве языка расширения.
Ранняя реклама компьютерной корпорации американской CCA EMACS (Стив Циммерман) [ 29 ] появился в 1984 году. [ 30 ] В сравнении 1985 года с GNU Emacs, когда он вышел, упоминалась бесплатная версия по сравнению с 2400 долларами. [ 31 ] [ неуместная цитата ]
ГНУ Эмакс
[ редактировать ]Ричард Столлман начал работу над GNU Emacs в 1984 году, чтобы создать свободную альтернативу проприетарному Gosling Emacs. GNU Emacs изначально был основан на Gosling Emacs, но замена Столлманом его интерпретатора Mocklisp настоящим интерпретатором Lisp потребовала переписывания почти всего его кода. Это стала первая программа, выпущенная зарождающимся проектом GNU. GNU Emacs написан на C и предоставляет Emacs Lisp , также реализованный на C, в качестве языка расширения. Версия 13, первый публичный выпуск, была выпущена 20 марта 1985 года. Первой широко распространенной версией GNU Emacs была версия 15.34, выпущенная позже в 1985 году. Ранние версии GNU Emacs имели номера 1.xx , где начальная цифра обозначала версия ядра C. Цифра 1 была исключена после версии 1.12, так как считалось, что главное число никогда не изменится, и поэтому нумерация была пропущена с 1 до 13 . [ 32 ] В сентябре 2014 года в списке рассылки GNU emacs-devel было объявлено, что GNU Emacs примет стратегию быстрого выпуска , и в будущем номера версий будут увеличиваться быстрее. [ 33 ]
GNU Emacs предлагал больше возможностей, чем Gosling Emacs, в частности, полнофункциональный Lisp в качестве языка расширения, и вскоре заменил Gosling Emacs в качестве де-факто редактора Unix Emacs. Маркус Хесс воспользовался брешью безопасности в подсистеме электронной почты GNU Emacs во время своего взлома в 1986 году, в ходе которого он получил доступ суперпользователя к компьютерам Unix. [ 34 ]
Большая часть функциональности GNU Emacs реализована посредством языка сценариев Emacs Lisp . Поскольку около 70% GNU Emacs написано на языке расширения Emacs Lisp, [ 35 ] нужно только портировать ядро C, которое реализует интерпретатор Emacs Lisp. Это делает портирование Emacs на новую платформу значительно менее сложным, чем портирование эквивалентного проекта, состоящего только из собственного кода.
Разработка GNU Emacs была относительно закрыта до 1999 года и использовалась в качестве примера стиля разработки Cathedral в The Cathedral and the Bazaar . С тех пор проект принял общедоступный список рассылки для разработчиков и анонимный доступ к CVS . Разработка велась в едином стволе CVS до 2008 года, а затем была переключена на Bazaar DVCS . 11 ноября 2014 года разработка была перенесена на Git . [ 36 ]
Ричард Столлман оставался главным разработчиком GNU Emacs, но время от времени отходил от этой роли. Стефан Моннье и Чонг Идонг занимались сопровождением с 2008 по 2015 год. [ 37 ] [ 38 ] Джон Вигли был назначен специалистом по сопровождению в 2015 году после встречи со Столлманом в Массачусетском технологическом институте. [ 39 ] GNU Emacs насчитывалось 579 отдельных коммиттеров . По состоянию на начало 2014 года за всю историю существования [ 40 ]
XEmacs
[ редактировать ]Lucid Emacs, основанный на ранней альфа-версии GNU Emacs 19, был разработан в 1991 году Джейми Завински и другими из Lucid Inc. Одно из самых известных ранних ответвлений в разработке свободного программного обеспечения произошло, когда кодовые базы двух версий Emacs разошлись. и отдельные команды разработчиков прекратили попытки объединить их обратно в единую программу. [ 41 ] Lucid Emacs с тех пор был переименован в XEmacs . Его разработка в настоящее время неактивна: самая последняя стабильная версия 21.4.22 выпущена в январе 2009 года (в то время как бета-версия была выпущена в 2013 году), в то время как в GNU Emacs реализованы многие функции, которые раньше были доступны только для XEmacs. [ 42 ] [ нужен лучший источник ]
Другие версии GNU Emacs
[ редактировать ]Другие известные форки включают:
- Aquamacs - основан на GNU Emacs (Aquamacs 3.2 основан на GNU Emacs версии 24, а Aquamacs 3.3 основан на GNU Emacs версии 25), который ориентирован на интеграцию с пользовательским интерфейсом Apple Macintosh.
- Meadow — японская версия для Microsoft Windows. [ 43 ]
Различные редакторы Emacs
[ редактировать ]В прошлом проекты, направленные на создание небольших версий Emacs, быстро распространялись. GNU Emacs изначально был ориентирован на компьютеры с 32-битным плоским адресным пространством и объемом оперативной памяти не менее 1 МБ . [ 44 ] В 1980-х годах такие компьютеры представляли собой высокопроизводительные рабочие станции и миникомпьютеры , и это вызывало необходимость в более мелких модификациях, которые могли бы работать на обычном оборудовании персональных компьютеров . Сегодняшние компьютеры имеют более чем достаточную мощность и мощность, чтобы устранить эти ограничения, но в последнее время были разработаны небольшие клоны, которые можно разместить на установочных дисках программного обеспечения или для использования на менее мощном оборудовании. [ 45 ]
Другие проекты направлены на реализацию Emacs на другом диалекте Lisp или вообще на другом языке программирования. Хотя не все из них до сих пор активно поддерживаются, в число этих клонов входят:
- MicroEMACS , которая была первоначально написана Дэйвом Конроем и развита Дэниелом Лоуренсом и существует во многих вариациях.
- mg , первоначально называвшийся MicroGNUEmacs, а позже — mg2a, общедоступный вариант MicroEMACS, призванный больше напоминать GNU Emacs. Теперь установлен по умолчанию в OpenBSD .
- JOVE (Собственная версия Emacs Джонатана), непрограммируемая реализация Emacs Джонатана Пейна для UNIX-подобных систем.
- MINCE (MINCE Is Not Complete Emacs), версия для CP/M и более поздних версий DOS, из Mark of the Unicorn . MINCE превратился в Final Word, который в конечном итоге стал текстовым процессором Borland Sprint .
- Perfect Writer , реализация CP/M, созданная на основе MINCE, которая была включена примерно в 1982 году в качестве текстового процессора по умолчанию в самые ранние выпуски Kaypro II и Kaypro IV. Позже он был представлен Kaypro 10 в качестве альтернативы WordStar .
- Freemacs — версия для DOS , которая использует язык расширения, основанный на расширении текстовых макросов, и укладывается в исходный предел плоской памяти в 64 КиБ .
- Zmacs для MIT Lisp Machine и ее потомков, реализованный в ZetaLisp .
- Эпсилон , [ 46 ] клон Emacs от Lugaru Software. В этот выпуск включены версии для DOS, Windows, Linux, FreeBSD, Mac OS X и OS/2. Он использует язык расширения, отличный от Lisp, с синтаксисом C и использовал очень раннюю реализацию буфера параллельной командной оболочки в однозадачной MS-DOS.
- PceEmacs — это редактор SWI-Prolog на базе Emacs .
- Hemlock , первоначально написанный на Spice Lisp , затем на Common Lisp . Часть CMU Common Lisp . Под влиянием Zmacs . Позже был разветвлен проектами Lucid Common Lisp (как Helix), LispWorks и Clozure CL . Существует также проект Portable Hemlock, целью которого является создание Hemlock, работающего на нескольких реализациях Common Lisp.
- edwin — текстовый редактор, подобный Emacs, входящий в состав MIT/GNU Scheme.
Редакторы с эмуляцией Emacs
[ редактировать ]- Текстовая система Cocoa использует часть той же терминологии и понимает многие навигационные привязки Emacs. Это возможно, поскольку собственный пользовательский интерфейс использует клавишу Command (эквивалент Super) вместо клавиши Control . [ 47 ]
- Eclipse (IDE) предоставляет набор сочетаний клавиш Emacs.
- Epsilon (текстовый редактор). По умолчанию используется эмуляция Emacs и поддерживается режим vi.
- GNOME Builder имеет режим эмуляции для Emacs.
- GNU Readline — это текстовый редактор , который понимает стандартные сочетания клавиш навигации Emacs. Он также имеет режим эмуляции Vi .
- IntelliJ IDEA предоставляет набор сочетаний клавиш Emacs.
- JED имеет режим эмуляции для Emacs.
- Собственный редактор Джо эмулирует сочетания клавиш Emacs при вызове как jmacs .
- MATLAB предоставляет сочетания клавиш Emacs для своего редактора. [ 48 ]
- Multi-Edit предоставляет сочетания клавиш Emacs для своего редактора.
- В KornShell есть режим редактирования строк Emacs, который предшествует Gnu Readline. [ 49 ]
- Visual Studio Code имеет несколько расширений для эмуляции сочетаний клавиш Emacs.
- Oracle SQL Developer может сохранять и загружать альтернативные раскладки сочетаний клавиш. Одна из встроенных раскладок обеспечивает сочетания клавиш, подобные Emacs, включая использование различных команд для достижения более точного поведения.
Функции
[ редактировать ]Emacs — это прежде всего текстовый редактор , предназначенный для манипулирования фрагментами текста, хотя он способен форматировать и печатать документы, как текстовый процессор , взаимодействуя с внешними программами, такими как LaTeX , Ghostscript или веб-браузер. Emacs предоставляет команды для манипулирования и дифференцированного отображения семантических единиц текста, таких как слова , предложения , абзацы и конструкции исходного кода, такие как функции . Он также содержит макросы клавиатуры для выполнения пользовательских пакетов команд редактирования.
GNU Emacs — это редактор отображения в реальном времени , поскольку его изменения отображаются на экране по мере их возникновения. Это стандартное поведение современных текстовых редакторов, но EMACS был одним из первых, кто реализовал это. Альтернативой является подача отдельной команды для отображения текста (например, до или после его изменения). Это было обычным явлением в более ранних (или просто более простых) строковых и контекстных редакторах, таких как QED (BTS, CTSS, Multics), ed (Unix), ED (CP/M) и Edlin (DOS).
Общая архитектура
[ редактировать ]Почти вся функциональность Emacs, включая базовые операции редактирования, такие как вставка символов в файл, достигается с помощью функций, написанных на диалекте языка программирования Lisp . Диалект, используемый в GNU Emacs, известен как Emacs Lisp (Elisp) и был разработан специально для переноса Emacs на GNU и Unix . Уровень Emacs Lisp расположен поверх стабильного ядра базовых сервисов и абстракции платформы, написанного на языке программирования C , что позволяет портировать GNU Emacs на широкий спектр операционных систем и архитектур без изменения семантики реализации системы Lisp, где большая часть редактор жив. В этой среде Lisp переменные и функции можно изменять без необходимости пересборки или перезапуска Emacs, причем даже недавно переопределенные версии основных функций редактора асинхронно компилируются и загружаются в рабочую среду для замены существующих определений. Современный GNU Emacs поддерживает компиляцию как байт-кода , так и собственного кода для Emacs Lisp.
Вся конфигурация хранится в переменных, классах и структурах данных и изменяется путем простого обновления их в реальном времени. Использование диалекта Лиспа в этом случае является ключевым преимуществом, поскольку синтаксис Лиспа состоит из так называемых символических выражений (или sexprs), которые могут выступать как в качестве вычислимых кодовых выражений, так и в качестве формата сериализации данных, похожего на формат сериализации данных , но более простой и более простой. общие, чем хорошо известные, такие как XML , JSON и YAML . Таким образом, на практике существует небольшая разница между настройкой существующих функций и написанием новых, оба из которых выполняются одним и тем же основным способом. Это функционально отличается от большинства современных расширяемых редакторов, например таких, как VS Code , в которых отдельные языки используются для реализации интерфейса и функций редактора, а также для кодирования его определяемой пользователем конфигурации и параметров. Целью открытого дизайна Emacs является прозрачное представление внутренних компонентов Emacs пользователю Emacs во время обычного использования таким же образом, каким они были бы доступны разработчику Emacs, работающему над git Tree и максимально стереть различия между использованием Emacs и программированием Emacs, сохраняя при этом стабильную, практичную и отзывчивую среду редактирования для начинающих пользователей.
Интерактивные данные
[ редактировать ]Основной структурой данных редактирования текста является буфер — область памяти, содержащая данные (обычно текст) со связанными атрибутами. Наиболее важными из них являются:
- Точка ; : редактирования курсор
- Метка : настраиваемое местоположение, которое вместе с точкой позволяет выбирать
- Регион ; : концептуально непрерывный набор текста, к которому будут применяться команды редактирования
- Имя и индекс файла, который посещает буфер (если есть);
- Каталог по умолчанию любые команды уровня ОС ; будут выполняться , из которого по умолчанию
- буфера Режимы , включая основной режим , возможно, несколько второстепенных режимов .
- — Кодировка буфера метод, с помощью которого Emacs представляет данные буфера пользователю;
- а также различные локальные переменные буфера и состояние Emacs Lisp.
Режимы , в частности, являются важной концепцией в Emacs, предоставляющей механизм для разделения функциональности Emacs на наборы поведений и привязок клавиш, соответствующих данным конкретных буферов. Основные режимы предоставляют общий пакет функций и команд, относящихся к данным буфера и способам взаимодействия пользователей с ними (например, редактирование исходного кода на определенном языке, редактирование hex , просмотр файловой системы, взаимодействие с git и т. д.), а также второстепенные режимы определяют вспомогательные наборы функций, применимые ко многим основным режимам (например, auto-save-mode
). Второстепенные режимы можно включать и выключать как локально для каждого буфера, так и глобально для всех буферов, тогда как основные режимы можно включать только для каждого буфера. Любые другие данные, относящиеся к буферу, но не объединенные в режим, можно обрабатывать, просто выделив этот буфер и непосредственно изменяя соответствующие данные в режиме реального времени.
Любое взаимодействие с редактором (например, нажатие клавиш или нажатие кнопки мыши) реализуется путем оценки кода Emacs Lisp, обычно это команда , которая представляет собой функцию, специально разработанную для интерактивного использования. Клавиши могут быть произвольно переопределены, а доступ к командам также возможен по имени; некоторые команды различными способами оценивают произвольный код Emacs Lisp, предоставленный пользователем (например, семейство eval-
функции, работающие на buffer
, region
или индивидуальный expression
). Даже самые простые пользовательские вводы (например, печатные символы ) выполняются как функции Emacs Lisp, такие как self-insert-command
, привязанный по умолчанию к большинству клавиш клавиатуры в типичном буфере редактирования текста, который параметризуется с помощью символа, определенного локалью , связанного с клавишей, используемой для его вызова.
Например, нажав кнопку f ключ в буфере, который принимает ввод текста, оценивает код (self-insert-command 1 ?f)
, который вставляет одну копию символьной константы ?f
в точку . 1
в данном случае определяется тем, что Emacs называет универсальным аргументом : весь командный код Emacs принимает числовое значение, которое в самом простом использовании указывает на повторение действия, но в более сложных случаях (когда повторение не имеет смысла) может привести к другому поведению. Эти аргументы могут быть переданы через префиксы команд, например Control+ u 7 fили более компактно Meta+ 7 f, который расширяется до (self-insert-command 7 ?f)
. Если префикс не указан, универсальный аргумент имеет вид 1
: каждая команда неявно выполняется один раз, но может называться умножением или другим способом, если она снабжена таким префиксом. Такие аргументы также могут быть неположительными там, где это имеет смысл - функция, принимающая аргумент, должна определить, в соответствии со своей собственной семантикой, что для нее означает данное число. Одним из распространенных вариантов использования является то, что функции выполняют действия в обратном направлении, просто проверяя знак универсального аргумента, например, команда сортировки, которая по умолчанию сортирует в обратном порядке, а при вызове с отрицательным аргументом — в обратном порядке, используя абсолютное значение своего аргумента как ключ сортировки (например, -7
сортировка в обратном порядке по индексу столбца (или разделителю) 7) или отмена/повтор, которые являются просто отрицательными значениями друг друга (перемещение вперед и назад через рекурсивную историю различий на некоторое количество шагов за раз).
Командный язык
[ редактировать ]Из-за относительно большого словаря команд Emacs имеет давно устоявшийся командный язык , позволяющий кратко выражать нажатия клавиш, необходимые для выполнения действия. Этот командный язык распознает следующие клавиши Shift и модификаторы: Ctrl, Alt, ⇧ Shift, Meta, Super, и Hyper. Не все из них могут присутствовать на клавиатуре в стиле IBM, хотя обычно их можно настроить по желанию. Они представлены на командном языке в виде соответствующих префиксов: C-
, A-
, S-
, M-
, s-
, и H-
. Ключи, имена которых могут быть напечатаны только из более чем одного символа, заключаются в угловые скобки. Таким образом, сочетание клавиш, такое как Ctrl+ Alt+ ⇧ Shift+ F9 (проверить зависимые формулы и вычислить все ячейки во всех открытых книгах в Excel ) будет отображаться на командном языке Emacs как C-A-S-<f9>
, а команда Emacs типа Meta+ s f Ctrl+ Meta+ s (добавочный поиск файлов по регулярному выражению , соответствующему имени файла ), будет выражаться как M-s f C-M-s
. Язык команд также используется для выражения действий, необходимых для вызова команд без назначенного ярлыка: например, команда scratch-buffer
(который инициализирует буфер в памяти для временного хранения текста и манипулирования им), при вызове пользователем будет возвращено сообщение как M-x scra <return>
, при этом Emacs сканирует пространство имен контекстно доступных команд, чтобы вернуть кратчайшую последовательность нажатий клавиш, которая однозначно формулирует его.
Динамический дисплей
[ редактировать ]Поскольку Emacs появился раньше современной стандартной терминологии для графических пользовательских интерфейсов , он использует несколько разные имена для знакомых элементов интерфейса. Буферы, данные, с которыми взаимодействуют пользователи Emacs, отображаются пользователю внутри окон , которые представляют собой мозаичные части экрана терминала или окна графического интерфейса, которые Emacs называет фреймами ; в современной терминологии фрейм Emacs будет окном, а окно Emacs — разделенным. В зависимости от конфигурации окна могут включать собственные полосы прокрутки, номера строк, иногда «строку заголовка», обычно для облегчения навигации, и строку режима внизу (обычно отображающую имя буфера, активные режимы и положение точки буфера, среди прочего). ). Нижняя часть каждого кадра используется для выходных сообщений (тогда называемых «областью эха») и ввода текста для команд (тогда называемых «минибуфером»).
В общем, элементы отображения Emacs (окна, фреймы и т. д.) не принадлежат каким-либо конкретным данным или процессу. Буферы не связаны с окнами, и в одном буфере можно открыть несколько окон, например, для параллельного отслеживания различных частей длинного текста без прокрутки вперед и назад, а несколько буферов могут использовать один и тот же текст, например чтобы воспользоваться преимуществами различных основных режимов в файле на смешанном языке. Аналогично, экземпляры Emacs не связаны с конкретными фреймами, и можно открыть несколько фреймов, отображающих один запущенный процесс Emacs, например, кадр на экран в конфигурации с несколькими мониторами или фрейм терминала, подключенный через ssh из удаленной системы и графического кадр, отображающий тот же процесс Emacs на мониторе локальной системы.
Точно так же, как буферы не требуют окон, запуск процессов Emacs не требует каких-либо фреймов, и одним из распространенных шаблонов использования является развертывание Emacs в качестве сервера редактирования : запуск его как безголового демона и подключение к нему через клиент, порождающий фреймы. Затем этот сервер можно сделать доступным в любой ситуации, когда требуется редактор, просто объявив клиентскую программу пользовательской. EDITOR
или VISUAL
переменная. Такой сервер продолжает работать в фоновом режиме, управляя любыми дочерними процессами, накапливая стандартный ввод из открытых каналов, портов или FIFO, выполняя периодические или заранее запрограммированные действия и запоминая историю отмены буфера, сохраненные фрагменты текста, историю команд и другие пользовательские данные. состояние между сеансами редактирования. В этом режиме работы Emacs перекрывает функциональность таких программ, как screen и tmux .
Благодаря отделению функций отображения от функций редактирования, Emacs может отображать примерно одинаково на любом устройстве, более сложном, чем простой терминал , включая предоставление типичных графических элементов WIMP на достаточно функциональных текстовых терминалах - хотя графические фреймы являются предпочтительным режимом отображения, обеспечивая строгий расширенный набор функций фреймов текстового терминала.
Настраиваемость и расширяемость
[ редактировать ]- Действия пользователя можно записывать в макросы и воспроизводить для автоматизации сложных повторяющихся задач. Часто это делается на разовой основе, при этом каждый макрос отбрасывается после использования, хотя макросы можно сохранить и вызвать позже.
- Из-за единообразия определения функций Emacs в терминах Emacs Lisp, то, что считается «действием пользователя» для целей макроавтоматизации, является гибким: макросы могут включать, например, нажатия клавиш, команды, щелчки мыши, другие макросы, и все, что может быть осуществлено с их помощью. Таким образом, макросы могут быть рекурсивными и могут определяться и вызываться внутри макросов.
- При запуске Emacs выполняет сценарий Emacs Lisp с именем ~/.emacs (последние версии также ищут ~/emacs.el , ~/.emacs.d/init.el и ~/.config/emacs/init.el , [ 50 ] а также подобные вариации ~/.config/emacs/early-init.el . [ 51 ] Emacs читает Early-init.el первым, если он существует, и его можно использовать для настройки или сокращения основных функций Emacs перед их загрузкой, таких как система графического отображения или менеджер пакетов . Затем он выполнит первую версию .emacs или init.el , который он находит, игнорируя все остальное. Этот персональный файл настроек может быть сколь угодно длинным и сложным, но его обычное содержимое включает в себя:
- Например, установка глобальных переменных или вызов функций для настройки поведения Emacs.
(set-default-coding-systems 'utf-8)
- Привязки клавиш для замены стандартных и добавления ярлыков для команд, которые пользователь считает удобными, но не имеют привязки клавиш по умолчанию. Пример:
(global-set-key (kbd "C-x C-b") 'ibuffer)
- Загрузка, включение и инициализация расширений (Emacs поставляется со многими расширениями, но по умолчанию загружаются лишь некоторые из них).
- Настройка перехватчиков событий для запуска произвольного кода в определенное время, например, для автоматической перекомпиляции исходного кода после сохранения буфера (
after-save-hook
) - Выполнение произвольных файлов, обычно для разделения слишком длинного файла конфигурации на управляемые и однородные части ( ~/.emacs.d/ и ~/elisp/ — традиционное расположение для этих личных скриптов)
- Например, установка глобальных переменных или вызов функций для настройки поведения Emacs.
- Расширение настройки позволяет пользователю устанавливать свойства конфигурации, такие как цветовая схема, в интерактивном режиме, из Emacs, более удобным для пользователя способом, чем путем установки переменных в .emacs : он предлагает поиск, описания и текст справки, ввод с множественным выбором, возврат к настройкам по умолчанию, изменение работающего экземпляра Emacs без перезагрузки и другие удобства, аналогичные функциям настроек других программ. Пользовательские значения сохраняются в .emacs (или другой назначенный файл) автоматически.
- Темы , влияющие на выбор шрифтов и цветов, определяются как файлы Emacs Lisp и выбираются через расширение настройки.
- Режимы , которые поддерживают редактирование ряда языков программирования (например, emacs-lisp-mode, c-mode, java-mode, ESS for R) путем изменения шрифтов для выделения кода и измененных привязок клавиш (предисловие-функция вместо переадресации страницы). ). Другие режимы включают те, которые поддерживают редактирование электронных таблиц (мрачные) и структурированного текста.
Самодокументирование
[ редактировать ]Первый Emacs содержал справочную библиотеку, включавшую документацию для каждой команды, переменной и внутренней функции. По этой причине сторонники Emacs описали это программное обеспечение как самодокументируемое , поскольку оно предоставляет пользователю информацию о своих обычных функциях и текущем состоянии. Каждая функция включает в себя строку документации, которая отображается пользователю по запросу — практика, которая впоследствии распространилась на языки программирования, включая Lisp , Java , Perl и Python . Эта справочная система может предоставить пользователям доступ к реальному коду каждой функции, как из встроенной библиотеки, так и из добавленной сторонней библиотеки.
В Emacs также имеется встроенное руководство . Emacs отображает инструкции по выполнению простых команд редактирования и вызову учебного пособия, когда оно запускается без файла для редактирования. Учебник написан Стюартом Кракрафтом и Ричардом Столлманом.
Культура
[ редактировать ]Церковь Эмакса
[ редактировать ]Церковь Emacs , основанная Ричардом Столлманом , — это пародийная религия, созданная для пользователей Emacs. [ 52 ] Хотя он называет vi редактором зверя (vi-vi-vi — это 6-6-6 римскими цифрами), он не возражает против использования vi; скорее, он называет это несвободного программного обеспечения анафемой . («Использование бесплатной версии vi — это не грех, а покаяние ». [ 53 ] ) Церковь Emacs имеет свою собственную группу новостей , alt.religion.emacs , [ 54 ] у которого есть посты, якобы поддерживающие эту пародийную религию. Сторонники vi создали противоположный культ vi .
Столлман в шутку называл себя святым I GNU cius , святым церкви Emacs. [ 55 ] Речь идет об Игнатии Антиохийском , отце ранней Церкви, почитаемом в христианстве.
Emacs мизинец
[ редактировать ]Существует фольклор, приписывающий травму от повторяющегося напряжения, которую в просторечии называют Emacs мизинцем , сильной зависимости Emacs от клавиш-модификаторов, хотя не было проведено никаких исследований, которые бы показали, что Emacs вызывает больше таких проблем, чем другие компьютерные программы с тяжелой клавиатурой.
Пользователи решают эту проблему различными способами. Некоторые пользователи рекомендуют просто использовать две клавиши управления на типичных клавиатурах ПК, например клавиши Shift, во время набора текста вслепую, чтобы избежать чрезмерного напряжения левого мизинца. Правильное использование клавиатуры уменьшит RSI. [ 56 ]
- Использование сочетаний клавиш ErgoEmacs (с второстепенным режимом
ergoemacs-mode
). [ 57 ] - Настройка всей раскладки клавиатуры для перемещения статистически часто встречающихся клавиш Emacs в более подходящие места. [ 58 ]
evil-mode
, расширенный уровень эмуляции Vim .god-mode
, который обеспечивает подход, аналогичный vim, с режимом ввода команд Emacs без клавиш-модификаторов.- Используя настраиваемую раскладку клавиш, предлагаемую Spacemacs и Doom Emacs, проекты, в которых space bar Ключ используется в качестве основного ключа для запуска управляющих последовательностей. Эти проекты также в значительной степени включают в себя как
evil-mode
и последнийgod-mode
. [ 59 ] - Предоставление двойной роли клавише с более удобным доступом, такой как клавиша пробела , чтобы она функционировала как клавиша управления при нажатии в сочетании с другими клавишами. Эргономичные клавиатуры или клавиатуры с большим количеством клавиш, прилегающих к пробелу, например японские клавиатуры , позволяют управлять большим пальцем и другими клавишами-модификаторами, такими как Meta или Shift. [ 60 ]
- Использование ограниченного эргономичного набора сочетаний клавиш и доступ к другим функциям путем ввода
M-x <command-name>
. Сам Mx тоже можно перепривязать.
Аппаратные решения включают специальные клавиатуры, такие как Contoured Keyboard от Kinesis , в которой клавиши-модификаторы расположены там, где ими можно легко управлять большим пальцем , или клавиатура Microsoft Natural , чьи большие клавиши-модификаторы расположены симметрично с обеих сторон клавиатуры и их можно нажимать с помощью большого пальца. ладонь руки. Также можно использовать ножные педали.
Мизинец Emacs — относительно недавняя разработка. Клавиатура Space-cadet, на которой был разработан Emacs, имела большие клавиши управления, расположенные рядом с клавишей пробела и до которых было легко дотянуться большим пальцем.
Терминология
[ редактировать ]Слово emacs иногда употребляется во множественном числе как emacsen по фонетической аналогии с boxen и VAXen , относясь к различным разновидностям Emacs. [ 61 ]
См. также
[ редактировать ]- Сравнение текстовых редакторов
- Конкерор
- GNU TeXmacs
- Список текстовых редакторов
- Список команд Unix
- Интегрированная среда разработки
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Гринберг, Бернард С. (1979). Multics Emacs: история, проектирование и реализация .
- ^ Перейти обратно: а б с «Часто задаваемые вопросы по GNU Emacs» .
- ^ Перейти обратно: а б с д Эдриенн Дж. Томпсон. «MACSimizing TECO» . Архивировано из оригинала 24 октября 2013 г. Проверено 26 февраля 2012 г.
- ^ «Учебное пособие по GNU Emacs» .
Для того, чтобы редактор назывался «emacs», основным требованием является то, чтобы он был полностью расширяемым с помощью реального языка программирования, а не только языка макросов.
- ^ «Карманный справочник по GNU Emacs» .
GNU Emacs — самый популярный и распространенный редактор семейства Emacs.
- ^ «Руководство по GNU Emacs» . ФСФ . Проверено 24 ноября 2012 г.
- ^ Завински, Джейми (29 октября 2007 г.). «Хронология Emacs» . www.jwz.org . Проверено 31 июля 2023 г.
- ^ «О происхождении Emacs в 1976 году (статьи в блоге Emacs)» . onlisp.co.uk . Проверено 24 июля 2024 г.
- ^ Кангас, Стефан (22 июня 2024 г.). «Выпущен Emacs 29.4» . lists.gnu.org . Проверено 29 апреля 2024 г.
- ^ «Руководство пользователя Трампа» . Фонд свободного программного обеспечения . Проверено 4 апреля 2009 г.
- ^ «Представляем Elfeed, программу чтения веб-каналов Emacs» .
- ^ «Совместное редактирование с использованием бесконфликтных реплицируемых типов данных» .
- ^ «Развлечения» .
Наконец, если вы расстроены, попробуйте описать свои проблемы известному психотерапевту Элизе. Просто сделай МХ, доктор.
- ^ Завински, Джейми (21 июня 2005 г.) [1999]. «Хронология Emacs» . Проверено 11 августа 2015 г.
- ^ Ричарда Столлмана часто называют еще одним соавтором, но, как писал Дэниел Вайнреб : «Оригинальный (на основе TECO) Emacs был создан и спроектирован Гаем Л. Стилом-младшим и Дэвидом Муном. После того, как они заработали, и он стал стандартным текстовым редактором в лаборатории искусственного интеллекта, Столлман взял на себя его обслуживание». Сам Мун ответил: «Насколько я помню, все правда. Но, честно говоря, я должен сказать, что Столлман значительно улучшил Emacs после того, как «освободил» его от Гая и меня». Видеть Вайнреб, Дэн (11 ноября 2007 г.), «Опровержение истории Столлмана о формировании символики и LMI» , блог Дэна Вейнреба: программное обеспечение и инновации , заархивировано из оригинала 1 января 2009 г.
- ^ «История Emacs» . Руководство по внутреннему устройству XEmacs . 11 декабря 2006 г. Проверено 22 августа 2007 г.
- ^ Алломберт, Билл. «Конкурс популярности Debian» . Об этом сообщает редакция . Дебиан . Проверено 22 ноября 2011 г.
- ^ «10 старейших и значимых программ с открытым исходным кодом» . ЗДНет .
- ^ Раймонд, Эрик С.; Кэмерон, Дебра; Розенблатт, Билл (1996). Изучение GNU Emacs, 2-е издание . Севастополь, Калифорния: О'Рейли. стр. 408–409. ISBN 1-56592-152-6 .
- ^ Уильямс, Сэм (2002). Свободно как свобода: крестовый поход Ричарда Столлмана за свободное программное обеспечение . Севастополь, Калифорния: O'Reilly Media. п. 82. ИСБН 0-596-00287-4 .
- ^ Артур Сэмюэл (март 1980 г.). «Основное Е» (PDF) . Проверено 19 апреля 2020 г.
- ^ «EMACS против vi: бесконечная «священная война» компьютерщиков » . Архивировано из оригинала 26 ноября 2014 г. Проверено 30 мая 2014 г.
«EMACS как таковая на самом деле начиналась как проект по стандартизации», — пишет Гай Стил по электронной почте.
- ^ Столлман, Ричард М. (1987). «Полноэкранный редактор EMACS» . ГАРБ . № май 1987 г. Лисатор, Университет Линчёпинга. стр. 8–11 . Проверено 14 сентября 2007 г.
- ^ Рейнольдс, Крейг (10 февраля 1992 г.). Уайзман, Дэвид Г. (ред.). «Имя Эмак Болио Коан» . Дэвид Г. Уайзман: Истории компьютерного фольклора . Архивировано из оригинала 16 января 2003 года.
Однажды дерзкий новичок сказал Столлману: «Я могу догадаться, почему редактор называется Emacs, но почему оправдатель называется Bolio?». Столлман решительно ответил: «Имена — это всего лишь имена, а «Эмак и Болио» — это название популярного магазина мороженого в городе Бостон». Ни один из этих людей не имел никакого отношения к программному обеспечению». На его вопрос был получен ответ, но, оставшись без ответа, новичок повернулся, чтобы уйти, но Столлман окликнул его: «Ни Emacs, ни Bolio тоже не имеют никакого отношения к магазину мороженого».
- ^ Перейти обратно: а б Столлман, Ричард (26 марта 1981 г.). EMACS: расширяемый, настраиваемый, самодокументируемый редактор отображения (PDF) (технический отчет). Лаборатория искусственного интеллекта Массачусетского технологического института. AI-памятка 519a . Проверено 7 января 2011 г.
- ^ Ли Клотц (29 августа 2007 г.). «электронное письмо, цитируемое в статье «Будьте осторожны со своими шутками» » . Нью-Йорк Таймс . Проверено 1 мая 2010 г.
- ^ «Комментарий автора ZWEI Дэна Вайнреба» .
Я написал второй Emacs: реализацию машины на Лиспе, спецификация которой заключалась в том, чтобы «делать то, что делает Столлман PDP-10 (оригинальный) Emacs», а затем пошел дальше. Там просто МНОГО этого. Мне и Майку МакМахону потребовались бесконечные часы, чтобы реализовать столько команд для создания ZWEI/Zmacs.
- ^ Оуэн Теодор Андерсон (январь 1979 г.). «Проектирование и реализация системы написания редактора, ориентированного на отображение» (PDF) . Проверено 9 сентября 2012 г.
- ^ Кристофер Келти; Марио Бьяджоли; Питер Яси; Марта Вудманси (2015). Создание и уничтожение интеллектуальной собственности .
Компьютерная корпорация Америки (CCA) EMACS, автор Стив Циммерман
- ^ «Эмакс» . 17 декабря 2017 г.
- ^ «Различия между GNU Emacs и CCA Emacs» .
- ^ «История Emacs» .
- ^ "emacs-devel msg 00872 (29 сентября 2014 г.)" .
Оглядываясь назад, 24.3 следовало назвать 25.1, а 24.4 следовало назвать 26.1. На самом деле расширение .N следует сохранять только для выпусков с исправлением ошибок, и ни версии 24.3, 24.4, ни ранее запланированная версия 24.5 не являются выпусками с исправлениями ошибок.
- ^ Столл, Клиффорд (1988). «Преследование хитрого хакера» . Коммуникации АКМ . 31 (5): 484–497. дои : 10.1145/42411.42412 . S2CID 6956966 .
- ^ «ГНУ Эмакс» . Открыть хаб . Проверено 25 ноября 2017 г.
- ^ Раймонд, Эрик (12 ноября 2014 г.). «Новый репозиторий Git открыт» . Проверено 25 ноября 2017 г.
- ^ Столлман, Ричард (22 февраля 2008 г.). «Re: Ищу нового сопровождающего или команду Emacs» . Список рассылки gnu.org . Проверено 25 ноября 2017 г.
- ^ Макнамара, Пол (25 февраля 2008 г.). «Столлман о передаче GNU Emacs, его будущем и важности номенклатуры» . Сетевой мир . Архивировано из оригинала 23 мая 2008 г. Проверено 25 ноября 2017 г.
- ^ Чиргвин, Ричард (5 ноября 2015 г.). «После ухода Ричарда Столлмана у Emacs появился новый сопровождающий» . Регистр . Проверено 25 ноября 2017 г.
- ^ Раймонд, Эрик (29 марта 2014 г.). «Самое уродливое… хранилище… преобразование… когда-либо» . Проверено 25 ноября 2017 г.
двадцать девять лет непрерывного развития не менее чем 579 человек
- ^ Стивен Дж., Тернбулл. «XEmacs против GNU Emacs» . Проверено 2 октября 2012 г.
- ^ «XEmacs мертв. Да здравствует XEmacs!» .
- ↑ FrontPage — Meadow Wiki. Архивировано 16 февраля 2012 г. в Wayback Machine.
- ^ «Мой опыт работы с Lisp и разработка GNU Emacs» .
В те времена, в 1985 году, были люди, у которых были одномегабайтные машины без виртуальной памяти. Они хотели иметь возможность использовать GNU Emacs. Это означало, что мне пришлось сделать программу как можно меньшей.
- ^ «GNU Zile (Zile — это Emacs с потерями) — Резюме» .
Современные компьютеры имеют более чем достаточно ресурсов для запуска и запуска полноценного Emacs за доли секунды, и Emacs, вероятно, — это то, что вам нужно. Zile — небольшой, быстрый и мощный клон Emacs. Это полезно для небольших установок (например, на дискете), машин с небольшим объемом памяти или сеансов быстрого редактирования, особенно на удаленных машинах или под другим пользователем, например root.
- ^ «Домашняя страница программного обеспечения Lugaru» .
- ^ «Текстовая система какао» .
- ^ «Настройка сочетаний клавиш для окна команд и редактора» . Блоги Mathworks . 11 мая 2007 г. Проверено 18 августа 2019 г.
- ^ Больский, Моррис И.; Корн, Дэвид Г. (1989). «Благодарности». Язык команд и программирования KornShell . Энглвуд Клиффс, Нью-Джерси: Прентис Холл. стр. XII. ISBN 0-13-516972-0 .
- ^ «Инициальный файл» .
- ^ «Файл ранней инициализации» .
- ^ «Святой ИГНУций — Ричард Столлман» . Проверено 29 января 2015 г.
- ^ «Полная выборочная стенограмма выступления Ричарда Столлмана в АНУ» . Архивировано из оригинала 4 октября 2011 года . Проверено 29 января 2015 г.
- ^ Группа новостей alt.religion.emacs
- ^ «Святой ИГНУций — Ричард Столлман» . www.stallman.org . Проверено 27 марта 2018 г.
- ^ «Emacs: почему не следует менять местами клавиши {Caps Lock, Control}» .
При слепой печати модификаторы представлены парами, например ⇧ клавиша Shift. Принятый эргономичный способ нажатия комбинаций модификаторов заключается в использовании одной руки для нажатия клавиши-модификатора, а другой — для нажатия буквенной клавиши. Использование двух рук позволяет избежать напряжения мышц одной рукой.
- ^ «Домашняя страница ErgoEmacs» . Проверено 1 сентября 2018 г.
- ^ «Раскладка Keymacs» . Гитхаб . 15 сентября 2022 г.
- ^ «Космосмакс» . Гитхаб . Проверено 20 апреля 2015 г.
- ^ «Модификатор дома от Evdev» . Проверено 14 апреля 2015 г.
- ^ «ВАКСен» . Catb.org . Проверено 8 ноября 2009 г.
Библиография
[ редактировать ]- Сиссарелли, Юджин (1978). Введение в редактор Emacs . Кембридж, Массачусетс: Лаборатория искусственного интеллекта Массачусетского технологического института. АИМ-447. PDF
- Столлман, Ричард М. (1981) [1979]. EMACS: расширяемый, настраиваемый, самодокументируемый редактор дисплеев . Кембридж, Массачусетс: Лаборатория искусственного интеллекта Массачусетского технологического института. АИМ-519А. PDF HTML
- Столлман, Ричард М. (2002). Руководство по GNU Emacs (15-е изд.). ГНУ Пресс. ISBN 1-882114-85-Х .
- Столлман, Ричард М. (2002). «Мой опыт работы с Lisp и разработка GNU Emacs» . Проверено 1 февраля 2007 г.
- Чассель, Роберт Дж. (2004). Введение в программирование на Emacs Lisp . ГНУ Пресс. ISBN 1-882114-56-6 .
- Гликштейн, Боб (апрель 1997 г.). Написание расширений GNU Emacs . О'Рейли и партнеры. ISBN 1-56592-261-1 .
- Кэмерон, Дебра; Эллиотт, Джеймс; Лой, Марк; Раймонд, Эрик; Розенблатт, Билл (декабрь 2004 г.). Изучение GNU Emacs, 3-е издание . О'Рейли и партнеры. ISBN 0-596-00648-9 .
- Финсет, Крейг А. (1991). Искусство редактирования текста или Emacs для современного мира . Springer-Verlag & Co. ISBN 978-1-4116-8297-9 .
- Томпсон, Адриенн Г. (2009). «MACSimizing TECO» . Проверено 26 февраля 2012 г.
Внешние ссылки
[ редактировать ]- Эмакс
- 1970-е годы в вычислительной технике
- программное обеспечение 1976 года
- Бесплатные инструменты сравнения файлов
- Бесплатные интегрированные среды разработки
- Бесплатное программное обеспечение, написанное на C.
- Бесплатное программное обеспечение, написанное на Лиспе.
- Бесплатные текстовые редакторы
- Шестнадцатеричные редакторы
- Интегрированные среды разработки Linux
- Текстовые редакторы Linux
- Текстовые редакторы MacOS
- Текстовые редакторы OpenVMS
- Текстовые редакторы Unix
- Текстовые редакторы Windows