Основные режимы
Основные режимы специализируют Emacs для редактирования или обработки определённых видов текста. В каждый момент времени у каждого буфера ровно один основной режим. С каждым основным режимом связана команда основного режима, имя которой должно оканчиваться на «-mode». Эта команда переключает текущий буфер в данный режим, задавая различные локальные для буфера переменные, например локальную карту клавиш. См. Соглашения для основных режимов. Обратите внимание: в отличие от второстепенных режимов, основной режим нельзя «отключить»; вместо этого буфер нужно переключить в другой режим. Однако основной режим можно временно приостановить, а затем восстановить; см. ниже.
Наименее специализированный основной режим называется режимом Fundamental; в нём нет определений или настроек переменных, специфичных для режима.
- Команда: fundamental-mode
Это команда основного режима для режима Fundamental. В отличие от команд других режимов, она не запускает хуки режима (см. Соглашения для основных режимов), поскольку этот режим не предназначен для настройки.
- Функция: major-mode-suspend
Эта функция работает как
fundamental-mode: она удаляет все локальные для буфера переменные, но также сохраняет сведения о действовавшем основном режиме, чтобы впоследствии его можно было восстановить. Эта функция иmajor-mode-restore(описанная далее) полезны, когда нужно поместить буфер в специализированный режим, отличный от того, который Emacs выбирает для него автоматически (см. Как Emacs выбирает основной режим), но при этом иметь возможность позднее вернуться к исходному режиму.
- Функция: major-mode-restore &optional avoided-modes
Эта функция восстанавливает основной режим, сохранённый функцией
major-mode-suspend. Если основной режим не был сохранён, функция вызываетnormal-mode(см. normal-mode), но пытается не выбирать режимы из avoided-modes, если этот аргумент не равенnil.
- Функция: clean-mode
При смене основного режима большинство локальных переменных очищается, но в буфере могут оставаться другие элементы (например, текстовые свойства и наложения). Буфер редко переключают из одного основного режима в другой (за исключением переключения из
fundamental-modeво все остальные режимы), поэтому обычно это не вызывает беспокойства. Иногда бывает удобно (в основном при отладке проблемы в буфере) выполнить «полный сброс» буфера; для этого предназначен основной режимclean-mode. Он удаляет все локальные переменные (даже постоянно локальные), а также все наложения и текстовые свойства.
Самый простой способ написать основной режим — использовать макрос define-derived-mode, который настраивает новый режим как вариант существующего основного режима. См. Определение производных режимов. Мы рекомендуем использовать define-derived-mode, даже если новый режим явно не является производным от другого режима, поскольку этот макрос автоматически обеспечивает соблюдение многих соглашений по написанию кода. Список распространённых режимов, от которых можно создавать производные, см. в разделе Основные режимы.
У разработки основных режимов на основе библиотеки tree-sitter есть свои особенности и соглашения; см. Разработка основных режимов с помощью tree-sitter.
В стандартном дереве каталогов GNU Emacs Lisp находятся исходные тексты нескольких основных режимов в файлах, таких как text-mode.el, texinfo.el, lisp-mode.el и rmail.el. Изучите эти библиотеки, чтобы узнать, как пишутся режимы.
- Пользовательская настройка: major-mode
-
Локальное для буфера значение этой переменной содержит символ текущего основного режима. Значение по умолчанию задаёт основной режим для новых буферов. Стандартное значение по умолчанию —
fundamental-mode.Если значением по умолчанию является
nil, то при создании Emacs нового буфера командой, такой как C-x b (switch-to-buffer), этот буфер переключается в основной режим ранее активного буфера. Исключение: если у основного режима предыдущего буфера есть свойство символаmode-classсо значениемspecial, новый буфер переключается в режим Fundamental (см. Соглашения для основных режимов).
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Major-Modes.html