Themes
pi 可以建立主題。要求它為你的設定建置一個。
主題是定義 TUI 顏色的 JSON 檔案。
目錄
位置
Pi 從以下位置載入主題:
- 內建:
dark、light - 全域:
~/.pi/agent/themes/*.json - 專案:
.pi/themes/*.json(僅在專案被信任後) - 包:
themes/目錄或package.json中的pi.themes條目 - 設定:包含檔案或目錄的
themes陣列 - CLI:
--theme <path>(可重複)
使用 --no-themes 停用探索。
選擇主題
透過 /settings 或 settings.json 選擇主題:
{
"theme": "my-theme"
}首次執行階段,pi 會檢測你的終端機背景並預設為 dark 或 light。
建立自訂主題
- 建立主題檔案:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json- 使用所有必需的顏色定義主題(參見Color Tokens):
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "my-theme",
"vars": {
"primary": "#00aaff",
"secondary": 242
},
"colors": {
"accent": "primary",
"border": "primary",
"borderAccent": "#00ffff",
"borderMuted": "secondary",
"success": "#00ff00",
"error": "#ff0000",
"warning": "#ffff00",
"muted": "secondary",
"dim": 240,
"text": "",
"thinkingText": "secondary",
"selectedBg": "#2d2d30",
"scrollbarThumb": "#555566",
"searchMatchBg": "#2d2d30",
"searchMatchText": "",
"userMessageBg": "#2d2d30",
"userMessageText": "",
"customMessageBg": "#2d2d30",
"customMessageText": "",
"customMessageLabel": "primary",
"toolPendingBg": "#1e1e2e",
"toolSuccessBg": "#1e2e1e",
"toolErrorBg": "#2e1e1e",
"toolTitle": "primary",
"toolOutput": "",
"mdHeading": "#ffaa00",
"mdLink": "primary",
"mdLinkUrl": "secondary",
"mdCode": "#00ffff",
"mdCodeBlock": "",
"mdCodeBlockBorder": "secondary",
"mdQuote": "secondary",
"mdQuoteBorder": "secondary",
"mdHr": "secondary",
"mdListBullet": "#00ffff",
"toolDiffAdded": "#00ff00",
"toolDiffRemoved": "#ff0000",
"toolDiffContext": "secondary",
"syntaxComment": "secondary",
"syntaxKeyword": "primary",
"syntaxFunction": "#00aaff",
"syntaxVariable": "#ffaa00",
"syntaxString": "#00ff00",
"syntaxNumber": "#ff00ff",
"syntaxType": "#00aaff",
"syntaxOperator": "primary",
"syntaxPunctuation": "secondary",
"thinkingOff": "secondary",
"thinkingMinimal": "primary",
"thinkingLow": "#00aaff",
"thinkingMedium": "#00ffff",
"thinkingHigh": "#ff00ff",
"thinkingXhigh": "#ff0000",
"thinkingMax": "#ff0088",
"bashMode": "#ffaa00"
}
}- 透過
/settings選擇主題。
熱重新載入: 當你編輯目前活動的自訂主題檔案時,pi 會自動重新載入它以獲得即時視覺反饋。
主題格式
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "my-theme",
"vars": {
"blue": "#0066cc",
"gray": 242
},
"colors": {
"accent": "blue",
"muted": "gray",
"text": "",
...
}
}name是必需的,必須是唯一的,並且不能包含/。vars是選用的。在這裡定義可重複使用的顏色,然後在colors中引用它們。colors必須定義所有 51 個必需的標記。thinkingMax、scrollbarThumb及兩個搜尋醒目提示標記都是選用的,並使用下文列出的回退值。
$schema 欄位支援編輯器自動完成和驗證。
顏色標記
每個主題必須定義所有 51 個必需的顏色標記。選用標記用於相容現有主題:thinkingMax 回退到 thinkingXhigh,scrollbarThumb 和 searchMatchBg 回退到 selectedBg,searchMatchText 回退到 text。其他搜尋相符項目會在 searchMatchBg 上使用帶底線的 searchMatchText;目前相符項目則會反轉這組前景色和背景色,並使用粗體。
核心 UI(11 種顏色)
| 代幣 | 目的 |
|---|---|
accent |
主要強調(徽標、所選專案、游標) |
border |
正常邊框 |
borderAccent |
突出顯示的邊框 |
borderMuted |
微妙的邊界(編輯) |
success |
成功狀態 |
error |
錯誤狀態 |
warning |
警告狀態 |
muted |
次要文字 |
dim |
第三級文字 |
text |
預設文字(通常為 "") |
thinkingText |
thinking block 文字 |
背景和內容(11 個必需,3 個選用)
| 代幣 | 目的 |
|---|---|
selectedBg |
選定的線條背景 |
scrollbarThumb |
全螢幕滾動條拇指背景;選用,回落到 selectedBg |
searchMatchBg |
文字記錄搜尋相符項目的背景和目前相符項目的文字;選用,回退到 selectedBg |
searchMatchText |
文字記錄搜尋相符項目的文字和目前相符項目的背景;選用,回退到 text |
userMessageBg |
使用者留言背景 |
userMessageText |
使用者訊息文字 |
customMessageBg |
擴充訊息背景 |
customMessageText |
擴充訊息文字 |
customMessageLabel |
擴充訊息標籤 |
toolPendingBg |
工具箱(待定) |
toolSuccessBg |
工具箱(成功) |
toolErrorBg |
工具箱(錯誤) |
toolTitle |
工具標題 |
toolOutput |
工具輸出文字 |
Markdown(10 種顏色)
| 代幣 | 目的 |
|---|---|
mdHeading |
標題 |
mdLink |
連結文字 |
mdLinkUrl |
連結網址 |
mdCode |
inline code |
mdCodeBlock |
程式碼塊內容 |
mdCodeBlockBorder |
程式碼塊圍欄 |
mdQuote |
塊引用文字 |
mdQuoteBorder |
塊引用邊框 |
mdHr |
水平尺 |
mdListBullet |
列出項目符號 |
工具diff(3 種顏色)
| 代幣 | 目的 |
|---|---|
toolDiffAdded |
已新增線路 |
toolDiffRemoved |
刪除的行 |
toolDiffContext |
上下文線 |
語法醒目提示(9 種顏色)
| 代幣 | 目的 |
|---|---|
syntaxComment |
評論 |
syntaxKeyword |
關鍵詞 |
syntaxFunction |
函式名稱 |
syntaxVariable |
變數 |
syntaxString |
弦樂 |
syntaxNumber |
數字 |
syntaxType |
類型 |
syntaxOperator |
運營商 |
syntaxPunctuation |
標點 |
思考等級邊框(6 個必需,1 個選用)
編輯器邊框顏色表示思考等級(視覺層次從微妙到突出):
| 代幣 | 目的 |
|---|---|
thinkingOff |
思考 |
thinkingMinimal |
最少的思考 |
thinkingLow |
低思考等級 |
thinkingMedium |
中等思考等級 |
thinkingHigh |
高思想 |
thinkingXhigh |
超高思考等級 |
thinkingMax |
最大限度的思考;選用,回落到 thinkingXhigh |
Bash 模式(1 種顏色)
| 代幣 | 目的 |
|---|---|
bashMode |
bash 模式下的編輯器邊框(! 前綴) |
HTML 匯出(選用)
export 部分控制 /export HTML 輸出的顏色。如果省略,則顏色源自 userMessageBg。
{
"export": {
"pageBg": "#18181e",
"cardBg": "#1e1e24",
"infoBg": "#3c3728"
}
}顏色值
支援四種格式:
| 格式 | 例子 | 描述 |
|---|---|---|
| 十六進制 | "#ff0000" |
6 位十六進制 RGB |
| 256 色 | 39 |
xterm 256 色調色板索引 (0-255) |
| 多變的 | "primary" |
引用 vars 條目 |
| 預設 | "" |
終端機的預設顏色 |
256 色調色板
0-15:基本 ANSI 顏色(取決於終端機)16-231:6×6×6 RGB 立方體(16 + 36×R + 6×G + B,其中 R、G、B 為 0-5)232-255:灰度漸變
終端機相容性
Pi 使用 24 位 RGB 顏色。大多數現代終端機都支援此功能(iTerm2、Kitty、WezTerm、Windows Terminal、VS Code)。對於僅支援 256 色的舊終端機,pi 會回落到最接近的近似值。
檢查真彩色支援:
echo $COLORTERM # Should output "truecolor" or "24bit"提示
深色終端機: 使用明亮、飽和且對比度較高的顏色。
燈終端機: 使用較暗、柔和的顏色和較低的對比度。
色彩和諧: 從基礎調色板(Nord、Gruvbox、Tokyo Night)開始,在 vars 中定義它,並一致地引用。
測試: 使用不同的訊息類型、工具狀態、Markdown 內容和長換行文字檢查你的主題。
VS Code: 將 terminal.integrated.minimumContrastRatio 設定為 1 以獲得準確的顏色。
範例
查看內建主題: