什么是Ttrl = linux中的ctrl + arrow(左,右,......)的终端转义序列

joh*_*odo 11 linux terminal keycode xterm vt100

我正在浏览器中建立一个终端窗口(就像ajaxterm一样)并且不知道要发送到ssh隧道的哪个转义序列(打开通过paramiko.SSHClient().invoke_shell(term='linux')).

我找到了一个关键记录器并在$ TERM =='linux'的终端中尝试了它,但它返回了相同的序列ctrl+leftleft(27,91,68).

如果我在另一个终端尝试键盘记录器(使用$ TERM =='xterm'),我会得到代码(27,91,49,59,53,68).但是这些代码不会移动从SSH通道生成预期的输出(这将在正常的Linux shell上移动光标一个字).即使我用term ='xterm'开始paramiko也是如此.

知道我应该使用什么序列?或者为什么上面的序列不起作用?

更新:我很乐意使用另一种终端类型(不是"linux"),但遗憾的是pyte仅适用于VTxxx终端(我相信"linux"是类似vt220的终端 - 无论如何,它都有效),所以xterm不起作用正常.

nin*_*alj 23

终端是由键盘和输出设备组成的硬件设备(最初是硬拷贝打印机,后来是CRT监视器).大型计算机可以连接多个远程终端.每个终端将具有用于与计算机有效通信的协议,对于基于CRT的终端,这包括具有改变光标位置的特殊"控制序列",擦除当前行/屏幕的部分,切换到备用全屏模式,. ..

终端仿真器是模拟这些旧终端之一的应用程序.它允许执行诸如光标定位,设置前景色和背景色等功能,...终端仿真器尝试模拟某些特定的终端协议,但每个都有自己的一组怪癖和偏差.

Unix系统具有描述终端和终端仿真器的数据库,因此应用程序被抽象出使用中的特定终端(或终端仿真器).较旧的数据库termcap(5)虽然terminfo(5)是较新的数据库.这些数据库允许应用程序查询正在使用的终端的功能.功能可以是布尔值,数字功能,甚至字符串功能,例如:如果特定终端类型具有/支持F12密钥,它将具有"key_f12"(长终端名称),"kf12"(短终端名称), "F2"(termcap名称)描述密钥产生的字符串.尝试:tput kf12 | od -tx1.

由于直接使用功能进行编程可能很麻烦,因此应用程序通常使用更高级别的库,如curses/ncurses,slang等...

有一个特殊的环境变量TERM,它告诉应用程序他们正在与哪个终端类型进行通信.如果数据存在于数据库中,则应将此变量设置为确切的终端类型,以获得最佳结果.这只是告诉应用程序终端能够理解哪些精确的协议和协议偏差.更改TERM变量并没有改变终端的类型,它只是改变了终端类型的应用程序认为它聊天.

所有这一切,Ctrl+arrow是一个xterm行为(取决于配置选项),在terminfo/termcap数据库中根本没有反映出来,所以大多数应用程序都不知道它.无论哪种方式,您的终端仿真器(在您的情况下pyte)支持它或它不支持它.

假设您的主应用程序是bash或使用该readline库的其他应用程序,您可以使用readline backward-word(默认情况下为Meta-b/Alt-b/ESC b,可配置inputrc).


Rob*_*obᵩ 9

快速检查od -c显示gnome-termainal生成以下值:

左箭头生成ESC- [- D.

对照左阵列生成ESC- [- 1- ;- 5-D

  • Linux 控制台为两次击键生成 `ESC`-`[`-`D`。 (2认同)