function - elisp 中的缓冲区局部函数

标签 function emacs elisp buffer local

我想重新定义一个现有函数 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/

相关文章:

datetime - 如何使用Emacs Lisp在Emacs中添加日期?

emacs - 在 org-agenda-files 的顶级目录中递归添加 .org 文件需要很长时间

python - 更好地理解这段 python 代码

emacs - Emacs配置dirtree

macos - 如何在 .emacs 文件的文件路径中插入空格?

emacs - Orgmode 议程 View 中未正确显示类别

c程序交换值打印错误结果

java - Mongo/Java Map-Reduce 函数 - MongoCommandException

python - 创建函数以重命名 Pandas 数据框中的列

emacs - 在 Emacs 中创建新模式