我正在开发终端仿真器。到目前为止,许多软件都可以在其中运行,包括zsh和vim。
但是我不知道如何使tty-clock正常工作。使其呈现正确的唯一方法是在终端模拟器处理换行符时禁用隐式回车(即,将换行符视为仅将光标向下移动一行而不将其移动到第一列的命令)。
正在运行tty-clock > /tmp/x
...
以下是vim /tmp/x
的输出:
[[?1049h^[[1;39r^[(B^[[m^[[4l^[[?7h^[[?1h^[[39;49m^[[?25l^[[39;49m^[(B^[[m^[[H^[[2J^[[H^[[2J^[[7;12H^[[H
^[[6G^[[42m
^H^H
^H^H
^H^H
^H^H ^[[39;49m^[(B^[[m^[[2d ^[[42m
^H^H
^H^H
^H^H
^H^H ^[[39;49m^[(B^[[m^[[2;21H^[[42m ^[[39;49m^[(B^[[m ^[[42m ^[[3;17H ^[[39;49m^[(B^[[m ^[[42m ^[[39;49m^[(B^[[m ^[[42m
^[[21G ^[[5;17H ^[[25G
^H^H ^[[39;49m^[(B^[[m^[[2d ^[[42m
^H^H
^H^H
^H^H
^H^H ^[[39;49m^[(B^[[m^[[8;13H^[[32m2019-01-27^[[39;49m^[(B^[[m^[[6;8H^[[15G^[[6;27H^[[34G^[[8;23H^[[6;8H^[[15G^[[6;27H^[[34G^[[8;23H^[[39;1H^[[?12l^[[?25h^[[?1049l^M^[[?1l
以下是cat /tmp/x | hexdump -C
的输出:
00000000 1b 5b 3f 31 30 34 39 68 1b 5b 31 3b 33 39 72 1b |.[?1049h.[1;39r.|
00000010 28 42 1b 5b 6d 1b 5b 34 6c 1b 5b 3f 37 68 1b 5b |(B.[m.[4l.[?7h.[|
00000020 3f 31 68 1b 5b 33 39 3b 34 39 6d 1b 5b 3f 32 35 |?1h.[39;49m.[?25|
00000030 6c 1b 5b 33 39 3b 34 39 6d 1b 28 42 1b 5b 6d 1b |l.[39;49m.(B.[m.|
00000040 5b 48 1b 5b 32 4a 1b 5b 48 1b 5b 32 4a 1b 5b 37 |[H.[2J.[H.[2J.[7|
00000050 3b 31 32 48 1b 5b 48 0a 1b 5b 36 47 1b 5b 34 32 |;12H.[H..[6G.[42|
00000060 6d 20 20 0a 08 08 20 20 0a 08 08 20 20 0a 08 08 |m ... ... ...|
00000070 20 20 0a 08 08 20 20 1b 5b 33 39 3b 34 39 6d 1b | ... .[39;49m.|
00000080 28 42 1b 5b 6d 1b 5b 32 64 20 1b 5b 34 32 6d 20 |(B.[m.[2d .[42m |
00000090 20 20 20 20 20 0a 08 08 20 20 0a 08 08 20 20 0a | ... ... .|
000000a0 08 08 20 20 0a 08 08 20 20 1b 5b 33 39 3b 34 39 |.. ... .[39;49|
000000b0 6d 1b 28 42 1b 5b 6d 1b 5b 32 3b 32 31 48 1b 5b |m.(B.[m.[2;21H.[|
000000c0 34 32 6d 20 20 1b 5b 33 39 3b 34 39 6d 1b 28 42 |42m .[39;49m.(B|
000000d0 1b 5b 6d 20 20 1b 5b 34 32 6d 20 20 1b 5b 33 3b |.[m .[42m .[3;|
000000e0 31 37 48 20 20 1b 5b 33 39 3b 34 39 6d 1b 28 42 |17H .[39;49m.(B|
000000f0 1b 5b 6d 20 20 1b 5b 34 32 6d 20 20 1b 5b 33 39 |.[m .[42m .[39|
00000100 3b 34 39 6d 1b 28 42 1b 5b 6d 20 20 1b 5b 34 32 |;49m.(B.[m .[42|
00000110 6d 20 20 0a 1b 5b 32 31 47 20 20 20 20 20 20 1b |m ..[21G .|
00000120 5b 35 3b 31 37 48 20 20 1b 5b 32 35 47 20 20 0a |[5;17H .[25G .|
00000130 08 08 20 20 1b 5b 33 39 3b 34 39 6d 1b 28 42 1b |.. .[39;49m.(B.|
00000140 5b 6d 1b 5b 32 64 20 1b 5b 34 32 6d 20 20 20 20 |[m.[2d .[42m |
00000150 20 20 0a 08 08 20 20 0a 08 08 20 20 0a 08 08 20 | ... ... ... |
00000160 20 0a 08 08 20 20 1b 5b 33 39 3b 34 39 6d 1b 28 | ... .[39;49m.(|
00000170 42 1b 5b 6d 1b 5b 38 3b 31 33 48 1b 5b 33 32 6d |B.[m.[8;13H.[32m|
00000180 32 30 31 39 2d 30 31 2d 32 37 1b 5b 33 39 3b 34 |2019-01-27.[39;4|
00000190 39 6d 1b 28 42 1b 5b 6d 1b 5b 36 3b 38 48 1b 5b |9m.(B.[m.[6;8H.[|
000001a0 31 35 47 1b 5b 36 3b 32 37 48 1b 5b 33 34 47 1b |15G.[6;27H.[34G.|
000001b0 5b 38 3b 32 33 48 1b 5b 36 3b 38 48 1b 5b 31 35 |[8;23H.[6;8H.[15|
000001c0 47 1b 5b 36 3b 32 37 48 1b 5b 33 34 47 1b 5b 38 |G.[6;27H.[34G.[8|
000001d0 3b 32 33 48 1b 5b 33 39 3b 31 48 1b 5b 3f 31 32 |;23H.[39;1H.[?12|
000001e0 6c 1b 5b 3f 32 35 68 1b 5b 3f 31 30 34 39 6c 0d |l.[?25h.[?1049l.|
000001f0 1b 5b 3f 31 6c |.[?1l|
000001f5
如果tty-clock具有非默认的linefeed mode,我会期望上述行为,但是据我所知,它不会发送任何转义序列来设置换行模式。