我最近一直在研究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)))
并且它生成一个缓冲区,图像作为参数传递,但关闭缓冲区需要点击 C-x k 和返回,一段时间后开始变得麻烦。简化这种瞬态缓冲区关闭的方法是为kill-this-buffer
函数设置一个键绑定,但它需要特定于缓冲区,以免弄乱其他任何东西。问题是如何通过创建缓冲区来实现这种绑定。
答案 0 :(得分:1)
网上的一些帖子暗示使用了local-key-binding
,但有些方面它对我不起作用 - 当我显示图像并检查了键绑定时,我选择了{{ 1}}没有生效。经过一些实验并挖掘q
个引用,我发现我需要使用elisp
。所以现在我的函数看起来像这样:
local-set-key
可以通过按 q 轻松关闭新创建的图像缓冲区。
答案 1 :(得分:1)
我建议您在致电special-mode
后向switch-to-buffer
添加电话。
从长远来看,你会想要使用自己的主要模式,所以你可以这样做:
(define-derived-mode my-image-mode special-mode "MyImage"
"My own major mode to display images."
;; We could add more things here
)
(defun create-buffer-with-image (name)
(with-current-buffer (generate-new-buffer name)
(my-image-mode)
(let ((image (get-svg-for-kanji-code name)))
(turn-on-iimage-mode)
(iimage-mode-buffer t)
(insert-image image)
(pop-to-bffer (current-buffer)))))
答案 2 :(得分:1)
来自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)
撰稿:TiagoSaboga
要检查更改,请键入C-h b
又名M-x describe-bindings
答案 3 :(得分:0)
创建次要模式:
(define-minor-mode my-mode "my doc" nil nil (make-sparse-keymap))
然后您可以使用此模式的 my-mode-map
来定义您的键绑定。使用 (my-mode)
激活模式。