如何在emacs中绑定C- =?

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).这部分有效.

Sam*_*man 8

接受的答案与第一条评论中链接相结合,足以开始一个完整的解决方案.步骤是:

  1. 为密钥设置终端输出转义码
  2. 使Emacs将转义码识别为标准按键
  3. 在模式映射中绑定按键

第一种是非常终端和/或操作系统.

第一条评论中的链接显示了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 SequenceAction.例如,我有:

iTerm键映射

Emacs Wiki 列出了其他终端的一些配置方法.

现在,您可以教Emacs将其识别为C-=.先define-keyinput-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-\..


Ste*_*fan 7

在终端中,TAB由与字节序列相同的字节序列表示C-i.通常终端没有特殊的字节序列C-=,因此只发送一个=.Emacs没有什么可以做的.但是你可能会教你的终端模拟器发送你选择的一些特殊的字节序列(检查你的终端模拟器的文档),之后你可以教Emacs将它识别为C-=(类似的东西(define-key input-decode-map "...thebytes..." [?\C-=])).