Emacs. Установка значения переменной
2025-04-11
·
3 мин. для прочтения
Emacs. Установка значения переменной.
Содержание
1 Общая информация
- Основные функции для присваивания значения:
set
,setq
set-default
defcustom
custom-set-value
custom-set-variables
customize-set-value
customize-set-variable
setopt
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
остается базовым способом установки значений без дополнительной логики