我想重新定义一个现有函数 foo
,但仅适用于特定缓冲区。
(defun foo ()
(message "Not done:("))
我希望这会做:
(make-local-variable 'foo)
(fset 'foo #'(lambda () (message "Done!")))
但事实并非如此。
有任何想法吗?
[编辑:
或者,因为函数绑定(bind)到一个键,只为当前缓冲区修改绑定(bind)就足够了。但我不知道该怎么做。本地键盘映射由主要模式下的所有缓冲区共享。修改它会修改具有此主要模式的所有缓冲区中的绑定(bind)。
我能想到的唯一丑陋的解决方案是为整个缓冲区设置一个键映射文本属性。这是唯一的方法吗?]
最佳答案
您可以创建一个为您执行覆盖的函数,类似于以下内容:
(defun override-the-keymap ()
(let ((my-overriding-keymap (make-sparse-keymap)))
(set-keymap-parent my-overriding-keymap (current-local-map))
(use-local-map my-overriding-keymap)
(define-key my-overriding-keymap (kbd "C-M-x")
'(lambda () (interactive) (message "Done!")))))
显然,适本地自定义键绑定(bind)。这仅在当前缓冲区中有效。
关于function - elisp 中的缓冲区局部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008211/