Расширения Emacs

Для расширения возможностей Emacs используются так называемые режимы — пакеты расширений, которые изменяют поведение буферов Emacs при редактировании и просмотре текста. Режимы делятся на основные и вспомогательные.

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

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

Пакеты, входящие в состав дистрибутивов ALT Linux, обычно поставляются со сценариями, которые подключают режимы с определенными параметрами по умолчанию. Вы можете настроить конкретные параметры для нужного вам режима, используя доступные для него команды настройки (смотрите раздел “Настройка Emacs”).

Многие основные режимы автоматически загружаются (включаются) при открытии файла с соответствующим расширением. Вы также можете включить или отключить нужный режим вручную с помощью команды M-x name-mode, где name — имя режима. Например, команда M-x auto-fill-mode включает режим автоматического заполнения строк или отключает его, если этот режим ранее был включен.

Кроме того, включение или отключение режима можно производить путем установки истинного или ложного значения переменной с именем name-mode. Для установки переменной можно использовать команду M-x set-variable, которая запросит у вам имя переменной, и значение для нее. Для истинного значения обычно используется значение t, а для ложного — nil.

Работа с исходными текстами программ

CC Mode

Этот основной режим используется при редактировании исходных текстов программ на языках C, C++, Java и Objective C. Режим предоставляет несколько стилей оформления текстов программ, каждый из которых определяет отступы, расположение открывающих и закрывающих скобок, а также многие другие параметры. Кроме того, данный режим обеспечивает правильную работу с выражениями соответствующего языка, а также подсветку ключевых слов и других элементов текста программы.

Режим также обеспечивает возможность компиляции программ прямо из Emacs, а также интерфейс к отладчику.

Данный режим поставляется вместе с GNU Emacs. Как правило, он подключен (сделан доступным для Emacs) по умолчанию, так что вы можете смело открывать исходный текст на соответствующем языке — режим будет загружен автоматически.

Perl

Для редактирования программ на языке Perl самым распространенным является режим cperl-mode. Он обеспечивает подсветку синтаксиса языка, а также много полезных дополнений, например, вывод подсказки о синтаксисе операторов языка или развертывание сокращений в полные конструкции языка. Режим поставляется вместе с GNU Emacs.

Другие режимы для языков программирования

Кроме перечисленных выше режимов, в поставку GNU Emacs входит много режимов для работы с исходными текстами программ на различных языках программирования, таких как SQL, Python, Tcl, Fortran, Pascal, язык файлов make, языки разных командных процессоров, и многие другие...

Подробный список таких режимов можно найти в Emacs Elisp Archive (смотрите раздел “Полезные ресурсы”).

Пакет JDEE

JDEE — это среда разработки Java для Emacs. Этот пакет обеспечивает эффективную работу с исходными текстами программ на языке Java.

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

Пакет Emacs Code Browser

Emacs Code Browser (ECB) представляет собой интегрированную среду разработки, реализованную на основе Emacs. В настоящее время эта среда может быть использована для работы с исходными текстами программ на языках C, C++, Java, Emacs Lisp. Работа с исходными текстами программ на языке Java особенно эффективна при использовании пакета JDEE, упомянутого ранее.

Рисунок 6.2. Окно Emacs при запущенном Emacs Code Browser

Окно Emacs при запущенном Emacs Code Browser

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

Для активации пакета необходимо выполнить команду M-x ecb-activate. После выполнения этой команды и появится окно, изображенное на рисунке. Для прекращения работы необходимо выполнить команду ecb-deactivate.

Работа с текстами

Для Emacs доступны не только режимы, рассчитанные на работу с исходными текстами программ. Emacs позволяет комфортно создавать и редактировать тексты любого типа.

Работа с SGML/XML/HTML

Для работы с текстами, для которых используются языки разметки XML/SGML/HTML, существует режим psgml. Данный режим существенно облегчает разметку текстов, позволяя вставлять теги и добавлять атрибуты для них. При этом psgml делает разбор документа и анализирует его DTD (определение типа документа), что позволяет использовать дополнение при вводе имен тегов, а также корректно редактировать атрибуты тегов. Вставка тегов также допускается только в тех местах, где это разрешено определением типа документа. Это позволяет уменьшить количество ошибок при разметке документов.

Кроме того, режим предоставляет множество команд, полезных для работы с документом, таких как перемещение по дереву тегов, свертывание отдельных частей документа, проверка правильности документа и многие другие.

