Почему эмуляторы терминала не сопоставляют символы новой строки tty-clock с неявными возвратами каретки? - PullRequest
0 голосов
/ 28 января 2019

Я работаю над эмулятором терминала.Пока что в нем работает много программного обеспечения, включая 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-последовательности для установки режима перевода строки.

...