我希望能够在Emacs中的两个缓冲区之间前后翻转,就像我可以在其他一些编辑器中的标签之间切换一样.以下Ctrl TAB键绑定在
XEmacs中运行良好:
(defun buffer-shimmy () "Back to the prevIoUs buffer" (interactive) (let ((buff (car (buffer-list)))) (message "PrevIoUs buffer: %s" buff) (switch-to-buffer (other-buffer buff)) ) ) (global-set-key (kbd "<C-tab>") 'buffer-shimmy) ;; or (define-key global-map [(control tab)] 'buffer-shimmy)
但是,当我使用“emacs -nw”(或者如果我在SSH会话中使用Emacs)打开Emacs时,它不起作用.
找到this link后 – 我想也许我想要的是不可能的?
显然,在终端中(即在窗口系统之外)向“TAB”的ASCII字符添加控制修饰符是没有意义的.然而,如果通过窗口系统,Emacs可以看到您按Ctrl TAB作为< tab>使用控制修饰符,可以在.emacs文件中表示为C-< tab>或< C-tab>或[(控制标签)].
参考软件:使用gnome-terminal和默认配置文件在Ubuntu 9.04上的Emacs版本:22.2.1.
不幸的是,对于在终端窗口中运行的emacs客户端,没有一种适合所有解决方案.问题出现是因为< TAB>字符被定义为CTRL-1,因此CTRL-< TAB>将意味着CTRL-CTRL-I,因此是不可能的.
当emacs在窗口模式下运行时,它直接从按键接收其输入.当它在终端内运行时(或如果它会使事情变得更清楚,为什么它不起作用 – 在ssh连接上),输入来自终端I / O.终端程序读取硬件键事件,并生成输入流(不是非常准确,但突出显示问题). Emacs读取输入流并转换为按键事件.由于emacs无法访问硬件密钥事件,因此受终端环境的限制.
对于某些终端程序,可以在按CTRL-< Tab>时生成自定义输入序列(例如当您按F1时),然后可以将Emacs解释为CTRL-< Tab>.为CTRL-< Home>执行此操作的示例代码段是:
(when (not window-system) ; Fixup missing console keys (define-key key-translation-map (kbd "M-[ 4 ^") (kbd "C-<end>")) (define-key key-translation-map (kbd "M-[ 1 ^") (kbd "C-<home>")))
在该示例中,M- [1]是当我按下CTRL-< Home>时生成的输入序列.在我的终端.
它不是一个非常便携的解决方案(我主要使用putty从windows访问我的linux盒子,它不允许它),所以你的里程可能会有所不同.
最后,我决定在我的.emacs上使用另一个键绑定,并让CTRL-< TAB>的肌肉记忆.死了.