ANSI码控制终端字体特效

 

ANSI码控制终端字体特效

c/cpp

有时候会需要终端log出来的信息,即文字产生各种各样的特效,如不同的颜色,不同的背景色,闪烁等特效。此时就需要使用ANSI码。

具体的控制码见资料1,对于控制码的总结已经很完善了,而且给了十分便捷的使用方法。

CMake

CMakeLists.txt 在 configure 过程,用户也能使用 message 来log一些信息,此时也可以修改字体特效。

具体如何使用参考资料2

这里贴出来,其实最主要的变化就是如何表示 escape(ESC) 的 ASCII 码

if(NOT WIN32)
  string(ASCII 27 Esc)
  set(ColourReset "${Esc}[m")
  set(ColourBold  "${Esc}[1m")
  set(Red         "${Esc}[31m")
  set(Green       "${Esc}[32m")
  set(Yellow      "${Esc}[33m")
  set(Blue        "${Esc}[34m")
  set(Magenta     "${Esc}[35m")
  set(Cyan        "${Esc}[36m")
  set(White       "${Esc}[37m")
  set(BoldRed     "${Esc}[1;31m")
  set(BoldGreen   "${Esc}[1;32m")
  set(BoldYellow  "${Esc}[1;33m")
  set(BoldBlue    "${Esc}[1;34m")
  set(BoldMagenta "${Esc}[1;35m")
  set(BoldCyan    "${Esc}[1;36m")
  set(BoldWhite   "${Esc}[1;37m")
endif()

message("This is normal")
message("${Red}This is Red${ColourReset}")
message("${Green}This is Green${ColourReset}")
message("${Yellow}This is Yellow${ColourReset}")
message("${Blue}This is Blue${ColourReset}")
message("${Magenta}This is Magenta${ColourReset}")
message("${Cyan}This is Cyan${ColourReset}")
message("${White}This is White${ColourReset}")
message("${BoldRed}This is BoldRed${ColourReset}")
message("${BoldGreen}This is BoldGreen${ColourReset}")
message("${BoldYellow}This is BoldYellow${ColourReset}")
message("${BoldBlue}This is BoldBlue${ColourReset}")
message("${BoldMagenta}This is BoldMagenta${ColourReset}")
message("${BoldCyan}This is BoldCyan${ColourReset}")
message("${BoldWhite}This is BoldWhite\n\n${ColourReset}")

问题:vscode终端的字体不会闪烁

当笔者设置了字体闪烁之后,发现在vscode的自带终端上怎么也无法显示,ubuntu自带的终端是可以正常闪烁设置好的文字的。经过一番搜索,发现了资料3

简单来说就是vscode的终端是基于 xterm.js 开发的,总之截止笔者成文的2023/12/25,仍旧不支持。相应的issue都close了….

#

参考资料

  1. 终端字体打印特效 (设置封装)
  2. How to make colorized message() with CMake?