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

前端之家收集整理的这篇文章主要介绍了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>的肌肉记忆.死了.

猜你在找的Ubuntu相关文章