ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CMake ccmake 终端配色定制完全指南:CCMAKE_COLORS 环境变量详解

CMake ccmake 终端配色定制完全指南:CCMAKE_COLORS 环境变量详解 构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载CCMAKE_COLORS 是 CMake 内置的 curses 图形化配置界面ccmake的终端配色环境变量自 CMake 3.18 起支持它让开发者可以按缓存变量类型自定义界面中各类条目在终端里的显示颜色。本文以 Help/envvar/CCMAKE_COLORS.rst 为骨架结合 Source/CursesDialog 下 cmCursesColor 及各类控件小部件的源码实现系统讲解该变量的语法规则、颜色取值、底层解析逻辑与实战配置方法读完你即可为自己的 ccmake 界面定制一套清晰可辨的配色方案。CCMAKE_COLORS 是什么ccmake是 CMake 提供的基于 curses 的交互式缓存配置界面对应可执行文件源码位于 Source/CursesDialog/ccmake.cxx。当它在支持颜色的终端中运行时会为不同类型的缓存条目赋予不同的前景色便于快速区分字符串值STRING路径值FILEPATH带候选选项的值choices开启/关闭的布尔值BOOLCCMAKE_COLORS环境变量正是用来控制这些颜色的入口。它由 CMake 3.18 版本引入在 Help/release/3.18.rst 的发布说明中记录为ccmake(1) learned to read a CCMAKE_COLORS environment variable。需要强调的是该变量只在ccmake界面中生效对命令行形式的cmake配置过程没有影响并且只对支持颜色的终端有意义HasColors()会先检查 curses 是否支持颜色详见下文源码分析。语法规则沿用 LS_COLORS 的惯例CCMAKE_COLORS的语法与 Unix 环境中广为人知的LS_COLORS保持一致一系列由冒号:分隔的键值key/value对。例如官方文档给出的完整示例CCMAKE_COLORSs39:p220:c207:n196:y46键Key缓存变量类型标识每个键是一个单字母对应一种 CMake 缓存变量类型键对应缓存变量类型说明sSTRING字符串类型条目pFILEPATH文件/目录路径类型条目cchoices带有关联候选选项列表的值yBOOL真值值为类似ON、YES等真值形式的布尔条目nBOOL假值值为类似OFF、NO等假值形式的布尔条目这五个键与源码中的五个颜色对color pair一一对应。在 Source/CursesDialog/cmCursesColor.h 中定义了枚举BoolOff 1, // 对应键 nBOOL 假值 BoolOn, // 对应键 yBOOL 真值 String, // 对应键 sSTRING Path, // 对应键 pFILEPATH Choice // 对应键 cchoices其中编号 0 被保留给默认颜色对实际颜色从 1 开始。值Value颜色编号每个值是一个整数指定要使用的颜色0表示黑色官方文档特别提示你大概不想用它其余数值由你的终端颜色支持能力决定——大多数彩色终端至少支持 8 或 16 色部分支持多达 256 色256 色终端的颜色编号通常与 xterm 256 色调色板一致而前 16 色可能与原始的 CGA 调色板吻合许多现代终端模拟器还允许用户自行配置前 16 色的具体色值。这也解释了官方示例中各值的取法s39、p220、c207、n196、y46都是针对 256 色终端挑选的编号例如n196属于高亮的红色系、y46属于亮绿色系在 16 色终端上这些编号会被 curses 按自身调色板解释。源码级解析原理配色变量的解析逻辑全部集中在 Source/CursesDialog/cmCursesColor.cxx 中理解它有助于把握该变量的全部行为细节。解析入口与缓存GetColor(char id, short fallback)使用static局部变量env一个std::unordered_mapchar, short缓存解析结果并且只在第一次调用时通过getenv(CCMAKE_COLORS)读取环境变量后续调用直接查表避免重复解析。关键解析规则对应文档中校验极少的说法对照源码 cmCursesColor.cxx可以确认以下几点行为键的大小写不敏感键字符经过cmsysString_toupper(*v)统一转成大写再存入映射因此S39与s39效果相同。按冒号切分键值对strchr(v, :)定位下一个冒号逐个切分格式为键值循环条件要求第二个字符是。解析为整数值部分通过atoi(buffer)转成整数。宽松的错误容忍0会被丢弃if (c c COLORS)中的c 短路超过终端支持上限COLORS的值会被静默忽略超长字段会直接中止解析。这就是文档所说的对坏颜色或坏语法只做相当少的最小化检查——错误不会导致程序崩溃只是该条目回退到默认颜色。默认配色与回退逻辑InitColors()cmCursesColor.cxx在支持颜色时依次调用start_color()、use_default_colors()然后用init_pair初始化五个颜色对。每个颜色对都调用GetColor并携带一个 fallback 默认值颜色对键默认颜色fallback对应条目BoolOffNCOLOR_RED红BOOL 假值BoolOnYCOLOR_GREEN绿BOOL 真值StringSCOLOR_CYAN青STRINGPathPCOLOR_YELLOW黄FILEPATHChoiceCCOLOR_MAGENTA品红choices也就是说未设置CCMAKE_COLORS时ccmake 会使用上面这套默认配色设置了但某个键缺失或值无效时仅该键回退到默认色其余键仍按配置生效。颜色能力探测HasColors()cmCursesColor.cxx受编译期宏HAVE_CURSES_USE_DEFAULT_COLORS保护在支持use_default_colors()的 curses 实现上返回has_colors()的探测结果。若终端不支持颜色或编译时未启用该特性所有控件将回退到A_NORMAL/A_STANDOUT的高亮显示风格CCMAKE_COLORS将不产生任何效果。各缓存条目类型的着色实现源码中不同类型条目通过各自控件小部件的构造函数将对应颜色对应用到表单字段上set_field_fore/set_field_back与文档中的键定义一一对应布尔条目cmCursesBoolWidget.cxx 中值为ON时使用COLOR_PAIR(cmCursesColor::BoolOn)对应键y值为OFF时使用BoolOff对应键n切换值时会即时刷新颜色。字符串条目cmCursesStringWidget.cxx 使用COLOR_PAIR(cmCursesColor::String)对应键s。路径条目cmCursesPathWidget.cxx 使用COLOR_PAIR(cmCursesColor::Path)对应键p文件路径条目 cmCursesFilePathWidget.cxx 继承自路径小部件同样归属该键。选项条目cmCursesOptionsWidget.cxx 使用COLOR_PAIR(cmCursesColor::Choice)对应键c用于显示带候选列表的条目。所有这些小部件在检测到cmCursesColor::HasColors()为假时都会统一退回到A_NORMAL/A_STANDOUT组合保证在纯色终端上仍可辨识。实战配置示例终端中临时设置在支持 256 色或至少 16 色的终端里启动 ccmake 前导出该变量即可CCMAKE_COLORSs39:p220:c207:n196:y46 ccmake /path/to/source这条示例的含义是s39STRING 条目使用 39 号颜色蓝色系p220FILEPATH 条目使用 220 号颜色琥珀/黄色系c207choices 条目使用 207 号颜色洋红/粉色系n196假值 BOOL 使用 196 号颜色亮红警示感强y46真值 BOOL 使用 46 号颜色亮绿。写入 shell 配置文件持久生效想让配色对所有终端会话生效可将变量加入 shell 的配置文件# ~/.bashrc 或 ~/.zshrc export CCMAKE_COLORSs39:p220:c207:n196:y46之后在任意终端运行ccmake即可看到自定义配色。与 LS_COLORS 的异同两者语法同源冒号分隔的键值对但语义完全不同LS_COLORS的键描述文件类型目录、符号链接、可执行文件等而CCMAKE_COLORS的键描述的是 CMake 缓存变量的类型s/p/c/y/n五种。如果你熟悉LS_COLORS可以无缝迁移书写习惯但键集合与默认值都需要按上文表格重新对应。常见问题排查现象可能原因与建议设置了变量但颜色没变化终端不支持颜色HasColors()返回 false或编译的 curses 库不含use_default_colors支持或当前使用的 CMake 版本早于 3.18某个颜色编号失效编号大于终端支持的COLORS上限例如 8 色终端上用 220源码会静默忽略并回退默认色写错键名或语法错误解析器只做最小化检查错误键会被忽略其余正确键仍生效不会报错中断颜色值想用 00表示黑色且会被解析器丢弃效果等同于未配置该键小结CCMAKE_COLORS以极低的配置成本为ccmake提供了细粒度的终端配色控制仿LS_COLORS的冒号键值对语法 五种缓存变量类型键 整数颜色编号加上源码中宽松解析、默认回退的稳健设计使其在任何环境下都不会破坏界面可用性。从 cmCursesColor.cxx 的解析实现到各控件小部件的着色挂接整个链路清晰完整——如果你需要进一步研究 ccmake 的界面实现Source/CursesDialog 目录下的控件源码是绝佳的起点。赞分享构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载相关推荐eza 颜色定制完全指南EZA_COLORS 与 LS_COLORS 环境变量详解eza 颜色定制完全指南EZA_COLORS 与 LS_COLORS 环境变量详解 本指南以 man/eza_colors.5.md https://linkCLI开发工具ZeroTermux 终端色彩定制指南dircolors 命令与 LS_COLORS 环境变量完全解析ZeroTermux 终端色彩定制指南dircolors 命令与 LS_COLORS 环境变量完全解析 导读 在 ZeroTermux 这类运行于 Andro移动开发开发工具eza 颜色与主题定制完全指南EZA_COLORS 环境变量与 theme.yml 详解eza 颜色与主题定制完全指南EZA_COLORS 环境变量与 theme.yml 详解 eza现代版 ls 在终端输出中对文件名、权限位、大小、日期、GCLI开发工具上一篇react-admin 软删除系列useHardDelete Hook 彻底删除已删记录实战指南下一篇non_decomp 实战指南用 logit-adjusted 成本敏感损失训练过参数化模型优化不可分解目标NeurIPS 2021 代码复现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表