我是使用read
和prin1
函数,读取和储存数据;同时创建了一个mode
和local
变量,mode
开启时读数据到变量中,并将数据储存函数加入kill-buffer-hook
中,关闭buffer
时自动保存数据。
问题在于,在关闭buffer
时local
变量数据应该就没了,导致储存到本地文件的数据为nil
,有什么办法能避免这个问题吗?
我是使用read
和prin1
函数,读取和储存数据;同时创建了一个mode
和local
变量,mode
开启时读数据到变量中,并将数据储存函数加入kill-buffer-hook
中,关闭buffer
时自动保存数据。
问题在于,在关闭buffer
时local
变量数据应该就没了,导致储存到本地文件的数据为nil
,有什么办法能避免这个问题吗?
我没有具体去研究这个机制,用defvar
定义的变量就没问题,而用defvar-local
定义或setq-local
转化的local
变量就有这个问题。我再测试下。
所以有代码吗 ,最简单的那种
with-temp-file 的锅
with-temp-file 会创建一个临时 buffer 并进入,这样位于当前 buffer 中的 buffer-local 变量 data
就读不到了,最简单的修改是这样:
(defun ttt-hello ()
(when (derived-mode-p 'ttt-mode)
(let ((tmp data))
(with-temp-file ".ttt"
(prin1 tmp (current-buffer))))))
(add-hook 'kill-buffer-hook 'ttt-hello)
在 with-temp-file 外面创建一个保存 data
的变量,这样在 with-temp-file 内部就可见了
非常感谢,确实是这样!
另外,等 emacs 29 正式发布了就有数据库用了