Emacs

Материал из wikixw
Перейти к навигации Перейти к поиску

Emacs / ˈ i æ m æ k s / или EMACS (макросы редактора) это семейство текстовых редакторов, которые характеризуются своей расширяемостью . руководство по наиболее широко используемому варианту, GNU Emacs , описывает его как "расширяемый, настраиваемый, самодокументирующийся редактор отображения в реальном времени".[8] разработка первого Emacs началась в середине 1970-х годов, и работа над его прямым потомком, GNU Emacs, продолжается активно с 2019 .

Emacs имеет более 10 000 встроенных команд, и его пользовательский интерфейс позволяет пользователю объединять эти команды в макросы для автоматизации работы. Реализации Emacs обычно имеют диалект языка программирования Lisp, который обеспечивает возможность глубокого расширения, позволяя пользователям и разработчикам писать новые команды и приложения для редактора. Расширения были написаны для управления электронной почтой , файлами , контурами и RSS-каналами , а также клонами ELIZA , Pong , Conway's Life , Snake и Tetris .

Оригинальный EMACS был написан в 1976 году Карлом Миккельсеном, Дэвидом А. Муном и Гаем л. Стилом младшим в качестве набора макросов редактора для редактора TECO. он был вдохновлен идеями редакторов TECO-macro tecmac и TMACS.

Наиболее популярной и наиболее портированной версией Emacs является GNU Emacs, который был создан Ричардом Столманом для проекта GNU . XEmacs является вариантом, который разветвился от GNU Emacs в 1991 году. GNU Emacs и XEmacs используют похожие диалекты Lisp и по большей части совместимы друг с другом.

Emacs, наряду с vi, является одним из двух основных соперников в традиционных редакторских войнах культуры Unix. Emacs является одним из старейших проектов с открытым исходным кодом, который все еще находится в стадии разработки

История[править]

Разработка Emacs началась в 1970-х годах в лаборатории MIT AI, чьи компьютеры PDP-6 и PDP-10 использовали несовместимую операционную систему Timesharing System (ITS), которая имела редактор строк по умолчанию, известный как редактор ленты и корректор (TECO). В отличие от большинства современных текстовых редакторов, TECO использует отдельные режимы, в которых пользователь будет добавлять текст, редактировать существующий текст или отображать документ. Вы не можете поместить символы непосредственно в документ, введя их в TECO, но вместо этого введите символ ("i") на командном языке TECO, приказывая ему переключиться в режим ввода, введите необходимые символы, в течение которых отредактированный текст не отображался на экране, и, наконец, введите символ (<esc>), чтобы переключить редактор обратно в командный режим. (Аналогичная техника была использована для допуска овертайма.) Это поведение похоже на поведение программы ed .

Ричард Столмен посетил Стэнфордскую лабораторию искусственного интеллекта в 1972 или 1974 году и увидел редактора лаборатории E, написанного Фредом Райтом.[16] он был впечатлен интуитивным поведением редактора WYSIWYG (What You See Is What You Get), которое с тех пор стало поведением по умолчанию большинства современных текстовых редакторов. Он вернулся в MIT, где Карл Миккельсен, хакер из лаборатории ИИ, добавил к TECO комбинированный режим отображения / редактирования под названием Control-R, который позволял обновлять экран каждый раз, когда пользователь вводит нажатие клавиши. Stallman повторно реализовал этот режим для эффективного выполнения, а затем добавил макрос функция в режиме редактирования дисплея TECO, которая позволяет пользователю переопределить любое нажатие клавиши для запуска программы TECO.[5]

У E была еще одна особенность, которой не хватало TECO: редактирование с произвольным доступом. TECO был последовательным редактором страниц, который был разработан для редактирования бумажной ленты на PDP-1 и, как правило, позволял редактировать только одну страницу за раз, в порядке страниц в файле. Вместо того, чтобы использовать подход E для структурирования файла для случайного доступа к страницам на диске, Столман изменил TECO для более эффективной обработки больших буферов и изменил свой метод управления файлами, чтобы читать, редактировать и записывать весь файл как один буфер. Почти все современные редакторы используют этот подход.

