【发布时间】:2013-01-07 12:43:53
【问题描述】:
我正在编写一个 elisp 函数,它将给定键永久绑定到当前主要模式的键映射中的给定命令。例如,
(define-key python-mode-map [C-f1] 'python-describe-symbol)
命令和按键序列是从用户交互收集的。但是,我无法生成与当前主要模式相对应的 KEYMAP 名称(例如“python-mode-map”)。
我已经尝试过这个函数(current-local-map),但是这个函数返回的是keymap对象本身,而不是它的名字。
我知道许多主要模式键映射是根据约定“major-mode-name”-mode-map 命名的,但是,情况并非总是如此(例如,python-shell-map),所以我宁愿我的代码不依赖这个约定。 (我什至不确定如何访问当前主要模式的名称)。
(define-key ...) 将被添加到一个初始化文件中,所以尽管
(define-key (current-local-map) key command)
似乎可以工作,它不能作为初始化文件上的代码工作。
【问题讨论】:
-
你为什么要编写生成其他代码的代码?你试图解决的更深层次的问题是什么?您能否编写一些其他人可以简单地
require的库?您能否编写一个单一模式来执行这些类型的功能magically-describe-symbol,根据当前模式执行正确的操作?等 -
我的观点/问题是,如果您可以以编程方式添加这些,您可能能够以更通用、更优雅的方式解决它 - 一种不涉及一堆 sn-ps除了模式映射之外看起来几乎相同的代码...
-
@TreyJackson 那些“一堆 sn-ps”可能是属于
.emacs的代码片段(当然,在合理的数量范围内)。生成其他代码的代码在 Lisp 中不会受到欢迎。
标签: emacs key key-bindings major-mode