P: W jaki sposób przy pomocy Elisp mogę zresetować zmienną do wartości domyślnej, nie wiedząc, co to jest?
Próbowałem wymyślić, jak to zrobić, uruchamiając interfejs Dostosuj dla zmiennej, którą ustawiłem na wartość inną niż domyślna w moim pliku inicjującym, i naciskając, C-h ka następnie klikając przycisk „Przywróć ...”. To przywołało dokumentację widget-button-click
, która oczywiście niewiele pomogła. (Podobnie, C-h k RETz punktem na przycisku pokazuje pomoc Custom-newline
, której też nie szukam.)
Odpowiedzi:
C-hig
(elisp) Variable Definitions
Stąd:
Zauważ, że dotyczy to tylko
defcustom
zmiennych (tj. „Opcji użytkownika”). Emacs nigdzie nie zapisuje wartości początkowejdefvar
zmiennej.źródło
(setq foo (eval (car (get 'foo 'standard-value))))
Domyślny formularz wartości generowany przezdefcustom
to formularz z funcall i zamknięciem (możliwe, że dzieje się tak tylko wtedy, gdy włączone jest wiązanie leksykalne)setq-default
zamiastsetq
w tym przypadku.Kolejny, prawdopodobnie czystszy sposób resetowania wartości zmiennej:
Na przykład:
zastąpi poprzednią wartość tym symbolem
standard-value
.EDYTOWAĆ
Przeczytaj komentarz @phils poniżej, aby uzyskać bardzo ważny szczegół dotyczący tej funkcji.
źródło
saved-value
, a nie do niejstandard-value
.