djh*_*987 6 emacs key-bindings
我的.emacs
文件中的这个s表达式不会产生所需的结果:
(define-key global-map (kbd "C-=") 'djhaskin987-untab-to-tab-stop)
Run Code Online (Sandbox Code Playgroud)
为什么我不能将命令绑定到Ctrl+ =?
编辑澄清:
我正在使用Debian emacs23-nox
的标准版本urxvt-256colors
,除了我已经重新编译--disable-iso405776
(或者那种效果)它以便Ctrl+ Shift不会做奇怪的'插入字符'的事情.我不知道这是否会影响任何事情.例如,C-M-i发送M-TAB,我不明白.
编辑二:
我为没有说清楚而道歉.该函数中djhaskin987-untab-to-tab-stop
包含该行(interactive)
.这部分有效.
接受的答案与第一条评论中的链接相结合,足以开始一个完整的解决方案.步骤是:
第一种是非常终端和/或操作系统.
第一条评论中的链接显示了X Window System的一些示例.密钥名称可在/usr/X11R6/include/X11/keysymdef.h
(或尝试locate keysymdef.h
)中获得,前缀为XK_
(为了我们的目的,应将其删除).我读到符号名称比关键文字更受欢迎.
我目前没有运行X但我认为在你的情况下它应该是这样的:
XTerm.VT100.Translations: #override \
Ctrl ~Meta ~Shift <Key> equal: string(0x1b) string("[emacs-C-=")\n
Run Code Online (Sandbox Code Playgroud)
第一个字符串是转义符号,第二个字符串是您选择的.
在的iTerm,你可以使用Preferences->Keys
和选择Send Escape Sequence
的Action
.例如,我有:
现在,您可以教Emacs将其识别为C-=.先define-key
入input-decode-map
.我有几个辅助函数:
(defun my/global-map-and-set-key (key command &optional prefix suffix)
"`my/map-key' KEY then `global-set-key' KEY with COMMAND.
PREFIX or SUFFIX can wrap the key when passing to `global-set-key'."
(my/map-key key)
(global-set-key (kbd (concat prefix key suffix)) command))
(defun my/map-key (key)
"Map KEY from escape sequence \"\e[emacs-KEY\."
(define-key function-key-map (concat "\e[emacs-" key) (kbd key)))
Run Code Online (Sandbox Code Playgroud)
那么:
(my/global-map-and-set-key "C-=" 'some-function-to-bind-to)
Run Code Online (Sandbox Code Playgroud)
某些键(当前()\|;'`"#.,
:)将需要在字符串中转义,例如C-\.
.
在终端中,TAB由与字节序列相同的字节序列表示C-i.通常终端没有特殊的字节序列C-=,因此只发送一个=.Emacs没有什么可以做的.但是你可能会教你的终端模拟器发送你选择的一些特殊的字节序列(检查你的终端模拟器的文档),之后你可以教Emacs将它识别为C-=(类似的东西(define-key input-decode-map "...thebytes..." [?\C-=])
).