在linux(ubuntu)应用程序中哪个进程/库将退格转换为ansi转义序列,例如“ 33 [nG”?]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux(ubuntu)应用程序中哪个进程/库将退格转换为ansi转义序列,例如“ 33 [nG”?]相关的知识,希望对你有一定的参考价值。
我已经编写了在CSI n K,名称为“ Erase in Line”,表示“擦除行的一部分。如果n为0(或丢失),则从光标清除到行尾。如果n为1,则清除将光标移到该行的开头。如果n为2,则清除整行。光标位置不变。“
linux
上运行的命令行应用程序(以下称为“ App-CLI”)。 App-CLI充当服务器,接受连接后,它将把子进程作为工作进程进行派生,并在每个此类子进程中分配pty(通过openpty函数)。在每个子进程中,我都使用诸如libedit之类的editline库来处理用户输入。 然后,在情况1中:我使用
Win10]中的cmd / ConEmu / git bash之类的工具通过telnet或SSH连接APP-CLI,然后输入一些字符,例如“ abcdefg”,但双引号除外。然后,输入backspace
键,cmd工具中的屏幕在原点行的开头显示"[K"
。因此,我在Linux中使用strate来监视App-CLI输出的内容strace -e write=1,2 -e trate=write, -p {process_id}
并获得喜欢的结果
write(1, "\r\33[6G\33[K", 8) = 8
由
CSI序列
:组成- CSI n G,名为“光标水平绝对值”(CHA),它的意思是“将光标移动到列n(默认值为1)。(不是ANSI.SYS)”(https://en.wikipedia.org/wiki/ANSI_escape_code)。
似乎cmd或win10无法成功处理CHA序列?但我找不到有关通知(不可支持)的信息。
然后,在情况2:
我仍然在win10中使用cmd工具。但是我首先通过telnet登录linux系统,然后通过linux中的telnet连接到APP-CLI。我同样输入“ abcdefg”和
backspace
键,这次一切正常:屏幕上的输出显示“ abcdef”。 strace下的监视数据是:write(1, "\10\33[K", 4) = 4
包含退格键的序列已更改!所以我想知道:
- 这样的序列是由linux中的哪个进程或库生成的?
- 我是否可以决定最终生成哪种序列,以及如何生成?
- 谢谢。
我已经编写了在Linux上运行的命令行应用程序(以下称为“ App-CLI”)。 App-CLI充当服务器,接受连接后,它将派生一个子进程作为工作进程,并且...
答案
这样的序列是由linux中的哪个进程或库生成的?
以上是关于在linux(ubuntu)应用程序中哪个进程/库将退格转换为ansi转义序列,例如“ 33 [nG”?]的主要内容,如果未能解决你的问题,请参考以下文章