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不包含此宏定义,因此需要使用数字而非宏定义。