Система настройки - это встроенная функция Emacs, предназначенная для точного решения проблемы, которую вы описываете, - программирование не может быть идеальным способом для обычного пользователя настроить свой редактор.
Основной точкой входа в функцию настройки является M-x customize RET
(или Options > Customize Emacs > Top-level Customization Group
из меню). Оттуда вы увидите интерактивную систему меню для настройки параметров. Этот интерфейс гарантирует, что все параметры имеют правильный тип (число, строка, цвет и т. Д.), Избегая основного источника ошибок, возникающих при программной настройке Emacs. Если пользователь решает сохранить какие-либо изменения, сделанные в пользовательском интерфейсе, настройки сохраняются в специальном разделе файла инициализации пользователя (читай:) .emacs
.
defcustom
это обертка вокруг низкоуровневой функциональности Emacs Lisp, defvar
которая объявляет переменную и делает ее видимой в интерфейсе настройки. Это также позволяет разработчику предоставлять дополнительные метаданные, необходимые для отображения соответствующего интерактивного элемента управления, т. Е. Какой тип значения хранится в этой переменной? Произвольная строка? Число? Выбор из фиксированного набора опций? и т.д. defgroup
- это группирующая конструкция для этих настраиваемых параметров, так что они могут быть упорядочены в хорошую иерархию.
Эта функциональность должна использоваться каждый раз, когда часть данных должна рассматриваться как настраиваемая опция для пользователя, а не как внутренняя деталь библиотеки.
Вот простой пример, взятый из моей небольшой библиотеки:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
defgroup
Создает новую группу в настройках интерфейса под верхним уровнем convenience
элемента. Затем мне понадобилась переменная для хранения возможных состояний флажков. Я мог бы использовать defvar
, но так как я хочу, чтобы это было легко настраиваемым, я решил использовать defcustom
. :group
Часть указывает на то, что он принадлежит к ранее определенной группе, и :type
указывает на то, что она представляет собой последовательность строк. Там также значение по умолчанию и описание. Есть также дополнительные возможности (здесь не показаны) для преобразования значений, введенных пользователем.
Если я сейчас запустлю M-x customize RET
и перейду к Convenience > Checkbox
, я увижу следующее:
Это не самый красивый интерфейс в мире, но обратите внимание, что он имеет интерактивные инструменты для настройки значения «Состояния флажков» ( checkbox-states
внутри). Он показывает текущие строковые значения вместе с кнопками INS
(вставка) и DEL
(удаление) и позволяет нам редактировать строковые значения в полях редактирования. Когда мы закончим, мы можем решить, применять ли наши изменения, отменить их или применить и сохранить их для будущих сессий.
customize
оборудование, а когда настраивать вручную? Или вы заинтересованы в написании режима? Последняя ситуация - это ситуация, в которой вы действительно можете использовать такие вещиdefcustom
и тому подобное.