1

我想为用户提供将内容添加到列表的选项,然后将其保存以供进一步会话。如何在elisp中做到这一点?

(setq smart-pair-alist
      '(("(" . ")")             ; key 0
        ("[" . "]")             ; key 1
        ("{" . "}")             ; key 2
        ("\"" . "\"")           ; key 3
        ))

(defun smart-pair-adder (open close &optional mode)
  (add-to-list 'smart-pair-alist `(,open . ,close)  t)
  )

(smart-pair-adder "a" "b")

smart-pair-alist 评估为:

(("(" . ")") ("[" . "]") ("{" . "}") ("\"" . "\"") ("a" . "b"))

它增加了真的很好,但是如何保存?

4

2 回答 2

1

如果用户正在使用savehist-mode保存 minibuffer 历史记录,您可以使用savehist-additional-variables来保存任意变量的值:

(add-to-list 'savehist-additional-variables 'smart-pair-alist)
于 2013-02-19T09:22:57.593 回答
1

通常,对于这样的事情,保存变量的内容并在以后的会话中加载它并不是最好的方法。(确实属于这一类的东西是 minibuffer 命令历史、搜索历史等)

相反,用户通常有一个init 文件,其中可以放置如下函数调用:

(smart-pair-adder "a" "b")

这是有利的,原因有很多:

  • 这是未来安全的,以防使用的包更改变量的内容或格式
  • 它更健壮。万一一个变量不知何故会得到错误的值,如果它被保存,该值将永远保留
  • 手动维护文件比自动生成的保存文件更容易维护(如在编写注释时)
  • 保存文件在custom中表现不佳,这是一个为 Emacs 变量的交互式配置而设计的系统。这个系统有它自己的存储和恢复变量的方式。
于 2013-02-19T10:43:11.430 回答