我首先给出mosh的源代码地址,这种事情建议自己读源代码自己跟踪程序行为比直接问直接获取一个答案更有趣。 实际上mosh的实现用了 ANSI 转义字符,关于 ANSI 转义字符这个概念,可以在网上找到很多介绍,我就不再赘述了,我直接给出一个下划线的例子: #include <stdio.h> int main(const int argc, const char * argv[], const char * envp[]) { printf("\033[0;4mabc\n"); return 0; } 这段程序编译之后运行可以打印出一行带有下划线的字符串abc。 mosh具体的代码在src/terminal/terminalframebuffer.cc这个文件里实现的Renditions::sgr()方法,如果underlined被置位,那么ret实际上就会返回含有类似\033[0;4m这样的字符串,这样的字符串在终端打印出来的时候就会表现为在指定部分有下划线。
我首先给出
mosh
的源代码地址,这种事情建议自己读源代码自己跟踪程序行为比直接问直接获取一个答案更有趣。实际上
mosh
的实现用了 ANSI 转义字符,关于 ANSI 转义字符这个概念,可以在网上找到很多介绍,我就不再赘述了,我直接给出一个下划线的例子:这段程序编译之后运行可以打印出一行带有下划线的字符串
abc
。mosh
具体的代码在src/terminal/terminalframebuffer.cc这个文件里实现的Renditions::sgr()
方法,如果underlined
被置位,那么ret
实际上就会返回含有类似\033[0;4m
这样的字符串,这样的字符串在终端打印出来的时候就会表现为在指定部分有下划线。