gpt4 book ai didi

当前本地键盘映射的 Emacs 名称?

转载 作者:行者123 更新时间:2023-12-04 10:04:46 24 4
gpt4 key购买 nike

我正在编写一个 elisp 函数,它将给定键永久绑定(bind)到当前主要模式的键盘映射中的给定命令。例如,

    (define-key python-mode-map [C-f1] 'python-describe-symbol)

命令和键序列从用户交互收集。但是,我无法生成与当前主要模式相对应的 KEYMAP 名称(例如“python-mode-map”)。

我试过这个函数(current-local-map),但是这个函数返回的是keymap对象本身,而不是它的名字。

我知道许多主要模式键映射是根据约定“主要模式名称”-模式映射“命名的,但是,情况并非总是如此(例如,python-shell-map),所以我宁愿我的代码不依赖这个约定。 (我什至不确定如何访问当前主要模式的名称)。
(define-key ...)将被添加到一个初始化文件中,所以虽然
(define-key (current-local-map) key command)
似乎工作,它不能作为初始化文件上的代码工作。

最佳答案

没有直接的方法可以找到当前本地键映射的名称——更准确地说,是其值所绑定(bind)到的符号——因为键映射甚至不必绑定(bind)到符号。但是,模式键映射通常绑定(bind)到一个全局符号,并且可以通过遍历所有符号并在值为 eq 的符号上停止来找到它是哪一个。到 keymap 对象。

这必须查看所有符号(尽管它对每个符号的工作最少),但具有不依赖任何特定命名约定的优点。

(defun keymap-symbol (keymap)
"Return the symbol to which KEYMAP is bound, or nil if no such symbol exists."
(catch 'gotit
(mapatoms (lambda (sym)
(and (boundp sym)
(eq (symbol-value sym) keymap)
(not (eq sym 'keymap))
(throw 'gotit sym))))))


;; in *scratch*:
(keymap-symbol (current-local-map))
==> lisp-interaction-mode-map

关于当前本地键盘映射的 Emacs 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com