Woj*_*Gac 5 emacs elisp key-bindings
我最近一直在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)))
Run Code Online (Sandbox Code Playgroud)
并且会产生一个缓冲区,并以图像作为参数传递,但是关闭缓冲区需要点击C-x k和Return,这在一段时间后开始变得很麻烦。简化关闭此类瞬态缓冲区的方法是对该kill-this-buffer
函数进行键绑定,但是它必须是特定于缓冲区的,以便不弄乱其他任何东西。问题是如何通过创建缓冲区来进行这种绑定。
来自 EmacsWiki:https ://www.emacswiki.org/emacs/BufferLocalKeys
对于缓冲区本地键,您不能使用local-set-key
,除非您想修改有问题的整个主要模式的键映射:local-set-key
是主要模式的本地,而不是缓冲区。
对于缓冲区本地修改,请改用:
(use-local-map (copy-keymap foo-mode-map))
(local-set-key "d" 'some-function)
Run Code Online (Sandbox Code Playgroud)
作者:蒂亚戈萨博加
要检查更改,请键入C-h b
akaM-x describe-bindings
我被网上一些建议使用 的帖子误导了local-key-binding
,但不知何故它对我不起作用 - 当显示图像并且我检查了键绑定时,我的选择q
并未生效。经过一些实验和挖掘elisp
参考资料后,我发现我需要使用local-set-key
. 所以现在我的函数如下所示:
(defun create-buffer-with-image (name)
(let ((buffer (generate-new-buffer name))
(image (get-svg-for-kanji-code name)))
(switch-to-buffer buffer)
(local-set-key (kbd "q") 'kill-this-buffer)
(turn-on-iimage-mode)
(iimage-mode-buffer t)
(insert-image image)))
Run Code Online (Sandbox Code Playgroud)
并且可以通过按 轻松关闭新创建的图像缓冲区q。