我最近一直在研究Emacs的次要模式,其部分功能是在单独的缓冲区中显示图像。到目前为止,我一直在使用这样的函数:如何在Emacs中创建缓冲区本地键绑定?
(defun create-buffer-with-image (name)
(let ((buffer (generate-new-buffer name))
(image (get-svg-for-kanji-code name)))
(switch-to-buffer buffer)
(turn-on-iimage-mode)
(iimage-mode-buffer t)
(insert-image image)))
和它产生作为参数传递的图像的缓冲区,但关闭缓冲要求打CXķ和返回,它开始变得一段时间后很麻烦。简化关闭这种瞬态缓冲区的方法是为kill-this-buffer
函数设置一个键绑定,但它需要是缓冲区特定的,以免混淆其他任何东西。问题是如何通过创建缓冲区来实现这种绑定。
'地方设置key'修改本地键映射,在大多数情况下是主要模式键盘映射,这将影响使用该主要模式的所有*缓冲区。所以'local-set-key'是**不是**缓冲区本地效应。 (这只是“本地”,而不是每个缓冲区都可见的“全局”键映射。) – phils 2014-12-06 08:48:39
感谢您的回复,@phils。我对你的评论做了一些调查。当我使用'iimage-mode'显示图像时,该缓冲区的主要模式是'Fundamental'(其他次要模式是'iImg'和'MRev')。在做了local-set-key绑定之后,我检查了所有这些模式下的键绑定,并且他们都没有显示出你警告过我的行为。根据我的看法,它确实会导致缓冲区局部效应。如果我在这里丢失了重要的东西,请纠正我。 – 2014-12-21 14:06:46
在基本模式下,这是正确的。它不设置本地键盘映射,并且在这种情况下看起来'local-set-key'确实创建了缓冲区本地键盘映射。请注意,这不是正常行为,因为大多数主要模式都设置(和共享)本地键盘映射。 – phils 2014-12-21 20:39:26