Q: Используя Elisp, как я могу сбросить переменную к ее значению по умолчанию, не зная, что это за значение?
Я попытался выяснить, как это сделать, вызвав интерфейс Customize для переменной, для которой я установил значение, отличное от значения по умолчанию, в моем файле инициализации и нажав, C-h kа затем щелкнув по кнопке «Revert ...». Это вызвало документацию widget-button-click
, которая, очевидно, не сильно помогла. (Точно так же, C-h k RETкогда точка на кнопке показывает справку Custom-newline
, это тоже не то, что я ищу.)
Ответы:
C-hig
(elisp) Variable Definitions
Следовательно:
Обратите внимание, что это относится только к
defcustom
переменным (т. Е. «Параметры пользователя»). Emacs нигде не сохраняет начальное значениеdefvar
переменной.источник
(setq foo (eval (car (get 'foo 'standard-value))))
Форма значения по умолчанию, сгенерированная с помощьюdefcustom
- это форма с funcall и замыканием (возможно, это происходит только при включенной лексической привязке)setq-default
а неsetq
в этом случае.Другой, возможно, более чистый способ сброса значения переменной:
Так, например:
заменит предыдущее значение с этим символом
standard-value
.РЕДАКТИРОВАТЬ
Прочитайте комментарий @phils ниже для получения очень важной информации об этой функции.
источник
saved-value
, а не егоstandard-value
.