adb shell兼容VT100

0x0 修复方式

本地代码版本(基于git):
platform/system/core.git
2018-02-03
master
176afbbedf5dd1f4c51839dc1e3614a1f3ddd878

影响文件(基于repo):
system/core/adb/sysdeps_win32.cpp

修复手段:
向标准输入流的ConsoleMode中添加0x0200(ENABLE_VIRTUAL_TERMINAL_INPUT)
将配置标准输入流的方法复制一份来修改标准输出流,向标准输出流的ConsoleMode中添加0x0004(ENABLE_VIRTUAL_TERMINAL_PROCESSING)

然后make abd一下就ok了!

0x1 起因
最近被迫升级了Windows 10 1703~1709的版本,不升级的主要原因是资源管理器莫名其妙的留白,但是既然已经被迫升级了,倒也没有什么问题。

结果,1703版本能完美运行adb的powershell开始出现像CMD水土不服的恶劣症状,状况如下(本图为1703版本截图):

回退1703后一切正常。

于是,趁着周末,尝试修复问题。

0x2 解决思路
乱码字符主要内容为:
ESC [ 6 n
发现其为VT100标准中定义的一个指令。

经查询,Windows命令行已经支持VT100,其详细用法见:
https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

在查询到adb用来配置ConsoleMode的部分后,修改其支持VT100。
经检查,其使用的windows.h不包含此宏定义,因此需要使用数字而非宏定义。

posted on 2018-02-05 14:11  秃头秃  阅读(180)  评论(0编辑  收藏  举报