当konsole在其显示的文本流中看到一个ESC字符时, 它会非常仔细地查看后面几个字符.如果后面的前三个字符是[2j, 该序列命令konsole执行清屏操作.
我有疑问的是为什么不能直接在konsole中按下ESC+[2j这4个字符.我现在知道需要通过另外某些途径才行.比如在一个C文件中,或者是按键绑定中,或者是linux的某些配置文件中.甚至不一定是ESC,连\r这种转义序列也是. 但这些我都说不清为什么.谁能具体解释下?
其实linux terminal是支持的,不过输入这些special control char比较麻烦而已 不怎么用konsole,用putty给楼主举个例子,我的term是linux
$infocmp # Reconstructed via infocmp from file: /usr/share/terminfo/l/linux linux|linux console, am, bce, ccc, eo, mir, msgr, xenl, xon, ... clear=\E[H\E[J, cnorm=\E[?25h\E[?0c, cr=^M,
所以在这个term里面,clear screen的sequence 是 "escape + [ + H + escape + [ + J" , \E 表示 escape键
如果我想在shell里面输入这个sequence来达到clear screen的效果,有几种办法 a) 直接执行clear,这个util会输出这串sequence到当前term 如果检查clear的输出结果就会看到一样的sequence $clear |od -tx1 0000000 1b 5b 48 1b 5b 4a 0000006 b) 用echo的 -e 模式来输入 /bin/echo -e "\x1b\x5b\x48\x1b\x5b\x4a" 注意用/bin/下面的echo而不是shell builtin的echo c) 楼主所要求的raw 输入, 是用ctl-v来实现的, 键盘序列为 ctrl-V + escape + [ + H + ctrl-V + escape + [ + J + enter 会看到类似这样的显示 $^[[H^[[J
|