Emacs. Установка значения переменной
2025-04-11
·
3 мин. для прочтения
Emacs. Установка значения переменной.
Содержание
1 Общая информация
- Основные функции для присваивания значения:
set,setqset-defaultdefcustomcustom-set-valuecustom-set-variablescustomize-set-valuecustomize-set-variablesetopt
2 Функции установки значения переменной
- В Emacs существует несколько способов работы с переменными.
2.1 setq
- Базовая функция для установки значения переменной
- Просто присваивает новое значение без дополнительной логики
- Работает с любыми переменными, не только с пользовательскими опциями
- Не вызывает пользовательские функции установки (set functions)
(setq my-variable "значение")
2.2 setopt
- Введено в Emacs 29 как более безопасная альтернатива
setq - Вызывает все связанные функции установки
- Выполняет проверку типа значения
- Рекомендуется использовать для пользовательских опций
(setopt my-custom-variable "значение")
2.3 custom-set-variable
- Часть системы пользовательских настроек Emacs
- Создаёт запись в файле настроек
- Обеспечивает совместимость с интерфейсом настроек Emacs
- Вызывает функции установки и валидации
- Сохраняет значение в памяти и в файле настроек
- Разработчик пакета может перехватить присваивание значения переменной, объявленной с помощью
defcustom, и выполнить какой-то дополнительный код.(custom-set-variable 'my-custom-variable "значение")
3 Различия
3.1 Назначение
setq- для простой установки значенийsetopt- для безопасной установки пользовательских опцийcustom-set-variable- для установки значений с сохранением в файл настроек
3.2 Функциональность
setqпросто присваивает значениеsetoptвыполняет проверку и вызывает функции установкиcustom-set-variableделает то же, что иsetopt, плюс сохраняет в файл
3.3 Использование
set: основная функция для установки значения переменнойsetq: версия, которая автоматически квотирует свой первый аргумент.(setq foo bar)есть сокращение от(set (quote foo) bar)- Это полезно, поскольку цитирование первого аргумента — это то, что вы хотите сделать почти всегда.
setqиспользуется для любых переменных в коде
setq-default:(set-default foo bar)означает «если только не существует более четкого определенияfoo, в текущем буфере использовать строку значений».- Применяется ко всем буферам.
- Некоторые переменные не могут быть установлены глобально.
- Всякий раз, когда вы устанавливаете переменную, она устанавливается только для текущего буфера.
- Если вы хотите имитировать установку этой переменной глобально, вы используете
set-defaultилиsetq-default.
setopt: рекомендуется для пользовательских опцийcustom-set-variable: применяется при работе с пользовательскими настройкамиdefvar: позволяет писателю пакета определить переменную и предоставить некоторую документациюdefcustomбазируется наdefvar.- Позволяет указать место в иерархии параметров, а также информацию о типе данных.
- Сообщает emacs, что это переменная, и позволяет разработчику создать
customинтерфейс для установки значения. - Можно задать ограничения на значения переменной.
3.4 Рекомендации по использованию
- Используйте
setqилиsetq-defaultдля:- установки значений обычных переменных
- временных переменных в функциях
- переменных, не требующих специальной обработки
Используйте
setoptдля:- установки значений пользовательских опций
- переменных, определенных через
defcustom - когда важна проверка типа и вызов функций установки
Используйте
custom-set-variableдля:- установки пользовательских настроек через интерфейс настроек
- когда нужно сохранить значение в файл настроек
- при работе с пользовательским интерфейсом настроек
3.5 Пример использования
;; Простая установка переменной
(setq my-temp-variable "временное значение")
;; Безопасная установка пользовательской опции
(setopt my-custom-variable "безопасное значение")
;; Установка через пользовательский интерфейс
(custom-set-variable 'my-custom-variable "сохраненное значение")
custom-set-variableобычно используется автоматически при настройке через интерфейс настроек Emacssetoptявляется рекомендуемым способом установки пользовательских опций наямная с Emacs 29setqостается базовым способом установки значений без дополнительной логики