在Emacs Lisp中,是否有一个函数可以获取由以下方式初始化的符号的初始值defvar
?像some-function
如下图所示:
(defvar var "initial value")
(setq var "changed value")
(some-function 'var)
=> "inital value"
这通常是不可能的(Emacs 不记得原始值),但也有一些例外。
defcustom
变量
定义的变量defcustom
并使用自定义系统进行修改,获取原始值、保存的值和自定义但尚未保存的值作为属性:
(defcustom foo 0 "testing")
(custom-set-variables '(foo 1))
(setq foo 2)
(customize-mark-as-set 'foo)
(setq foo 3)
(car (get 'foo 'standard-value)) ;; evaluates to 0
(car (get 'foo 'saved-value)) ;; evaluates to 1
(car (get 'foo 'customized-value)) ;; evaluates to 2
foo ;; evaluates to 3
See the 定义自定义变量 https://www.gnu.org/software/emacs/manual/html_node/elisp/Variable-Definitions.htmlelisp 手册中的部分,特别是文档上方的讨论custom-reevaluate-setting
功能。
缓冲区局部变量
缓冲区局部变量具有默认(全局)值和可能与全局值不同的缓冲区局部值。您可以使用default-value
获取默认值的函数:
(setq indent-tabs-mode nil)
(default-value 'indent-tabs-mode) ;; evaluates to t
但是,可以更改默认值,并且 Emacs 不会记住原始默认值:
(set-default 'indent-tabs-mode nil)
(default-value 'indent-tabs-mode) ;; evaluates to nil
See the 缓冲区局部变量简介 https://www.gnu.org/software/emacs/manual/html_node/elisp/Intro-to-Buffer_002dLocal.html有关更多详细信息,请参阅 elisp 手册中的部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)