Я работаю над эмулятором терминала.Пока что в нем работает много программного обеспечения, включая zsh и vim.
Но я не могу понять, как заставить tty-часы работать должным образом.Единственное, что делает его корректным рендеринг, это отключение неявного возврата каретки, когда эмулятор терминала обрабатывает новую строку (т.е. обрабатывает новую строку как команду, чтобы просто переместить курсор вниз на одну строку, не перемещая его в первый столбец).
Запустив 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 имел нестандартный режим перевода строки , но, насколько я могу судить, он не отправляет escape-последовательности для установки режима перевода строки.