戰(zhàn))
WezTerm 配置指南colors 配色方案完整解析與實(shí)戰(zhàn)【免費(fèi)下載鏈接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust項(xiàng)目地址: https://gitcode.com/GitHub_Trending/we/wezterm導(dǎo)讀本文圍繞 WezTerm 配置系統(tǒng)中的一個(gè)核心入口 ——colors配置段展開(kāi)系統(tǒng)講解如何自定義終端調(diào)色板color palette包括前景/背景色、光標(biāo)色、ANSI 16 色、擴(kuò)展索引色、復(fù)制模式與快速選擇quick-select高亮色、選項(xiàng)卡欄配色等全部字段并涵蓋color_scheme、color_schemes、獨(dú)立 TOML 方案文件與動(dòng)態(tài)配色轉(zhuǎn)義序列等關(guān)聯(lián)機(jī)制。讀完本文你將掌握從零構(gòu)建一套個(gè)性化 WezTerm 配色的完整能力并理解其底層調(diào)色板模型與合并優(yōu)先級(jí)的工作原理。本文對(duì)應(yīng)配置入口為 colors 配置參考完整上下文見(jiàn) Colors Appearance。colors是什么調(diào)色板配置的入口在 WezTerm 中colors是一個(gè)用于指定終端顏色調(diào)色板color palette的 Lua 配置段。它決定了終端會(huì)話中文本、光標(biāo)、選區(qū)、分割線、滾動(dòng)條乃至各種 UI 覆蓋層overlay的默認(rèn)顏色。官方文檔將這一主題詳細(xì)展開(kāi)在 Colors Appearance 章節(jié)中。從源碼層面看colors段對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是config/src/color.rs中的Palette結(jié)構(gòu)體它被聲明為#[derive(FromDynamic, ToDynamic)]意味著 Lua 配置中的每一項(xiàng)都會(huì)被動(dòng)態(tài)映射為該結(jié)構(gòu)體字段。該結(jié)構(gòu)體完整羅列了colors段支持的字段包括foreground/background默認(rèn)文本色與背景色cursor_fg/cursor_bg/cursor_border光標(biāo)前景、背景與邊框色selection_fg/selection_bg選中文本的前景與背景色ansi基礎(chǔ) ANSI 8 色索引 0–7brights明亮版 ANSI 8 色索引 8–15indexed索引 16–255 的任意擴(kuò)展色映射tab_bar選項(xiàng)卡欄配色見(jiàn)后文scrollbar_thumb、split、visual_bell、compose_cursor復(fù)制模式、快速選擇、輸入選擇器與啟動(dòng)器launcher的標(biāo)簽/匹配高亮色。而在 config/src/config.rs 中colors被聲明為pub colors: OptionPalette與color_scheme、color_schemes共同參與最終調(diào)色板的解析?;A(chǔ)用法一個(gè)完整的colors配置示例在.wezterm.lua中你可以像下面這樣指定完整調(diào)色板。除 SVG/CSS3 顏色名稱如silver、black外也可以使用常見(jiàn)的#RRGGBB十六進(jìn)制寫法例如#000000等價(jià)于blacklocal wezterm require wezterm local config {} config.colors { -- 默認(rèn)文本顏色 foreground silver, -- 默認(rèn)背景顏色 background black, -- 當(dāng)光標(biāo)樣式為 Block 時(shí)覆蓋光標(biāo)所在單元格的背景色 cursor_bg #52ad70, -- 當(dāng)光標(biāo)所在單元格被光標(biāo)占據(jù)時(shí)覆蓋其文本顏色 cursor_fg black, -- 指定光標(biāo)樣式為 Block 時(shí)的邊框顏色 -- 或光標(biāo)樣式為 Bar / Underline 時(shí)的垂直或水平條顏色 cursor_border #52ad70, -- 選中文本的前景顏色 selection_fg black, -- 選中文本的背景顏色 selection_bg #fffacd, -- 滾動(dòng)條滑塊代表當(dāng)前視口的拇指條的顏色 scrollbar_thumb #222222, -- 窗格之間分割線的顏色 split #444444, ansi { black, maroon, green, olive, navy, purple, teal, silver, }, brights { grey, red, lime, yellow, blue, fuchsia, aqua, white, }, -- 調(diào)色板中 16 到 255 之間的任意顏色 indexed { [136] #af8700 }, -- 自 2022-03-19 版本20220319-142410-0fcdea07起 -- 當(dāng) IME、死鍵dead key或 leader key 正在處理輸入組合、暫存輸入時(shí) -- 將光標(biāo)切換為該顏色以便給出組合狀態(tài)的視覺(jué)提示。 compose_cursor orange, -- 復(fù)制模式copy_mode與快速選擇quick_select的顏色 -- 自 2022-08-07 版本20220807-113146-c2fee766起可用。 -- 在 copy_mode 中活動(dòng)文本的顏色是 -- 1. 若使用鼠標(biāo)額外選中了文本則為 copy_mode_active_highlight_* -- 2. 否則為 selection_*。 copy_mode_active_highlight_bg { Color #000000 }, -- 使用 AnsiColor 可指定 ANSI 調(diào)色板索引 0-15中的某個(gè)顏色 -- 可用的名稱包括 Black, Maroon, Green, Olive, Navy, -- Purple, Teal, Silver, Grey, Red, Lime, Yellow, -- Blue, Fuchsia, Aqua 或 White。 copy_mode_active_highlight_fg { AnsiColor Black }, copy_mode_inactive_highlight_bg { Color #52ad70 }, copy_mode_inactive_highlight_fg { AnsiColor White }, quick_select_label_bg { Color peru }, quick_select_label_fg { Color #ffffff }, quick_select_match_bg { AnsiColor Navy }, quick_select_match_fg { Color #ffffff }, -- 以下字段自 nightly 構(gòu)建起可用 input_selector_label_bg { AnsiColor Black }, input_selector_label_fg { Color #ffffff }, launcher_label_bg { AnsiColor Black }, launcher_label_fg { Color #ffffff }, } return config顏色值的多種寫法從十六進(jìn)制到 CSS 色彩函數(shù)HSL 色彩空間自 2022-01-01 版本20220101-133340-7edc5b5a起如果你更偏好 HSL 而非 RGB可以使用如下寫法config.colors { -- 第一個(gè)數(shù)字是色相hue單位為度取值范圍 0-360。 -- 第二個(gè)數(shù)字是飽和度saturation單位為百分比取值范圍 0-100。 -- 第三個(gè)數(shù)字是明度lightness單位為百分比取值范圍 0-100。 foreground hsl:235 100 50, }CSS 風(fēng)格顏色規(guī)范自 2022-03-19 版本20220319-142410-0fcdea07起顏色值還支持以下 CSS 風(fēng)格規(guī)范這些寫法來(lái)自對(duì)顏色解析的實(shí)現(xiàn)可參考 termwiz 顏色解析 與 顏色解析函數(shù)rgb(0,255,0) rgb(0% 100% 0%) rgb(0 255 0 / 100%) rgba(0,255,0,1) hsl(120,100%,50%) hsl(120deg 100% 50%) hsl(-240 100% 50%) hsl(-240deg 100% 50%) hsl(0.3333turn 100% 50%) hsl(133.333grad 100% 50%) hsl(2.0944rad 100% 50%) hsla(120,100%,50%,100%) hwb(120 0% 0%) hwb(480deg 0% 0% / 100%) hsv(120,100%,100%) hsv(120deg 100% 100% / 100%)可以看到rgb/rgba/hsl/hsla/hwb/hsv等函數(shù)形式均被支持角度單位既可以是deg也可以是turn、grad、rad。Alpha 通道的特殊行為selection_fg/selection_bg大多數(shù)場(chǎng)景下 alpha 值會(huì)被忽略但selection_fg和selection_bg例外config.colors { -- 讓選區(qū)文本顏色完全透明。 -- 完全透明時(shí)將使用當(dāng)前文本顏色。 selection_fg none, -- 為選區(qū)背景色設(shè)置 alpha。 -- 當(dāng) selection_bg 透明時(shí)它會(huì)與當(dāng)前單元格背景色進(jìn)行 alpha 混合 -- 而不是直接替換。 selection_bg rgba(50% 50% 50% 50%), }優(yōu)先級(jí)colors與color_scheme的關(guān)系理解 WezTerm 配色體系必須先厘清colors與color_scheme的優(yōu)先級(jí)關(guān)系color_scheme用于從內(nèi)置或自定義的命名配色方案中選擇一個(gè)整體方案在早期版本中二者是互斥的color_scheme優(yōu)先于colors段自 2022-09-03 版本20220903-194523-3bb1ed61起行為已改變color_scheme定義的方案作為基礎(chǔ)colors段中的任何顏色都會(huì)覆蓋方案中的對(duì)應(yīng)項(xiàng)。這一合并邏輯在源碼中有直接體現(xiàn)。在 config/src/config.rs 的配置解析流程中if let Some(scheme) cfg.color_scheme.as_ref() { match cfg.resolve_color_scheme() { None { /* 輸出錯(cuò)誤日志 */ } Some(p) { cfg.resolved_palette p.clone(); } } } if let Some(colors) cfg.colors { cfg.resolved_palette cfg.resolved_palette.overlay_with(colors); }而overlay_with定義于 config/src/color.rs它會(huì)逐字段檢查colors段中哪些字段為Some僅用這些字段覆蓋方案值其余字段沿用方案原值。換句話說(shuō)colors段可以只寫你想覆蓋的一兩個(gè)字段其余自動(dòng)繼承自color_scheme。需要注意的是如果使用 ssh 或 tls 域進(jìn)行多路復(fù)用multiplexing顏色方案由多路復(fù)用服務(wù)器端的配置文件控制因?yàn)檎{(diào)色板屬于終端仿真的屬性該狀態(tài)保存在多路復(fù)用服務(wù)器上。如果你需要合并/覆蓋內(nèi)置方案的顏色官方建議使用 wezterm.color.get_default_colors() 獲取默認(rèn)顏色后顯式合并示例見(jiàn) wezterm.get_builtin_color_schemes()其中還包含隨機(jī)選取配色方案、從內(nèi)置方案派生新方案等進(jìn)階用法。在.wezterm.lua中定義命名配色方案color_schemes如果你希望在自己的配置文件中維護(hù)多套配色而不是每次都填滿colors段可以把它放到color_schemes段中然后通過(guò)color_scheme引用。在wezterm.lua中定義的配色方案名稱優(yōu)先于所有其他配色方案colors段可用的全部設(shè)置在color_schemes段中同樣可用config.color_scheme Red Scheme config.color_schemes { [Red Scheme] { background red, }, [Blue Scheme] { background blue, }, }該配置項(xiàng)入口見(jiàn) color_schemes 配置參考。在獨(dú)立文件中定義配色方案TOML 與搜索路徑編寫 TOML 方案文件如果你想將配色方案拆分成獨(dú)立文件可以創(chuàng)建 TOML 格式的文件內(nèi)含[colors]段。倉(cāng)庫(kù)中內(nèi)置數(shù)百個(gè)配色方案的生成源數(shù)據(jù)位于 config/src/scheme_data.rs可作為編寫參考另外 sync-color-schemes 工具 展示了從 base16、Gogh、iTerm2、terminal.sexy 等來(lái)源同步方案的解析邏輯。一個(gè)典型的 TOML 方案文件形如該示例同時(shí)驗(yàn)證了indexed擴(kuò)展色的解析對(duì)應(yīng)源碼測(cè)試見(jiàn) config/src/color.rs[colors] foreground #005661 background #fef8ec cursor_bg #005661 cursor_border #005661 cursor_fg #ffffff selection_bg #cfe7f0 selection_fg #005661 ansi [ #8ca6a6, #e64100, #00b368, #fa8900, #0095a8, #ff5792, #00bdd6, #005661 ] brights [ #8ca6a6, #e5164a, #00b368, #b3694d, #0094f0, #ff5792, #00bdd6, #004d57 ] [colors.indexed] 52 #fbdada 88 #f6b6b6 22 #d6ffd6 28 #adffad 53 #feecf7 17 #e5dff6 23 #d8fdf6 58 #f4ffe0注意方案文件中ansi顏色是必需的 —— 從源碼看ColorSchemeFile::from_toml_value 會(huì)強(qiáng)制校驗(yàn)scheme.colors.ansi.is_some()缺失時(shí)會(huì)報(bào)錯(cuò)scheme is missing ANSI colors。方案的存放目錄官方建議在 POSIX 系統(tǒng)上將自定義方案放在$HOME/.config/wezterm/colors目錄在 Windows 系統(tǒng)上WezTerm 會(huì)在wezterm.exe所在目錄的同級(jí)colors目錄中搜索方案。若想使用其他位置則需要通過(guò)color_scheme_dirs設(shè)置指定要搜索的目錄列表詳見(jiàn) color_scheme_dirs 配置參考config.color_scheme_dirs { /some/path/to/my/color/schemes }在color_scheme_dirs列表中的文件里定義的配色方案名稱優(yōu)先于內(nèi)置配色方案。這一搜索加載邏輯對(duì)應(yīng)源碼中的compute_color_scheme_dirs與load_color_schemesconfig/src/config.rs默認(rèn)搜索路徑會(huì)追加各配置目錄下的colors子目錄Windows 上還會(huì)把wezterm.exe旁的colors目錄置于首位加載時(shí)只讀取.toml后綴文件文件名去掉后綴即作為方案名已存在的方案名會(huì)被跳過(guò)即先加載的優(yōu)先級(jí)更高。動(dòng)態(tài)顏色轉(zhuǎn)義序列運(yùn)行時(shí)切換配色WezTerm 支持通過(guò)轉(zhuǎn)義序列動(dòng)態(tài)修改顏色調(diào)色板。iTerm2-Color-Schemes 倉(cāng)庫(kù)的dynamic-colors目錄中包含大量 shell 腳本可以即時(shí)切換配色方案。你可以在自己的腳本中以編程方式改變終端外觀$ git clone iTerm2-Color-Schemes 倉(cāng)庫(kù)地址 $ cd iTerm2-Color-Schemes/dynamic-colors $ for scheme in *.sh ; do ; echo $scheme ; \ bash $scheme ; ../tools/screenshotTable.sh; sleep 0.5; done這些腳本利用 OSC 轉(zhuǎn)義序列如OSC 10/OSC 11設(shè)置前景/背景色向終端下發(fā)調(diào)色板更新WezTerm 的轉(zhuǎn)義序列解析器實(shí)現(xiàn)在 wezterm-escape-parser 中。倉(cāng)庫(kù)內(nèi)的演示視頻 docs/screenshots/wezterm-dynamic-colors.mp4 展示了逐套方案輪換的效果。選項(xiàng)卡欄配色tab_bar結(jié)構(gòu)colors段中的tab_bar字段用于控制選項(xiàng)卡欄tab bar的顏色。選項(xiàng)卡欄有兩種模式默認(rèn)的原生外觀fancy tab bar和復(fù)古風(fēng)格retro tab bar二者配置大體相似但細(xì)節(jié)略有不同。相關(guān)開(kāi)關(guān)包括use_fancy_tab_bar選擇選項(xiàng)卡欄樣式enable_tab_bar是否啟用選項(xiàng)卡欄hide_tab_bar_if_only_one_tab僅有一個(gè)選項(xiàng)卡時(shí)隱藏選項(xiàng)卡欄tab_bar_at_bottom將選項(xiàng)卡欄放在窗口底部tab_max_width復(fù)古模式下單個(gè)選項(xiàng)卡的最大寬度以單元格為單位。原生Fancy選項(xiàng)卡欄外觀以下選項(xiàng)影響 fancy 選項(xiàng)卡欄其中窗口標(biāo)題欄配色通過(guò)window_frame配置config.window_frame { -- 選項(xiàng)卡欄使用的字體。 -- 默認(rèn)是 Roboto Bold該字體已隨 wezterm 捆綁發(fā)布。 -- 此處選定的字體會(huì)自動(dòng)追加主字體設(shè)置以繼承你可能使用過(guò)的回退字體。 font wezterm.font { family Roboto, weight Bold }, -- 選項(xiàng)卡欄中字體的大小。 -- 在 Windows 上默認(rèn) 10.0在其他系統(tǒng)上默認(rèn) 12.0。 font_size 12.0, -- 窗口聚焦時(shí)選項(xiàng)卡欄的整體背景色 active_titlebar_bg #333333, -- 窗口未聚焦時(shí)選項(xiàng)卡欄的整體背景色 inactive_titlebar_bg #333333, } config.colors { tab_bar { -- 非活動(dòng)選項(xiàng)卡邊緣/分隔線的顏色 inactive_tab_edge #575757, }, }復(fù)古Retro選項(xiàng)卡欄外觀config.colors { tab_bar { -- 窗口頂部那條色帶的顏色 -- 使用 fancy 選項(xiàng)卡欄時(shí)不生效 background #0b0022, -- 活動(dòng)選項(xiàng)卡是窗口中擁有焦點(diǎn)的選項(xiàng)卡 active_tab { -- 選項(xiàng)卡背景區(qū)域的顏色 bg_color #2b2042, -- 選項(xiàng)卡文本的顏色 fg_color #c0c0c0, -- 指定該選項(xiàng)卡標(biāo)簽的強(qiáng)度Half、Normal 或 Bold。 -- 默認(rèn)是 Normal intensity Normal, -- 指定該選項(xiàng)卡標(biāo)簽的下劃線None、Single 或 Double。 -- 默認(rèn)是 None underline None, -- 是否以斜體渲染該選項(xiàng)卡文本true/false。默認(rèn) false。 italic false, -- 是否以刪除線渲染該選項(xiàng)卡文本。默認(rèn) false。 strikethrough false, }, -- 非活動(dòng)選項(xiàng)卡是不具有焦點(diǎn)的選項(xiàng)卡 inactive_tab { bg_color #1b1032, fg_color #808080, -- 上面 active_tab 中列出的相同選項(xiàng)同樣適用于 inactive_tab。 }, -- 鼠標(biāo)指針懸停在非活動(dòng)選項(xiàng)卡上時(shí)可以配置一些替代樣式 inactive_tab_hover { bg_color #3b3052, fg_color #909090, italic true, -- 上面 active_tab 中列出的相同選項(xiàng)同樣適用于 inactive_tab_hover。 }, -- 用于創(chuàng)建新選項(xiàng)卡的新建選項(xiàng)卡按鈕 new_tab { bg_color #1b1032, fg_color #808080, -- 上面 active_tab 中列出的相同選項(xiàng)同樣適用于 new_tab。 }, -- 鼠標(biāo)懸停在新建選項(xiàng)卡按鈕上時(shí)的替代樣式 new_tab_hover { bg_color #3b3052, fg_color #909090, italic true, -- 上面 active_tab 中列出的相同選項(xiàng)同樣適用于 new_tab_hover。 }, }, }從源碼看tab_bar對(duì)應(yīng) TabBarColors 結(jié)構(gòu)體每個(gè)選項(xiàng)卡項(xiàng)對(duì)應(yīng)TabBarColor包含intensity、underline、italic、strikethrough、bg_color、fg_color其as_cell_attributes()方法會(huì)把配色轉(zhuǎn)換為渲染用單元格屬性config/src/color.rs。這些默認(rèn)值如非活動(dòng)選項(xiàng)卡默認(rèn)#333333背景、#808080文本同樣在該文件中以default_inactive_tab等函數(shù)定義。相關(guān) API 與進(jìn)一步閱讀wezterm.color.get_default_colors()獲取默認(rèn)顏色用于顯式合并覆蓋wezterm.get_builtin_color_schemes()獲取內(nèi)置配色方案列表包含隨機(jī)選取與派生方案的進(jìn)階示例wezterm.color.parse()顏色字符串解析wezterm.color.get_builtin_schemes()獲取內(nèi)置方案數(shù)據(jù)內(nèi)置配色方案目錄與截圖數(shù)據(jù)docs/colorschemes/data.json內(nèi)置方案生成源config/src/scheme_data.rs調(diào)色板數(shù)據(jù)結(jié)構(gòu)與合并邏輯config/src/color.rs、config/src/config.rs。小結(jié)colors配置段是 WezTerm 個(gè)性化外觀體系的核心地基。通過(guò)它你可以精確控制終端 16 色 ANSI 基礎(chǔ)色、擴(kuò)展索引色、光標(biāo)、選區(qū)、分割線、滾動(dòng)條、復(fù)制模式/快速選擇高亮以及選項(xiàng)卡欄等幾乎全部界面顏色配合color_scheme與color_schemes可以分層復(fù)用配色獨(dú)立 TOML 方案文件加上color_scheme_dirs則便于管理和分發(fā)你自己的主題。理解overlay_with的逐字段合并語(yǔ)義就能用最少的配置寫出風(fēng)格統(tǒng)一且可維護(hù)的配色體系?!久赓M(fèi)下載鏈接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust項(xiàng)目地址: https://gitcode.com/GitHub_Trending/we/wezterm創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考