ubuntu – gnome-terminal中Emacs中的Ctrl tab键绑定问题

我希望能够在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>的肌肉记忆.死了.

相关文章

1.安装过程出现0x00000000指令引用的0x00000000内存该内存不能为written 如果你安装的是inux系统 需要在...
写在全面:如果根据以下教程涉及到只读文件需要更改文件权限才能需修改文件内容,参考我的另一篇博客:...
写在前面:以下步骤中需要在终端输入命令,电脑端查看博客的朋友可以直接复制粘贴到终端,手机端查看的...
ubuntu16.04和18.04更换国内源 写在前面:安装好ubuntu双系统后,默认的软件更新源是国外的,在国内使用...
ubuntu双系统启动时卡死解决办法(在ubuntu16.04和18.04测试无误) 问题描述: 在安装完ubuntu双系统后...
又来造轮子了。。。。。。。。。。。。。。。。 今天使用w3af向文件中写入的时候,发现没有write权限,...