Редактор Emacs существует для многих операционных систем, а благодаря использованию специального внутреннего языка, схожего с Lisp, может быть приспособлен практически к любым надобностям. Поставляется с пакетами для удобного редактирования текстов на разных языках программирования, со встроенными программами для работы с почтой, новостями, ftp, WWW. Утверждается даже, что не существует задач, которые нельзя выполнить в среде этого редактора. Скорость выполнения работы, как известно, увеличивается, если пользоваться одной и той же средой. Возможности Emacs далеко выходят за рамки обыкновенного текстового редактора, а многие пользователи проводят в нем до 90% своего "tube time" - времени, которое человек просиживает за компьютером. Список редакторов, похожих на Emacs, далеко превзошел бы по своим размерам эту статью. Если все эти редакторы отранжировать по потребляемым системным ресурсам, то разумно остановиться только на тех, которые окажутся на концах этого спектра. Стандартный Emacs - это GNU Emacs (текущая версия 19.34b, и сейчас тестируется версия 19.35). В статье идет речь именно об этой версии.
Emacs распространяется на условиях GNU Public License - он бесплатен, каждый имеет право получить его исходные тексты, изменять их для своих нужд или для дальнейшего распространения, но при этом не может перепродавать и ограничивать права пользователей, получающих измененную версию (они должны получить исходные тексты и т. д.). Существует очень похожий внешне и внутренне на GNU Emacs редактор - XEmacs, ранее называвшийся Lucid Emacs. Он уделяет больше внимания графике, в нем больше меню, однако он не вполне стандартен, и многие программы на внутреннем языке Emacs Lisp на нем не будут работать. Имеется редактор jed - находка для того, кто хочет, чтобы его редактор напоминал Emacs, но работал на маломощном компьютере. Вся программа занимает пару сотен Кбайт на диске и требует очень немного памяти, позволяя редактировать файлы произвольной длины. Это редактор похож на Emacs только внешне, не использует lisp - его внутренний язык для написания макросов и расширений похож на Cи, хотя команды в нем очень сходны с командами Emacs, что исключает необходимость осваивать новый набор команд.
GNU Emacs был создан первоначально для Unix и подобных ему ОС, хотя предшественник Emacs работал на PDP-11. Сейчас среда Emacs функционирует практически на всех платформах Unix, а также на VMS, Windows (3.x, NT), DOS и Macintosh. В некоторых аспектах поведение Emacs под разными ОС может отличаться, но, как правило, незначительно, если это не связано с ограничениями ОС. Например, для DOS клавиша F1 вызывает подсказку просто потому, что так принято в программах для этой системы; но то, что в DOS нельзя прервать процесс, запущенный из Emacs - скажем компилятор, - и невозможно выполнение такого процесса в асинхронном режиме одновременно с продолжающимся редактированием - это уже собственные ограничения MS DOS. В остальном же Emacs - везде Emacs, он потребляет не больше и не меньше памяти или процессорного времени в разных операционных системах и выглядит для пользователя одинаково.
Комбинация клавиш в Emacs
Emacs активно пользуется комбинациями клавиш, включающими Control, Meta, Shift и т. д. Существует общепринятая система их записи, которая применяется как при описании способа вызова той или иной команды, так и при программировании новых функций на Elisp. Чтобы привязать уже существующую функцию к какой-нибудь комбинации клавиш, также нужно знать, как эту комбинацию записать.
Клавиша Control обозначается как "C". Если написано, скажем, "C-h", то это означает одновременное нажатие клавиш "Control" и "h". Аналогично дело обстоит с Shift, обозначаемой как "S". Таким образом, если требуется вставить файл в редактируемый текст - для этого нужно выполнить команду C-x i: нажав Control, удерживая ее нажать x, а затем (отпустив Control) i.
Несколько сложнее дело обстоит с клавишей Meta. Она часто используется, но на многих клавиатурах ее просто нет. В этом случае, если имеется клавиша Alt, то она и заменяет Meta; если же такой клавиши нет, то вместо Meta нужно нажать (и затем отпустить) Escape. В любом случае, это обозначается префиксом 'M-'. Пусть нужно набрать M-x: если на клавиатуре есть Meta или Alt, то нужно эту клавишу нажать и, удерживая ее, нажать 'x', если же ни той, ни другой клавиши нет, нужно нажать Escape, отпустить, и затем нажать 'x'.
Далее, клавиши табулятора - TAB, Escape - ESC, Return (иногда помеченный как "Enter") - RET, Linefeed (если вам посчастливилось и он у вас есть) - LFD и пробел - SPC. В Emacs команды можно исполнять путем нажатия на клавиши, к которым они привязаны - обычный способ; а можно исполнять их по имени, если вы не помните, какой комбинацией клавиш вызывается данная команда. Например, чтобы покинуть Emacs, нужно выполнить команду save-buffers-kill-emacs. Эта команда привязана к комбинации клавиш C-x C-c. Есть два способа ее выполнить: либо просто нажать указанные клавиши, либо воспользоваться командой M-x. M-x помещает курсор в минибуфер (обычно строчка внизу экрана), где можно набрать любую команду Emacs, завершив ее нажатием на RET.
Emacs: текстовый редактор или интерпретатор Lisp?
Если быть совсем точным, неправомерно говорить о Emacs как о текстовом редакторе, не делая никаких оговорок. Emacs имеет относительно небольшую неизменную часть, написанную на языке Cи, основная же часть пользовательских команд описана на языке Emacs Lisp или Elisp, который представляет собой язык высокого уровня, очень похожий на "обыкновенный" (common) Lisp. Собственно говоря, ничто не заставляет ограничивать программы, которые пишутся на этом языке, нуждами редактирования текста и только. Это полноценный удобный язык программирования, на котором можно написать любую программу. Если посмотреть на Emacs с такой точки зрения, то будет правильнее утверждать, что Emacs - это интерпретатор Elisp, который по историческим причинам используется для редактирования.
Система подсказок и документация к Emacs
Emacs сам себя документирует - это значит, что лучшим описанием Emacs, как и наиболее удачным учебником по его применению, является сам редактор. В нем можно получать документацию самыми разными способами. Как правило, для этого нужно нажать клавишу помощи (по умолчанию C-h) и еще одну букву для выбора вида помощи. C-h ? покажет, какие есть возможности.
Для новичка лучше всего будет пройти курс обучения (tutorial), вызываемый посредством нажатия C-h t. Это поместит пользователя в среду, где ему будут объяснять простейшие команды, а для продвижения вперед предлагается их выполнять. Обычно этот курс обучения позволяет человеку, не пользовавшемуся ранее Emacs, освоиться в нем и начать редактировать свои тексты, читать почту, выполнять программы и т. д. за полчаса-час.
Регулярный способ получения информации (со сложными возможностями поиска, передвижения, с перекрестными ссылками и т. п.) - это система info, вызываемая клавишами C-h i. Информация в системе info организована в виде дерева. Пользователю, ранее не встречавшемуся с info, лучше пройти еще один курс обучения, который гораздо короче и вызывается клавишей h из info. Система info предназначена не только для документации Emacs, но и для всех программ проекта GNU, поэтому и выбирать нужно только соответствующий пункт. После этого пользователю предоставляется возможность читать электронную версию GNU Emacs User's Manual [1], детально описывающую данный текстовый редактор. Если же вместо пункта Emacs выбрать Elisp [2], то вам представится возможность изучить Emacs Lisp - язык, на котором написана большая часть Emacs, и который можно использовать для изменения поведения редактора, для написания пользовательских функций, а также просто для исполнения и отладки программ в среде Emacs.
Кроме того, стоит упомянуть возможность apropos, вызываемую нажатием "C-h a" - после этого можно ввести ключевое слово, и появится буфер, где будут перечислены все переменные и функции, имеющие к нему отношение. В этом буфере можно найти подробное описание того или иного объекта. Если пользователь оказался в режиме, с которым раньше не работал, то команда "C-h m" предоставит описание этого режима, список специфических для него команд и клавиш, к которым они привязаны.
Файлы и буферы
При работе с Emacs обычно редактируются файлы, которые надо сначала "посетить" командой find-file, привязанной к комбинации клавиш "C-x C-f". После этого будет создан буфер в Emacs, где отображается редактируемое содержимое файла. В этом случае говорят, что буфер связан с таким-то файлом. Например, если набрать команду save-buffer (C-x C-s), то текущий буфер будет сохранен в файле, с которым он связан. У некоторых буферов может не оказаться никакого файла, который был бы с ними ассоциирован. По умолчанию такие буферы не предлагают сохранения при выходе, но ряд пакетов (например sendmail.el) может помечать буфер специальным флагом, заставляющим его сохранять, и в этом случае пользователю, желающему покинуть Emacs, будет предложено ввести имя файла для сохранения содержимого буфера.
Существуют специальные команды для работы с буферами: выдать полный список буферов со всеми их атрибутами C-x C-b (с каким файлом ассоциирован, нужно ли периодически сохранять его в специальный файл autosave, нужно ли сохранять при выходе, можно ли вносить в буфер изменения, внесены ли они, и т. д.), переключиться в другой буфер в текущем или в другом окне, и т. д. Легко получить список этих команд, пользуясь, скажем, командой M-x apropos RET buffer RET.
Пакеты в составе Emacs
Как уже говорилось, основная часть Emacs - это тексты на Emacs Lisp, представляющие собой разнообразные прикладные пакеты, позволяющие либо удобно редактировать определенный вид файлов (например, тексты на языках Cи или html, либо двоичные файлы), или выполнять задачи, и вовсе не связанные с редактированием файлов, такие как чтение или отправка почты, новостей, просмотр WWW. Это удобно и делает работу проще, поскольку такая интеграция всех задач в одной среде позволяет пользователю свободно перемещать куски текста из одного буфера в другой, из файла в редактируемое письмо или наоборот, либо, встретив в каком-нибудь файле или письме указатель URL, немедленно его посмотреть, и т. д.
Работа с почтой
Стандартным способом работы с электронной почтой в Emacs является программа Rmail. Ее возможности и система команд напоминают, в частности, программу Elm. Можно, запустив из Emacs Rmail (M-x rmail), считать свой почтовый ящик в файл ~/RMAIL, хранящийся в формате Babyl, отличном от стандартного формата mbox в ОС Unix; можно просматривать, уничтожать, сохранять почту, перенаправлять или редактировать сообщения, цитировать письма. Возможны самые разные стили цитирования: от самого простого по умолчанию до использования SuperCite, который позволяет удобным образом цитировать письма разных авторов, используя разные префиксы цитирования; возможно автоматическое заполнение абзацев в цитируемом тексте и многое другое. Богатые дополнительные возможности заложены в самом Emacs: пропустить письмо через команду Unix, выполнить разнообразные действия по редактированию и т. п.
Существует система "меток" (labels), которые могут присваиваться любому сообщению в любых количествах или сниматься с сообщения. Метки могут быть произвольными; чаще всего используются следующие: deleted (сообщение помечено как удаленное - если покинуть Rmail, то оно будет в самом деле удалено), answered (сообщения, на которые послан ответ командой reply), unread (сообщения, которых пользователь еще не читал). Можно помечать сообщения своими собственными метками, скажем urgent. Это полезно, если требуется быстро просмотреть список всей почты - не читая ее, пометить самое важное, а затем создать summary по этой метке, с тем чтобы менее важные вещи подождали, но не были удалены или перемещены, а просто стали на время незаметны.
Rmail - это очень удобный способ читать почту, если ее немного (скажем, несколько десятков сообщений в день). Если же приходится справляться с большим потоком почты, да еще разложенным по разным ящикам, то удобнее использовать Gnus. Лично я предпочитаю смешанную стратегию: внешними средствами на уровне программы локальной доставки отфильтровывать почту, написанную не лично мне - mailing lists; рассылки, большие aliases - все это в отдельные ящики, а личную почту оставлять в системном mailbox, откуда ее можно читать командой Rmail. Остальное же читать через Gnus, попросив его рассматривать эти ящики как newsgroups.
Если же вы запустили Rmail по ошибке и хотите вернуть свою почту на место в системный ящик, то нужно воспользоваться командой M-x unrmail, чтобы перевести почтовый ящик из формата Babyl в формат mbox.
Gnus: замечательный newsreader
Обычный newsreader показывает новости (netnews, Usenet), главная проблема с чтением которых состоит в количестве разнообразного мусора: реклама каких-нибудь глупостей, вроде пирамидальных схем обогащения (Get Rich Quick, обыкновенный стиль разных "писем счастья", перенесенный в рекламу), сообщения от людей, читать которые вам неинтересно, сообщения не по теме данной группы и т. п. Многие люди, например, не хотят знакомиться с просьбами о помощи вообще или в определенных группах.
Подход обыкновенного newsreader к решению этой задачи состоит в том, что создается kill file - вещь на Usenet хорошо известная. Некоторые считают, что само упоминание о том, что вы чего-то не читаете, а автоматически убиваете, оскорбительно для многих авторов, и тем не менее kill file, будучи столь популярным инструментом, часто упоминается. Kill file представляет собой список regular expressions. Сообщение, перед тем как будет показано, проходит через их фильтр: если оно соответствует любому из них, оно убивается. Например, можно убивать все статьи, содержащие конкретное слово, или строчку в адресе или теме письма, и т. д.
Схема эта во многих случаях довольно эффективна, но обладает многими недостатками: главный из них - нельзя "набирать признаки", а можно только указать какие-то конкретные, и соответствие любому из них убивает статью; кроме того, нельзя накладывать временные запреты, что удобно, когда удаление идет по теме письма или по его нити. Непонравившаяся вам дискуссия через несколько дней кончится, а ваш kill file так и будет содержать относящуюся к ней строчку и спустя некоторое время окажется захламлен, проверка статей будет занимать все больше времени, участятся случаи, когда убиваются статьи, быть может и интересные, но попавшие под какой-нибудь старый критерий отбора, оказавшийся неудачно формализованным.
Как же Gnus решает эти проблемы? Во-первых, в Gnus kill file заменен на SCORE file. Это означает, что каждая статья проходит через сито набора очков: разные правила в SCORE file добавляют или отнимают у нее очки. После этого можно, скажем, сообщения, набравшие уж очень мало очков, выкинуть совсем, а остальные отсортировать "по степени интересности" и иметь возможность читать сначала и бросить когда угодно. Кроме того, записи в SCORE file могут быть как постоянными, так и временными, на пару недель. По истечении срока своего действия такие записи Gnus автоматически удалит, и они уже никоим образом не будут, накапливаясь, замедлять и влиять на качество работы.
Gnus, кроме того, интегрирован с отправкой почты письма можно посылать столь же легко, как и статьи. Есть еще такое понятие, как courtesy copy ("копия вежливости"): ее можно послать автору статьи, на которую вы отвечаете своей статьей. Это удобно, поскольку тогда собеседник, с одной стороны, не пропустит ваш ответ (например, если вы отвечаете на вопрос или участвуете в конкретной дискуссии), а с другой стороны, на courtesy copy ясно написано, что это копия статьи, отосланной в Usenet, - поэтому если ваш корреспондент имеет привычку отвечать на статью статьей, а не частным письмом, то он не будет раздражен, читая новости и заметив там то самое письмо, которое он вчера получил по электронной почте и на которое уже ответил.
Если пользоваться Gnus, то можно навестить и группы, имеющие непосредственное отношение к Emacs: comp.emacs, gnu.emacs (группы общего характера, имеющие дело с Emacs), gnu.emacs.help (сюда можно посылать просьбы о помощи), gnu.emacs.sources (здесь печатаются тексты программ на Emacs Lisp), и, наконец, шуточную alt.religion.emacs.
Dired: редактор каталогов
Dired позволяет редактировать каталоги следующим образом: создается буфер, в котором высвечивается содержимое каталога в формате, близком к формату ls -lg ("подробный" листинг). Обычные команды редактирования в этом буфере не работают. Например, буквы не вставляются в буфер, зато появляются новые команды: можно скопировать, удалить или перенести/переименовать файлы или каталоги, можно изменить маску допуска (если, конечно, допуск поддерживается ОС), можно просмотреть файл, можно открыть его для редактирования (в этом случае будет создан отдельный буфер). Можно посмотреть подкаталог, или сделать, чтобы он отображался в том же буфере со сдвигом вправо, а можно открыть подкаталог в новом буфере. Имеется также ряд специальных команд: пометить для удаления файлы запасного копирования или автоматического сохранения, созданные Emacs, и тому подобное.
Ange-ftp: прозрачный способ пользоваться ftp
В Emacs предусмотрена возможность работы с удаленными файлами через протокол ftp. Если в качестве имени файла ввести /user@some.host.net:/path/to/file, то Emacs, вместо того чтобы пытаться открыть локальный файл с таким именем, откроет связь по ftp с машиной some.host.net и сделает login как user. Если user не совпадает с ftp или anonymous, Emacs попросит ввести пароль, в противном случае он, как и полагается, пошлет в качестве пароля ваш электронный адрес. После этого Emacs скачает файл /path/to/file и поместит его в буфер, который можно редактировать обычным образом. Если требуется его сохранить, то изменения будут записаны на удаленной машине (если такое право у вас имеется) или на локальной.
Этот способ редактирования работает также и с удаленными каталогами. Можно набрать "C-x C-f /ftp@ftp.archive.net:/pub/ RET", и вы увидите каталог pub анонимного пользователя ftp на машине ftp.archive.net. Все обычные команды dired будут действовать как обычно. В частности, можно просмотреть файл командой "v" или скопировать его на локальный диск командой "C", указав после нее локальное имя.
W3: просмотр WWW
Какой программой просмотра WWW пользоваться? Mosaic сегодня уже устарел, и никто его больше не применяет; lynx не позволяет смотреть картинки и имеет неудобный набор команд - кроме того, у него нет многих весьма существенных возможностей: к примеру, нельзя прервать начавшуюся передачу данных; Netscape потребляет совершенно неадекватные своей задаче ресурсы и недоступен в исходных текстах, а про Internet Explorer и говорить нечего - его неэффективность, крайне слабые средства обеспечения безопасности, не говоря уже о громоздкости, постоянно становятся предметом шуток уважающих себя программистов.
Так что же осталось? Например, W3 - пакет для Emacs, такой же как, скажем, Gnus или Rmail, и позволяющий работать с Web. Его можно настроить по-разному: переменных, регулирующих его поведение - масса. Можно попросить его не обращать внимания на картинки, или вставлять их в текст обычным образом, либо пользоваться промежуточным вариантом: картинок в тексте нет, но есть ссылки, и можно на них нажать RET или щелкнуть средней кнопкой мыши, чтобы увидеть картинку. W3 умеет работать с таблицами, формами, хотя и не поддерживает рамки (frames), которые будут добавлены в ближайших версиях. В W3 имеется даже собственный newsreader, но с гораздо меньшими возможностями, чем Gnus.
Дополнительные средства работы с почтой
На Gnus и Rmail не заканчивается перечень способов читать почту в Emacs. Как было принято шутить на заре разработки GNU, каждая стоящая программа должна иметь встроенный mailreader. В Emacs их, по меньшей мере, четыре.
MH использует формат почтовых ящиков, где сообщения хранятся в отдельных файлах. Многим администраторам и программистам нравится такой формат из-за отсутствия проблем с запиранием системного почтового ящика.
VM, в основном, похож на Rmail, но хранит почту в своем формате, и у него немного больше, чем у Rmail, возможностей. С другой стороны, широкого распространения он так и не получил и используется довольно редко. VM установлен в меню XEmacs как способ чтения почты по умолчанию.
MULE: много языков в одном буфере
MULE - пакет, написанный в Японии и позволяющий в одном буфере иметь много разных языков: японский, китайский, иврит, греческий и русский. Начиная с версии 19.35 GNU Emacs, он будет входить в Emacs официально, а пока его приходится получать и компилировать отдельно. Если у вас нет крайней нужды вставлять греческие цитаты в русский текст со ссылками на английскую литературу, то можно спокойно подождать выхода новой версии.
Основные режимы Emacs
Режимы работы Emacs приспосабливают редактор к конкретному виду текста или к выполнению определенной задачи. Например, автоматический отступ в тексте на языке Cи совсем не такой, как в программе на Elisp. А цвета Rmail не похожи на цвета W3.
Fundamental mode: стандартный режим
Фундаментальный режим - основной режим работы Emacs не специализирован ни для чего конкретного. Все остальные режимы определяются, исходя из сравнения с данным. Курс обучения, вызываемый командой C-h t, в основном имеет дело с фундаментальным режимом.
cc-mode: режим для редактирования текстов на С и С++
В данном режиме переопределены клавиши: *, {, }, : , DEL TAB LFD # и;. Режим редактирования оптимизирован для работы с языком Cи. В частности, TAB устанавливает правильный отступ данной строки, а клавиши операторов немедленно ставят правильный отступ. Зарезервированные слова, команды препроцессора, текстовые строки и специальные символы выделяются в cc-mode особыми шрифтами.
Стиль записи программы по умолчанию соответствует стилю проекта GNU:
if (foo < bar) { lose (everything, always); cleanup (); } else win (nothing, sometimes); /* Now we are finally ready to finish reading the file, once headers are read in. */ while (! feof (file)) process_next_record (file);
Однако все установки легко изменить и заставить cc-mode набирать программу в стиле, скажем, книги Kернигана и Ричи, или в стиле Беркли.
В cc-mode доступны также такие команды, как перемещение по условиям (conditionals): вверх, вперед, назад; комментирование и раскомментирование области текста; раскрытие команд препроцессора (раскрывается только указанная область, но через препроцессор пропускается текст с начала файла до конца области для получения правильных результатов) и т. п., включая работу с метками (tags), с версиями (version control) и компиляцию.
(emacs-)lisp-mode: режим для редактирования программ на Lisp. В режиме редактирования программы на Lisp стандартным образом используются отступы, а комментарии возможны трех видов, в зависимости от количества точек с запятой, их начинающих, и ведут себя такие комментарии немного по-разному.
В режиме редактирования Emasc Lisp можно выполнить весь буфер или одно выражение; также есть возможность пользоваться отладчиком. Если редактируется текст на "другом" Lisp, то предусмотрена функция запуска внешнего компилятора или интерпретатора Lisp.
shell-script-mode: режим для работы с shell scripts
Этот режим позволяет редактировать программы на языках многих оболочек, пользуясь весьма схожими командами: можно использовать команды для вставки в редактируемый текст выбора, ветвления, цикла по именам файлов или по числам, а также циклов с предусловием, с постусловием или с выбором.
Символы {'`"([ немедленно вставляют свой парный символ (если они не предварены обратной косой чертой и не находятся внутри текстовой строки или "здесь-документа" - here-document). Стиль по умолчанию совпадает со стилем книги Розенблатта про Korn Shell.
tex-mode и latex-mode: редактирование текстов TeX
В этих режимах, весьма между собой схожих, клавиша " вставляет `` либо '' в зависимости от того, начинается цитирование или, наоборот, заканчивается. Символы } и $ показывают, чему они соответствуют. (Значки $ используются в TeX как скобки, ограничивающие формулы.)
Можно запустить TeX на всем буфере, на файле либо на области текста плюс заголовки из начала файла. Обычным для меня способом редактирования TeX-файла является наличие двух окон: справа - TeX, слева - xdvi. В окне с TeXом можно в любой момент нажать C-c C-b, чтобы перекомпилировать буфер, а потом ткнуть курсором мыши в окно xdvi с тем, чтобы dviфайла был изменен и перечитан.
terminal-mode: режим для исполнения программ в одном из буферов Emacs
В Emacs можно исполнять разные внешние программы. Наиболее характерно выполнение программы оболочки в одном из буферов (M-x shell), или связи с удаленной машиной (M-x telnet). В случае с shell это добавляет ему некоторые возможности: например, дополнение имен файлов и история команд заложены в данный режим Emacs.
Такое использование программы оболочки особенно удобно в случаях, когда части результатов выполнения определенных команд хотелось бы вставить в файл или послать по электронной почте, а также как-либо редактировать. И наоборот, при таком использовании легко давать в качестве исходных данных на вход программам части файлов.
html-mode: режим для редактирования web-страниц
В режиме редактирования html-текста можно вставлять разные стандартные конструкции путем нажатия на небольшое число клавиш, что экономит усилия и время. Можно просматривать создаваемый документ в W3 или во внешнем браузере, причем в случае с W3 можно сделать так, чтобы вид обработанного документа менялся автоматически сразу после внесения изменений в исходный текст. Нужно отметить, что режим html основан на режиме sgml (sgml - язык высокого уровня для описания документов; может быть переработан в целый ряд форматов, включая html; некоторые http-серверы умеют делать это преобразование на лету, по прибытии запроса).
gud-mode: пользование отладчиками gdb и dbx
GUD - режим отладки весьма общего характера, в качестве частных случаев существуют команды Emacs M-x gdb, M-x sdb, M-x dbx, M-x perldb и M-x xdb. Режима для adb пока нет (особой нужды в нем не видно).
После запуска отладчика становятся доступными все его команды, которые можно вызывать как специальными клавишами в буфере отладки, так и теми же клавишами с другим префиксом в буфере исходного текста, куда отладчик попадает из-за всяческих breakpoints, watch-points, пошаговой прогонки и т. д. Можно удалять и добавлять точки остановки, переменные, за изменением которых нужно наблюдать; просматривать значения выражений, передвигаясь по буферу с исходным текстом.
Сегодня и завтра Emacs
Часто говорят, что в Emacs можно сделать все что угодно. В некотором смысле это верно: Emacs Lisp - полноценный язык программирования, на котором могут быть написаны любые программы. Однако в существующем Emacs имеются ограничения: невозможность распараллеливания задач внутри Emacs (интерпретатор Lisp работает последовательно), а размер указателя в языке Emacs Lisp ограничивает память, используемую Emacs, размером в 16 Мбайт. Размер указателя пока не претерпит никаких изменений, разговоры о создании многонитевого (multi-threaded) Emacs ведутся давно. Такой Emacs позволил бы, например, считывать и обрабатывать новости, не прерывая редактирования.
Другое направление развития - создание "текстового процессора" на основе Emacs: WYSIWYG, разные шрифты, картинки и тому подобное - короче, редактор для тех, кто не хочет осваивать TeX. Он также удобен в случаях, когда не требуются слишком высокое качество и сложные возможности, такие как правильный набор сложных математических формул. Популярность MS Word доказывает, что многие хотели бы иметь возможность столь простого набора. Пока такой текстовый процессор на базе Emacs работает не очень хорошо, и возможностей у него довольно немного, но через пару версий им вполне можно будет пользоваться.
Литература
1. Richard Stallman, GNU Emacs User's Guide, FSF Press.
2. Richard Stallman, Emacs Lisp Programmer's Manual, FSF Press,.