На сайте Бориса Тоботраса выложен перевод главы из книги “SGML CD: Free SGML Software and How to Use It”, которая посвящена использованию Emacs для редактирования файлов в формате SGML.

Для работы с XSL-файлами могут использоваться пакеты xslide, xslt-process, xae. Некоторые из этих пакетов входят в состав дистрибутивов ALT Linux.

Работа с TeX/LaTeX

Для работы с файлами TeX/LaTeX основным режимом является режим auctex. Этот режим облегчает ввод команд разметки TeX/LaTeX. Кроме того, данный режим обеспечивает компиляцию файлов, просмотр результатов и обработку ошибок.

Для режима auctex существует несколько дополнений, которые позволяют просматривать результат обработки текста прямо в том буфере, где происходит его редактирование. Это пакеты preview-latex и x-symbol. Как выглядит окно Emacs при редактировании текста с использованием пакета preview-latex изображено на рисунке Рисунок 6.3. Окно Emacs при использовании пакета preview-latex.

Рисунок 6.3. Окно Emacs при использовании пакета preview-latex

Окно Emacs при использовании пакета preview-latex

Проверка правописания

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

Помимо проверки текста по требованию, доступен вспомогательный режим, который называется flyspell-mode. Он проверяет слова по мере их ввода. Этот режим также входит в поставку GNU Emacs.

Другие режимы и пакеты

Режим MMM

Данный режим позволяет использовать несколько основных режимов в одном буфере (отсюда и пошло его название). Это особенно полезно для редактирования файлов, в которых в текст на одном языке внедрены фрагменты на другом языке. Например, этот режим может использоваться при редактировании файлов JSP, PHP, HTML::Mason. Данный пакет собран для ALT Linux под именем emacs-mmm-mode.

Пакет Speedbar

Пакет speedbar предоставляет возможность отображения иерархических данных. Это удобно для отображения файловой системы в виде дерева или отображения списка функций в файле с исходным текстом.

Для запуска пакета наберите M-x speedbar. При этом будет создан отдельный фрейм, содержащий отображаемое дерево. Пакет имеет множество настроек, так что вы можете легко настроить его под себя. Для получения дополнительной информации смотрите info-файл для Speedbar.

Пакет Tiny-tools

В этот пакет входит много самых разных полезных дополнений для различных режимов. Например, пакет tiny-perl, входящий в состав этого пакета, предоставляет команды для просмотра документации по модулям Perl, команды для редактирования документации и многое другое. Пакет tiny-tools можно скачать по адресу http://tiny-tools.sourceforge.net. Данный пакет также входит в состав дистрибутивов ALT Linux.

Пакет Tramp

Этот пакет представляет возможности доступа к файлам на других компьютерах. Этот пакет аналогичен по свойствам пакету Ange-FTP, однако что Ange-FTP использует для перемещения файлов между машинами протокол ftp, тогда как Tramp использует команды rsh/rcp, или их более безопасные аналоги — ssh/scp. Данный пакет входит в состав дистрибутивов ALT Linux.

Контроль версий

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

Командный процессор

Вы можете выполнять команды командного процессора прямо из GNU Emacs. Для выполнения одной команды вы можете использовать последовательность клавиш M-!, при этом результат выполнения отображается в мини-буфере. Но если вы хотите выполнить несколько команд с удобным просмотром результатов выполнения, то лучше использовать команду M-x shell, которая запускает командный процессор и предоставляет различные возможности по работе с историей команд.

Кроме возможности запуска внешнего командного процессора, для Emacs существует пакет eshell (он поставляется вместе с GNU Emacs), который полностью написан на Emacs Lisp. При этом не запускается никаких внешних процессов, кроме тех, которые совсем уж необходимы для работы. Этот пакет разрабатывался как функциональная замена bash, zsh, 4doc и rc. Для его запуска вам нудно просто набрать M-x eshell, и перед вами возникнет привычная командная строка, только с дополнительными возможностями, которые вы можете расширять собственными силами.

Справочные страницы

Для чтения справочных страниц (man pages) GNU Emacs представляет два независимых интерфейса — man и woman (от сочетания without man — без использования команды man). Просто наберите команду M-x man или M-x woman и введите название нужной вам страницы, и она будет отображена в буфере Emacs.

В отличие от команды man, команда woman позволяет использовать завершение для имен справочных страниц, однако работает медленнее. Кроме того, команда woman не использует никаких внешних программ для отображения справочных страниц (отсюда происходит ее название).