gpt4 book ai didi

emacs - 如何为 defcustom 定义的变量设置缓冲区本地值?

转载 作者:行者123 更新时间:2023-12-02 11:22:14 24 4
gpt4 key购买 nike

在emacs中,我们可以定义可定制的用户选项变量。

defcustom - Programming in Emacs Lisp http://www.gnu.org/software/emacs/manual/html_node/eintr/defcustom.html

我们可以使变量具有缓冲区本地绑定(bind)。

Creating Buffer-Local - GNU Emacs Lisp Reference Manual http://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Buffer_002dLocal.html#Creating-Buffer_002dLocal

如果我想制作不可自定义的变量,我可以使用 make-local-variablesetq-local

但我找不到任何方法如何使可自定义变量具有缓冲区本地绑定(bind)。

即使我为 defcustom 定义的变量调用 make-local-variablecustom-set-variables 设置为 global -值

如果我调用setq-local,值将设置为局部变量。这个比较好。但我认为这不是最佳实践。

是否有任何有效的方法可以为 defcustom 定义的变量设置缓冲区本地值?

最佳答案

答案是:您不能,至少不能使用自定义 UI。

您可以做的是添加一个 sexp,将变量的缓冲区本地值设置到您的初始化文件中。

执行以下其中一项操作:

  • 使其始终位于缓冲区本地,无论缓冲区是什么:

    (make-variable-buffer-local 'the-variable)

    您可以将其放在初始化文件中的任何位置。

  • 仅将其设置为当前缓冲区的本地缓冲区,即选择后的某个缓冲区:

    (make-local-variable 'the-variable)

    为此,您需要将 sexp 放入选择所需缓冲区的 sexp 中。例如,这可能是:

    (with-current-buffer (get-buffer-create "the-buffer-name")
    (make-local-variable 'the-variable))

    假设缓冲区可以合理地创建或已经存在。如果您这样做,请在加载自定义文件之后执行此操作。也就是说,在您的初始化文件中,在加载 custom-file (我推荐)之后,或者,如果您不使用 custom-file,则在由自定义(例如,custom-set-variables)。

    您也可以将 make-local-variable sexp 放在模式 Hook 上,这样每当您处于具有特定模式的缓冲区时,它就会被执行。

综上所述,我提交了 enhancement request 2012 年的 Emacs Dev,要求用户能够使用自定义 UI 来设置(并可能保存)用户选项的缓冲区本地值。到目前为止,它位于“愿望 list ”类别中。

关于emacs - 如何为 defcustom 定义的变量设置缓冲区本地值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com