Control-上、下、左、右作为附加键

Control-上、下、左、右作为附加键

有没有办法让按下控制键时箭头键做出不同的动作。在我的系统上,^-Up 和 Up 生成相同的代码...

答案1

来自我的 /etc/personal-linux-console.map:

# Up
control keycode 103 = F69

# Left
control keycode 105 = F71

...
string F69 = "\033<Cu>"
string F71 = "\033<Cl>"

从我的 /etc/rc.local:

 loadkeys -q /etc/personal-linux-console.map

我只是随意选择了这些值。现在在 Linux 控制台中,Control-Up 将发送五个字符 Escape-<-Cu->,等等。您可以在 ~/.inputrc 文件中告诉 readline 您希望如何解释这些字符。

使用 X,有各种地方可以调整。您可以使用 进行一些更改xmodmap。根据您启动 X 的方式,您可能只需将 xmodmap 命令保存在 ~/.Xmodmap 或 /etc/X11/Xmodmap 中并让它们自动加载。某些更改对于 xmodmap 来说太棘手了,您需要编写 XKB 定义文件(这些文件在我的计算机上位于 /usr/share/X11/xkb 下)。这些文件非常复杂且文档记录不全。您应该可以通过 Google 搜索找到一些文档和教程。大约一年后,我们就会看到新一代 XKB 的部署,所以我不知道花时间学习旧格式有多大意义。

我不知道是否可以使用 xmodmaps 命令来执行 Control 键。我认为可以。我以前在自定义 XKB 文件中配置了 Control 键(无论如何,我需要 XKB 文件,用于某些内容)。现在,我在 X 终端 (urxvt) 的配置文件中配置了 Control 键。我使用相同的任意选择序列 escape-<-Cu-> 来执行 Control-up 等,以便我可以使用 .inputrc 文件(用于 readline)和其他终端程序(mutt、elinks 等)中的设置。

对于某些键的重新定义,编写自己的 terminfo 文件也很有用,这样 terminfo 感知应用程序就更有可能处理/识别它们。不过,我不会对我的 Control-arrow 设置这样做。但例如,如果您定义了某个键来输出字符串 Escape-<-SU->,则可能需要使用一个 terminfo 文件,将该字符串声明为“撤消”键。然后,在某些应用程序中,您将能够将该键称为“撤消”,无论它在您的物理键盘上显示什么。

它很复杂。没有比它更简单的通用解决方案。(不过,如果您只关心几个键,那么在几个应用程序中,您很可能能够忽略一些复杂性。)

答案2

在控制台下,您可以使用 dumpkeys 检查转换表并使用 loadkeys 进行更改(例如,此处将它们映射到附加功能键 F13-F16):

box# dumpkeys
...
keycode 103 = Up
keycode 105 = Left
keycode 106 = Right
keycode 108 = Down
...

box# loadkeys <<EOF
control keycode 103 = F13
control keycode 105 = F14
control keycode 106 = F15
control keycode 108 = F16
EOF

答案3

如果 putty 可以,请将其置于 xterm 仿真模式,而不是 VT100。如果不能进行 xterm 仿真,请切换到可以进行仿真的仿真器。VT100 无法执行您想要的按键序列,就是这样。

相关内容