프로그래밍 방식으로 맞춤 변수를 기본값으로 재설정


25

Q : Elisp를 사용하여 해당 값이 무엇인지 모른 채 변수를 기본값으로 재설정하려면 어떻게해야합니까?

초기화 파일에서 기본값이 아닌 값으로 설정 한 변수에 대한 Customize 인터페이스 를 불러 C-h k온 후 "Revert ..."버튼을 클릭 하여이 작업을 수행하는 방법을 알아 냈습니다 . 그것은에 대한 문서를 가져 왔지만 widget-button-click분명히 도움이되지 않았습니다. (마찬가지로 C-h k RET버튼에 포인트가 있으면에 대한 도움말이 표시 Custom-newline됩니다.


3
관련 항목 : 비 커스텀 vars : emacs.stackexchange.com/q/10800/50
Malabarba

답변:


23

C-hig (elisp) Variable Definitions

내부적으로 defcustomsymbol 속성 standard-value을 사용하여 표준 값에 대한 식 saved-value을 기록하고, 사용자 지정 버퍼로 사용자가 저장 한 값을 기록하고, 사용자 지정 버퍼로 customized-value사용자가 설정 한 값을 기록하지만 저장하지는 않습니다. 심볼 속성을 참조하십시오 . 이러한 속성은 목록으로, car값으로 평가되는 표현식입니다.

금후:

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

이는 defcustom변수 에만 적용됩니다 (예 : "사용자 옵션"). 이맥스는 defvar변수 의 초기 값을 어디에도 저장하지 않습니다 .


3
실제로, plist의 값을 평가해야합니다. 예를 들어 다음과 같이 변경해야합니다.에 (setq foo (eval (car (get 'foo 'standard-value))))의해 생성 된 기본 값 양식 defcustom은 funcall 및 클로저가있는 양식입니다 (이것은 어휘 바인딩이 활성화 된 경우에만 가능함)
Elias Mårtenson

이 경우 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.

편집하다

이 기능에 관한 매우 중요한 세부 사항은 아래의 @phils 주석을 읽으십시오.


5
" 저장 또는 표준 값"에 유의하십시오 . 그 순서대로. 사용자 정의와 변수에 대한 값을 저장 한 경우,이 함수는 인수로 재설정 saved-value하지 그것 standard-value.
phils
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.