DaRemote ssh终端模拟器反色问题调试记录

起因

用户报告在ssh终端下粘贴时显示不出内容。试了一下能复现,但为修复这个问题昨天还是差不多花了一整天时间。

处理

先是花了一个小时研究 bracketed paste mode,发现其实没关系。又花了差不多三小时找到问题是 csi 7m, inverse mode 处理的问题,改了一行代码后搞定。

隐藏问题

搞定后发现在Last login提示符之间会显示一个反色的%,而且是所有的服务器都会显示这个字符。又足足花了两个小时 分析返回的字节,

[27, 91, 49, 109, 27, 91, 55, 109, 37, 27, 91, 50, 55, 109, 27, 91, 49, 109, 27, 91, 48, 109]
esc [ 1 m esc [ 7 m % esc [ 2 7 m esc [ 1 m esc [ 0 m

[32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 13, 32, 13]

[13, 27, 91, 48, 109, 27, 91, 50, 55, 109, 27, 91, 50, 52, 109, 27, 91, 74, 27, 91, 51, 50, 109, 126, 27, 91, 48, 49, 59, 51, 52, 109, 32, 27, 91, 48, 49, 59, 51, 53, 109, 187, 27, 91, 48, 48, 109, 32]
esc [ 0 m esc [ 2 7 m esc [ 2 4 m esc [ J esc [ 3 2 m ~ esc [ 0 1 ; 3 4 m " " esc [ 0 1 ; 3 5 m esc [ 0 0 m
[27, 91, 75]
esc [ K
[27, 91, 63, 49, 104, 27, 61, 27, 91, 63, 50, 48, 48, 52, 104]
esc [ ? 1 h esc = esc [ ? 2 0 0 4 h

最后的 esc[?2004h就是开启bracketed paste mode。感觉都没有问题啊,esc[Jesc[K也都是往后删除,删不了前面的 %

转折

陷入困境的时候突然意识到,我所有的服务器都是用的zshchsh -s /bin/bash换成bash果然没有问题!

最后查到资料只需要在.zshrc中设置unsetopt prompt_cr prompt_sp 即可不显示 %。

又花两小时研究该设置,因为即使不在.zshrc中去掉这两个选项,其他终端模拟器也不会显示%。不过没什么收获,也许是什么特殊处理,有时间再研究。

反思

回顾这个调试过程,其实粘贴不显示的问题一开始就意识到可能是反色的原因,但是思维定势用了一个错误的方法:既然深色背景浅色文字不显示,那换成浅色背景深色文字试试。😭