Основные режимы специализируют Emacs для редактирования или взаимодействия с определенными типами текста. В каждом буфере одновременно существует только один основной режим. Каждый основной режим связан с командой основного режима, название которой должно оканчиваться на ‘-mode’. Эта команда отвечает за переключение на этот режим в текущем буфере путем установки различных переменных, специфичных для буфера, таких как локальная карта клавиш. См. Соглашения для основных режимов. Обратите обратите внимание, что, в отличие от второстепенных режимов, нет способа «отключить» основной режим; вместо этого буфер должен быть переключен на другой. Однако вы можете временно приостановить основной режим и позже восстановить приостановленный режим, см. ниже.
Наименее специализированный основной режим называется Основной режим, который не имеет специфических для режима определений или настроек переменных.
Это команда основного режима для Основного режима. В отличие от других команд режимов, она не выполняет никаких хуков режимов (см. Соглашения для основных режимов), поскольку вы не должны настраивать этот режим.
Эта функция работает как fundamental-mode, в том смысле,
что она уничтожает все локальные переменные буфера, но также записывает активный
основной режим, чтобы его можно было впоследствии восстановить. Эта функция и
major-mode-restore (описанная далее) полезны, когда вам
необходимо поместить буфер в какой-либо специализированный режим, отличный от того,
который Emacs выбирает автоматически (см. Как Emacs
выбирает основной режим), но вы также хотите иметь возможность вернуться к
исходному режиму позже.
Эта функция восстанавливает основной режим, записанный функцией
major-mode-suspend. Если основной режим не был записан, эта
функция вызывает normal-mode (см.
normal-mode), но пытается принудительно не выбирать какие-либо режимы в
avoided-modes, если этот аргумент не равен nil.
Смена основного режима очищает большинство локальных переменных, но не
удаляет все артефакты в буфере (например, свойства текста и наложения).
Это редкость — менять буфер из одного основного режима в другой (за исключением
перехода из fundamental-mode в любой другой), поэтому это
обычно не является проблемой. Иногда может быть удобно (в основном при отладке
проблемы в буфере) выполнить «полную очистку» буфера, и именно это и
предлагает основной режим clean-mode. Он уничтожит все
локальные переменные (включая постоянно локальные) и также удалит все
наложения и свойства текста.
Самый простой способ написать основной режим — использовать макрос
define-derived-mode, который настраивает новый режим как
вариант существующего основного режима. См.
Определение производных режимов. Мы рекомендуем использовать
define-derived-mode, даже если новый режим не является очевидным
производным другим режимом, поскольку он автоматически обеспечивает соблюдение
многих соглашений кодирования. См.
Основные режимы, для общих режимов, от которых можно наследовать.
Стандартное дерево каталогов GNU Emacs Lisp содержит код для нескольких основных режимов в таких файлах, как text-mode.el, texinfo.el, lisp-mode.el и rmail.el. Вы можете изучить эти библиотеки, чтобы увидеть, как пишутся режимы.
Локальное значение этой переменной в буфере содержит символ текущего
основного режима. Его значение по умолчанию содержит основной режим по
умолчанию для новых буферов. Стандартное значение по умолчанию —
fundamental-mode.
Если значение по умолчанию равно nil, то всякий раз,
когда Emacs создает новый буфер с помощью такой команды, как C-x b
(switch-to-buffer), новый буфер помещается в основной режим
предыдущего текущего буфера. В качестве исключения, если основной режим
предыдущего буфера имеет символьное свойство mode-class
со значением special, новый буфер помещается в Основной
режим (см. Соглашения для
основных режимов).