Tom*_*Tom 5 linux ubuntu emacs key-bindings
我希望能够在 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)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用“emacs -nw ”(或者如果我在 SSH 会话中使用 Emacs)打开 Emacs 时,它不起作用。
找到此链接后- 我想也许我想要的是不可能的?
显然,在终端(即窗口系统之外)为“TAB”的 ASCII 字符添加控制修饰符是无意义的。然而,如果通过窗口系统,Emacs 可以看到您按Ctrl+TAB作为<tab>控制修饰符,它可以在.emacs文件中表示为C-<tab>or<C-tab>或[(control tab)]。
是否有解决此问题的解决方法?
参考软件:Emacs 版本:22.2.1 在 Ubuntu 9.04 上使用 gnome-terminal 和默认配置文件。
小智 7
不幸的是,对于在终端窗口中运行的 emacs 客户端,没有一种适合所有情况的解决方案。问题出现是因为<TAB>字符被定义为CTRL-I,所以CTRL-<TAB>意味着CTRL-CTRL-I,所以是不可能的。
当 emacs 在窗口模式下运行时,它直接从按键接收输入。当它在终端内运行时(或者如果它能让事情更清楚为什么它不起作用 - 在 ssh 连接上),输入来自终端 I/O。终端程序读取硬件按键事件,并生成输入流(不是很准确,但突出了问题)。Emacs 读取输入流并转换为按键事件。由于emacs无法访问硬件按键事件,因此受到终端环境的限制。
对于某些终端程序,可能会在您按下F1时生成自定义输入序列(例如按下 时)CTRL-<Tab>,然后 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>")))
Run Code Online (Sandbox Code Playgroud)
在这个例子中,M-[ 1 ^是我按下CTRL-<Home>终端时生成的输入序列。
这不是一个非常便携的解决方案(我主要使用 putty 从 Windows 访问我的 linux box,它不允许),所以你的里程可能会有所不同。
最后,我决定在我的 .emacs 上使用另一个键绑定,让肌肉记忆CTRL-<TAB>消失。