我emacs -nw
在 KDEkonsole
终端模拟器中以控制台模式运行。在 Emacs 中,我从windmove
包中定义了 Shift-Left 和 Shift-Right 以在缓冲区之间水平跳转。我看到的问题是它konsole
似乎吞下了 Shift-Left 和 Shift-Right 键。Shift-Up 和 Shift-Down 键正在工作。我读取了 Emacs 收到的键Ctrl-h l
,可以看到没有收到 Shift-Left 和 Shift-Right 的键,但是我得到了 Shift-Up 和 Shift-Down 的键。
另一方面,我可以在里面运行 Emacsxterm
以及 es Emacs,gnome-terminal
并接收 Shift-Left 和 Shift-Right 的正确键码:
ESC [ 1 ; 2 C [windmove-right]
ESC [ 1 ; 2 D [windmove-left]
似乎 KDEKonsole
正在处理 Shift-Left 和 Shieft-Right 组合键本身并且没有转发它们。我进入Settings->Edit-CurrentProfile->Keyboard
并编辑了"Default (XFree 4)"
个人资料。但是定义 Shift-Left 和 Shift-Right 没有生效:
Right+Shift \E[1;*C
Left+Shift \E[1;*D
并在“输入”对话框中进行测试,然后它似乎会产生正确的输出:
但是,如果我应用设置并再次输入 Emacs,我不会收到 Shift-Left 和 Shift-Right 的任何字符。我也尝试添加 -AppScreen 和 +AppScreen 但结果相同。
另一方面,我可以在“默认(XFree 4)”配置文件中看到 Shift+Up 和 Shift+Down 的映射:
Up+Shift ScrollLineUp
Down+Shift ScrollLineDown
这些 Keycode 以以下形式到达 Emacs:
ESC [ 1 ; 2 A [windmove-up]
ESC [ 1 ; 2 B [windmove-down]
有谁知道为什么要特别处理 Shift-Left 和 Shift-Right 以及如何让它们工作?
它们也被定义为用于切换到上一个/下一个选项卡的全局 Konsole 快捷方式。转到 Konsole 的设置 -> 配置快捷方式并在那里删除它们。
(我先执行此操作,然后执行您描述的步骤。我还必须重新启动 konsole 才能使更改生效;不确定您是否也需要重新启动。)