Програмно скинути власну змінну до значення за замовчуванням


25

Питання: Як за допомогою Elisp я можу скинути змінну до її значення за замовчуванням, не знаючи, що це значення?

Я спробував розібратися, як це зробити, піднявши інтерфейс Налаштувати для змінної, яку я встановив у моєму init-файлі, що не за замовчуванням, і натиснувши, C-h kпісля чого натисніть кнопку "Повернути ...". Це підняло документацію widget-button-click, яка, очевидно, не дуже допомогла. (Точно так само, C-h k RETякщо вказівник на кнопці відображає допомогу Custom-newline, яку я теж не шукаю.)


3
Пов'язані, для нестандартних варіантів
Malabarba

Відповіді:


23

C-hig (elisp) Variable Definitions

Внутрішньо defcustomвикористовує властивість символу standard-valueдля запису виразу для стандартного значення, saved-valueдля запису значення, збереженого користувачем за допомогою буфера настройки, та customized-valueдля запису значення, встановленого користувачем за допомогою буфера настройки, але не збереженого. Див. Властивості символу . Ці властивості є списками, carз яких є виразом, що оцінює значення.

Звідси:

(setq foo (eval (car (get 'foo 'standard-value))))

Зауважте, що це стосується лише defcustomзмінних (тобто "параметрів користувача"). Emacs не зберігає початкове значення defvarзмінної ніде.


3
Власне, потрібно оцінити вал у плісті. Ваш приклад має бути змінено на: (setq foo (eval (car (get 'foo 'standard-value))))Форму значень за замовчуванням, сформовану формою, defcustomє форма з функцією виклику та закриттям (можливо, це відбувається лише тоді, коли включена
лексична палітура

Ви, мабуть, хочете скористатися, setq-defaultа не setqв цьому випадку.
sanityinc

11

Ще один, мабуть, чистіший спосіб скинути значення змінної:

custom-reevaluate-setting- це складена функція Lisp в custom.el.

(custom-reevaluate-setting SYMBOL)

Скиньте значення SYMBOL, повторно оцінивши його збережене або стандартне значення. Використовуйте :setфункцію для цього. Це корисно для налаштованих параметрів, визначених до того, як їх стандартне значення дійсно можна буде обчислити. Наприклад, демпінгові змінні, за замовчуванням яких залежить інформація про час виконання.

Так, наприклад:

(custom-reevaluate-setting 'emms-player-next-function)

замінить попереднє значення символом цього символу standard-value.

EDIT

Прочитайте коментар @phils нижче щодо дуже важливої ​​деталі щодо цієї функції.


5
Примітка " збережене або стандартне значення". У тому порядку пріоритету. Якщо користувач настроював і зберігав значення для змінної, ця функція скидає її як її saved-value, а не її standard-value.
філс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.