是否可以通过按键插入正确的`(kbd“…”)`?


20

我无聊查找该kbd功能的键名,有没有一种方法只需按一下键即可自动插入正确的键名?

因此,例如,我想要执行以下操作:我正在输入

(local-set-key |

我跑步magical-insert-kbd-command,按f6键,我得到

(local-set-key (kbd "<f6>") |

Answers:


20

不确定您要问的是什么。但是C-h k,按下键之后,您会确切地看到需要传递给什么字符串kbd。例如,C-h k f6向您显示<f6>

这是一个执行您想要的命令,我猜并将结果绑定到C-c c

(defun foo (key)
  (interactive "kKey: ")
  (insert (format "(kbd %S)" (key-description key))))

(global-set-key (kbd "C-c c") 'foo)

然后输入:

(local-set-key C-c c

这提示您使用密钥。如果您按下F6键,则会得到以下信息:

(local-set-key (kbd "<f6>") 

[根据@HaraldHancheOlsen的建议进行更新:已更改"(kbd \"%s\")"".](kbd %S)"


很好,谢谢!。我最缺少的是缺少该key-description功能。
dshepherd

但是OP是对的,拥有自动将键绑定放置在kill环中的功能将很有用。
白炽灯

1
@incandescentman:嗯?OP在哪里对杀戮之环说些什么?那句话中的“键绑定”是什么意思?键绑定不是字符串,而是kill-ring包含的内容。你是说key-description串吗?还是上述formatsexp 的返回值?无论如何,应该清楚如何修改我给出的命令,以将其中任何一个添加到中kill-ring(仅使用kill-new)。
Drew

“自动插入。” 如果我理解正确,那么上面的解决方案仅显示键绑定(例如kbd <M-return>),而不会将其插入到init文件中。(您必须执行复制/粘贴的附加步骤。)也许我误会了。对于我个人的使用情况下,我会觉得非常有用的一种方式来查询一个键绑定语法(例如是语法M-RETM-<return>还是什么?),并自动把该字符串中的杀戒/纸板,这样我就可以再编写类似的行时,将键绑定粘贴到我的init文件中(define-key map (kbd "<M-return>") 'org-return)
白炽灯

1
是的,你误会了。(但是在绑定键的sexp中也有一个错字:我忘了kbdglobal-set-keysexp中使用-现在已更正。)命令fooglobal-set-keysexp绑定到C-c c)读取键序列,然后在当前缓冲区的位置插入正确的kbd性别。如果C-c c在init文件中使用(local-set-key ,则它会在kbd读取的密钥后插入您需要的sexp。
Drew

7

如果您使用M-x local-set-key交互方式进行键绑定,则可以使用C-x ESC ESCrepeat-complex-command)获得一个Lisp表达式,您可以将该表达式粘贴到您的配置中。不过,它可能不会使用友好的(kbd ...)样式说明。


整齐。define-key尽管实际上我倾向于使用,但直接定义键似乎比设置钩子来调用定义键的函数更简单。
dshepherd 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.