Новая версия TECO быстро стала популярной в лаборатории ИИ и вскоре накопила большую коллекцию пользовательских макросов , имена которых часто заканчивались на MAC или MACS, что означало macro . Два года спустя Гай Стил взялся за проект объединения разнородных макросов в единый набор. завершенная реализация Steele и Stallman включала средства для расширения и документирования нового набора макросов.[5] полученная система была названа EMACS, что означало редактирование макросов или, в качестве альтернативы, E с макросами. Столмен выбрал имя Emacs", потому что <E > не использовался в качестве аббревиатуры на ITS в то время. апокрифический хакер Коан утверждает , что программа была названа в честь Emack & Bolio's, популярного магазина Кембриджского мороженого. Первая операционная система EMACS существовала в конце 1976 года.

Столман видел проблему в слишком большой настройке и фактической развилке и установил определенные условия для использования. позже он написал: [20]

  • "EMACS был распространен на основе совместного использования, что означает, что все улучшения должны быть возвращены мне, чтобы быть включены и распределены."

Оригинальный Emacs, как и TECO, работал только на PDP-10. Его поведение было достаточно отличным от поведения TECO, что его можно было считать текстовым редактором в своем собственном праве, и он быстро стал стандартной программой редактирования на ITS. Mike McMahon портировал Emacs от ITS до операционных систем TENEX и TOPS-20. Другие участники ранних версий Emacs включают Кента Питмана , Эрла Киллиана и Юджина Чиккарелли . К 1979 году Emacs был главным редактором, используемым в лаборатории ИИ МТИ и ее Лаборатории компьютерных наук.

Другие ранние реализации[править]

В последующие годы программисты написали множество Emacs-подобных редакторов для других компьютерных систем. К ним относятся EINE ( EINE Is Not Eine ) и ZWEI (ZWEI was EINE Initially ), которые были написаны для Lisp-машины Майком МакМахоном и Даниэлем Вайнребом , и Sine (Sine Is Not Eine ), который был написан Оуэном Теодором Андерсоном. WEINREB'S EINE был первым Emacs, написанным на Lisp. В 1978 году Бернард Гринберг написал Multics Emacs почти полностью в Multics Lisp в кембриджской лаборатории информационных систем Honeywell. Multics Emacs позже был поддержан Ричардом Солеем, который продолжил разработку редактора, похожего на Nile Emacs, для проекта NIL и Барри Марголина. Многие версии Emacs, включая GNU Emacs, позже приняли Lisp в качестве языка расширения.

Джеймс Гослинг, который позже изобрел новости и язык программирования Java, написал Gosling Emacs в 1981 году. Первый Emacs-подобный редактор , запущенный в Unix, Gosling Emacs был написан на C и использовал Mocklisp , язык с Лисп-подобным синтаксисом, в качестве языка расширения.

Другие вилки GNU Emacs[править]

Другие заметные вилки, менее известные, чем XEmacs, включают:

  • Aquamacs-основан на GNU Emacs (Aquamacs 3.2 основан на GNU Emacs версии 24 и Aquamacs 3.3 основан на GNU Emacs версии 25), который фокусируется на интеграции с пользовательским интерфейсом Apple Macintosh
  • Meadow-японская версия для Microsoft Windows [35]
  • Sxemacs-вилка Стива Янгса XEmacs

Различные редакторы Emacs[править]

В прошлом проекты, направленные на производство небольших версий Emacs, получили широкое распространение. GNU Emacs изначально был нацелен на компьютеры с 32-битным плоским адресным пространством и по крайней мере 1 MiB оперативной памяти.[37] В 1980-х годах такие компьютеры были высокопроизводительными рабочими станциями и мини-компьютерами, и это оставляло необходимость в небольших переосмыслениях, которые будут выполняться на общем оборудовании персональных компьютеров. Современные компьютеры имеют более чем достаточную мощность и емкость для устранения этих ограничений, но небольшие клоны в последнее время были разработаны, чтобы поместиться на установочных дисках программного обеспечения или для использования на менее мощном оборудовании.

