首先,如果我的问题或术语没有意义,请原谅 - 我仍在思考终端、控制台、shell 等。
我可以在桌面终端中的应用程序中使用Shift+F2快捷键,但无法在 tty 终端中使用它。其他一些快捷键也不起作用,例如Ctrl+ F6。使用Ctrl+V后跟 来F1打印其字符值,我可以看到它们不同 - 在带有 的桌面终端中TERM=xterm-256color
,Shift+F2返回^[[1;2Q
,而在带有 的 tty1 中,TERM=linux
它返回^[[26~
。将 tty 设置为显示为带有 的 xtermexport TERM=xterm-256color
会使F按键返回字母(甚至无需先按Ctrl+ V),而按Shift+F2只会打印~
。
有什么方法可以让 tty 虚拟终端识别 X 终端的所有相同的快捷键和组合键?
答案1
首先,您不应该TERM=xterm-256color
在 Linux 控制台中设置,否则大多数应用程序将无法正常工作。请坚持使用TERM=linux
。
TERM
其次,让我们澄清一下,改变的值不是更改按键生成的转义序列。图形仿真器或 Linux 内核(如果您使用控制台)无法看到您是否更改了在终端仿真器“内部”运行的进程中的环境变量;事实上,该终端中可能运行着多个进程(它们的标准输入连接到那里),并且具有不同的TERM
变量。但是更改TERM
可能会改变应用程序对这些按键的反应。
有什么方法可以让 tty 虚拟终端识别 X 终端的所有相同的快捷键和组合键?
终端仿真器没有认出你正在谈论的这些序列。它们发射它们和基于终端的应用程序(文本编辑器、文件管理器等)认出他们。
运行infocmp
(或infocmp [terminal-name]
例如infocmp linux
) 列出终端的功能/特性,包括功能键生成的序列。查找kf2
和F2+ kf14
。Shift通常F2应Shift导致偏移量为 12。
据我记得几年前,Linux 控制台上的某些键盘映射的偏移量为 10,这种差异可能会导致各种应用程序出现各种不当行为。
您没有提到如何(例如在哪个应用程序中)尝试捕捉这些按键。如果您正在配置需要具体序列的现有软件,则可能必须教它(至少)两个不同的值,一个用于xterm
和朋友,一个用于linux
。
如果您正在开发自己的应用程序,并且不想在配置文件中硬编码或指定转义序列,您可能应该依靠libtinfo
读取 terminfo 功能,或者使用更高级别的屏幕绘图和键盘处理库,如ncurses
或slang
。