Другие проекты направлены на реализацию Emacs на другом диалекте Lisp или на другом языке программирования в целом. Хотя не все еще активно поддерживаются, эти клоны включают:

  • Микроэмакс, который был первоначально написан Дэйвом Конроем и далее развит Дэниелом Лоуренсом и который существует во многих вариациях.
  • mg, первоначально названный MicroGNUEmacs, а позже mg2a, ответвление Микроэмаков, предназначенное для более близкого сходства с GNU Emacs. Теперь установлен по умолчанию на OpenBSD .
  • JOVE (собственная версия Emacs Джонатана), непрограммируемая реализация Emacs Джонатана Пейна для UNIX-подобных систем.
  • Фарш (фарш не является полным 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 Кб.
  • Zile. Zile был рекурсивной аббревиатурой для Z ile I s L ossy E macs, , но проект был переписан в Lua и теперь дает расширение как zile реализует Редакторы Lua. Новый Zile все еще включает реализацию Emacs в Lua под названием Zemacs. Существует также реализация vi под названием Zi.
  • Zmacs, для машины MIT Lisp и ее потомков, реализованных в ZetaLisp .
  • Climacs, вариант под влиянием Zmacs, реализованный в Common Lisp .
  • Epsilon, клон Emacs от Lugaru Software. В выпуске представлены версии для DOS, Windows, Linux, FreeBSD, Mac OS X и O/S 2. Он использует язык расширения без Lisp с синтаксисом C и использовал очень раннюю параллельную реализацию буфера командной оболочки под MS-DOS с одной задачей.
  • PceEmacs-это редактор на основе Emacs для SWI-Prolog .
  • Amacs, версия Apple II ProDOS Emacs, реализованная в сборке 6502 Брайаном Фоксом .
  • Hemlock, первоначально написанный на Spice Lisp, затем Common Lisp . Часть CMU Common Lisp . Под влиянием Zmacs . Позже разветвленный Lucid Common Lisp (as Helix), LispWorks и clozure CL проекты. Существует также портативный проект Hemlock, который направлен на предоставление Hemlock, который работает на нескольких общих реализациях Lisp.
  • umacs, реализация под OS-9

Редакторы с эмуляцией Emacs[править]

  • Собственный редактор Джо эмулирует привязки ключей Emacs при вызове как jmacs .
  • JED имеет режим эмуляции для Emacs.
  • Eclipse (IDE) предоставляет набор клавиш Emacs.
  • IntelliJ IDEA предоставляет набор клавиш Emacs.
  • Epsilon (текстовый редактор) по умолчанию использует эмуляцию Emacs и поддерживает режим vi.
  • Текстовая система Cocoa использует ту же терминологию и понимает многие навигационные привязки Emacs. Это возможно, потому что собственный пользовательский интерфейс использует командную клавишу (эквивалентную Super) вместо клавиши управления .[44]
  • Sublime Text может эмулировать некоторые из поведения Emacs с помощью плагина SublemacsPro.[45]
  • GNU Readline - это редактор строк, который понимает стандартные привязки клавиш навигации Emacs. Он также имеет режим эмуляции vi.
  • GNOME Builder имеет режим эмуляции для Emacs.

Особенности[править]

Emacs является главным образом текстовым редактором и предназначен для манипулирования фрагментами текста, хотя он способен форматировать и печатать документы , такие как текстовый процессор, взаимодействуя с внешними программами, такими как LaTeX, Ghostscript или веб-браузер. Emacs предоставляет команды для управления и дифференцированного отображения семантических единиц текста , таких как слова , предложения, абзацы и конструкции исходного кода, такие как функции . Он также имеет макросы клавиатуры для выполнения определенных пользователем пакетов команд редактирования.

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

Общая архитектура[править]

Почти вся функциональность Emacs, включая основные операции редактирования, такие как вставка символов в документ, достигается с помощью функций, написанных на диалекте языка программирования Lisp . Диалект, используемый в GNU Emacs, известен как Emacs Lisp (ELisp). Слой ELisp находится поверх стабильного ядра базовых сервисов и абстракции платформы, написанной на языке программирования C . В этой среде Lisp переменные и функции могут быть изменены без необходимости перекомпилировать или перезапустить Emacs.

В Emacs работает на структуры данных, называемые буферы , содержащие текст с дополнительными атрибутами; каждый буфер сохраняет свои точки (курсора) и Марк (другое место, разграничивающие выбранного региона вместе с точкой), имя файла, его посещение (если применимо) и набор активных режимов (только один основной режим[разъяснение, необходимое] и любое количество дополнительных режимов[разъяснение, необходимое]), которые контролируют редактор поведения через переменные. Код Elisp может быть выполнен в интерактивном режиме с помощью именованных команд, которые могут быть привязаны к нажатиям клавиш или доступны по имени; некоторые команды оценивают произвольный код Elisp из буферов (напримерeval-region, or eval-buffer).

Буферы отображаются в окнах, которые представляют собой плиточные части экрана терминала или окна GUI (называемые фреймом в терминах Emacs; возможно несколько фреймов). Если не настроено иначе, окна включают полосы прокрутки, номера строк, строку заголовка вверху (обычно отображающую заголовок буфера или имя файла) и строку режима внизу (обычно отображающую активные режимы и положение точек буфера).

В одном буфере можно открыть несколько окон, например, для просмотра различных частей длинного текста, и несколько буферов могут совместно использовать один и тот же текст, например, для использования различных основных режимов в файле на смешанном языке. Режим также может быть изменен вручную по мере необходимости M-x <mode name>.

Настраиваемость[править]

  • Нажатия клавиш могут быть записаны в макросы и воспроизведены для автоматизации сложных, повторяющихся задач. Это часто делается на специальной основе, когда каждый макрос отбрасывается после использования, хотя макросы могут быть сохранены и вызваны позже.
  • При запуске Emacs выполняет сценарий Emacs Lisp с именем ~/.emacs (последние версии также ищут ~ / emacs.el and ~/.emacs.d / init.el; [46] Emacs выполнит первый найденный, игнорируя остальные). Этот файл личной настройки может быть произвольно длинным и сложным, но типичное содержимое включает:
  • Настройка глобальных переменных или вызов функций для настройки поведения Emacs, например (set-default-coding-systems 'utf-8)
  • Привязки ключей, чтобы переопределить стандартные и добавить ярлыки для команд, которые пользователь находит удобными, но не имеют привязки ключей по умолчанию. Образец: (global-set-key (kbd "C-x C-b") 'ibuffer)
  • Загрузка, включение и инициализация расширений (Emacs поставляется со многими расширениями, но только некоторые загружаются по умолчанию.)
  • Настройка Крюков событий для запуска произвольного кода в определенное время, например для автоматической перекомпиляции исходного кода после сохранения буфера (after-save-hook)
  • Выполнение произвольных файлов, обычно для разделения слишком длинного файла конфигурации на управляемые и однородные части (~/.emacs.d / and ~ / elisp / являются традиционными местами для этих личных скриптов)
  • Расширение customize позволяет пользователю устанавливать свойства конфигурации, такие как цветовая схема, интерактивно, из Emacs, более удобным способом, чем путем установки переменных в .emacs: он предлагает поиск, описания и текст справки, входы с множественным выбором, возврат к значениям по умолчанию, изменение запущенного экземпляра Emacs без перезагрузки и другие удобства, подобные функциональности предпочтений других программ. Настроенные значения сохраняются в .emacs (или другой назначенный файл) автоматически.
  • Темы, влияющие на выбор шрифтов и цветов, определяются как файлы elisp и выбираются через расширение customize.

Самостоятельное документирование[править]

Первый Emacs содержал библиотеку справки, которая включала документацию для каждой команды, переменной и внутренней функции. Из-за этого сторонники Emacs описали программное обеспечение как самодокументирующееся в том, что оно представляет пользователю информацию о своих обычных функциях и своем текущем состоянии. Каждая функция включает в себя строку документации, которая отображается пользователю по запросу, практика, которая впоследствии распространилась на языки программирования, включая Lisp, Java, Perl и Python. Эта справочная система может принимать пользователей к фактическому коду для каждой функции, будь то из встроенной библиотеки или добавленной сторонней библиотеки.

Emacs также имеет встроенный учебник . Emacs отображает инструкции для выполнения простых команд редактирования и вызова учебника, когда он запущен без файла для редактирования. Учебник Стюарта Кракрафта и Ричарда Столмана.

Культура[править]

Церковь Emacs[править]

Главная статья: редактор war

Церковь Emacs, созданная Ричардом Столлманом, является пародийной религией, созданной для пользователей Emacs.[47] в то время как он ссылается на vi как редактор зверя (vi-vi-vi-6-6-6 в римских цифрах), он не возражает против использования vi; скорее, он называет его несвободным программным обеспечением anathema . ("Использование бесплатной версии vi-это не грех, а покаяние ."[48] ) Церковь Emacs имеет свою собственную группу новостей alt.религия.emacs, [49], который имеет сообщения, предназначенные для поддержки этой пародийной религии. Сторонники vi создали противоположный культ vi .

Столмен в шутку называл себя святым и ГНУ кием, святым в церкви эмакс.

Emacs pinky[править]

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

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

  • Настройка макета ключа таким образом, чтобы клавиша управления была транспонирована с помощью клавиши caps lock. подобные методы включают определение ключа caps lock в качестве дополнительного ключа управления или транспонирование ключа Control и Meta.Этот метод также был специально рекомендован в качестве вклада в Emacs pinky.[ требуется разъяснение]
  • Программное обеспечение, такое как xwrits или встроенный тип-break-mode в Emacs, который напоминает пользователю регулярно делать запланированные перерывы.
  • Использование клавиш ErgoEmacs (с малым режимомergoemacs-mode).
  • Настройка всей раскладки клавиатуры для перемещения статистически часто используемых клавиш Emacs в более подходящие места.[57]
  • Пакеты ,такие как ace-jump-mode[58] или расширения elisp, которые предоставляют аналогичные функции многоуровневой навигации, сначала запрашивают символ, а затем заменяют вхождения символа ключами доступа для перемещения курсора.
  • evil-mode, расширенный слой эмуляции Vim.
  • god-mode, который обеспечивает подход, подобный vim с режимом ввода команд Emacs без клавиш-модификаторов.
  • Использование настраиваемого макета ключа, предложенного Spacemacs, проектом, где Spaceключ используется в качестве основного ключа для инициализации управляющих последовательностей. Проект также сильно включает оба evil-modeИ.god-mode[59]
  • StickyKeys, который превращает последовательности клавиш в комбинации клавиш.[60]
  • Emacs ' встроенныйviper-mode, который позволяет использовать макет ключа vi для базового редактирования текста и схему Emacs для более продвинутых функций.[61]
  • Придание двойной роли более удобной клавише доступа, такой как пробел, чтобы она функционировала как клавиша управления при нажатии в комбинации с другими клавишами. Эргономичные клавиатуры или клавиатуры с большим количеством клавиш, примыкающих к пробелу , такие как японские клавиатуры, позволяют управлять большим пальцем других клавиш-модификаторов, таких как Meta или Shift.[62]
  • Использование ограниченного эргономичного подмножества клавиш и доступ к другим функциям путем ввода M-x <command-name>текста . M-x также может быть отскоком.
  • Вождение Emacs через голосовой ввод.

Аппаратные решения включают специальные клавиатуры , такие как Оконтуренная клавиатура Kinesis , которая помещает клавиши-модификаторы , где они могут легко управляться большим пальцем, или естественная клавиатура Microsoft, чьи большие клавиши-модификаторы расположены симметрично по обе стороны клавиатуры и могут быть нажаты ладонью руки.[51] педали ноги можно также использовать.

Emacs pinky является относительно недавней разработкой. Клавиатура Space-cadet, на которой был разработан Emacs, имела большие клавиши управления, которые находились рядом с пробелом и были легко доступны большим пальцем.

Терминология[править]

Слово emacs иногда множественное как emacsen, по фонетической аналогии с boxen и VAXen , ссылаясь на различные разновидности Emacs.

Emacs в популярной культуре[править]

В фильме стажировка (2013) , в 01:21:01, Ник Кэмпбелл спрашивает: "мне пришло в голову, почему бы не использовать Emacs, а не vi в качестве редактора по умолчанию для Ubuntu? на что Дана отвечает: "Это очень хорошая мысль, Ник."[65]

В телесериале "Силиконовая долина, сезон 3, эпизод 6" Ричард спрашивает: "Я имею в виду, почему бы просто не использовать Vim над Emacs?", на что Винни отвечает: "Я использую Vim над Emacs.на что Ричард отвечает: "О Боже, помоги нам!"[66]

В фильме "Социальная сеть" (2010) Марк Цукерберг (Mark Zuckerberg) объясняет в потоке голосового управления сознанием , что стало "определенно необходимо вырваться из emacs" в разработке FaceMash, прототипа общежития Facebook.

См. также[править]

Пруф[править]

wikemacs.org/wiki/Main_Page