Tema
pi dapat membuat tema. Mintalah untuk membuatkannya untuk pengaturan Anda.
Tema adalah file JSON yang menentukan warna untuk TUI.
Daftar isi
Lokasi
Pi memuat tema dari:
- Bawaan:
dark,light - Global:
~/.pi/agent/themes/*.json - Proyek:
.pi/themes/*.json(hanya setelah proyek dipercaya) - Paket:
themes/direktori ataupi.themesentri dipackage.json - Pengaturan:
themesarray dengan file atau direktori - CLI:
--theme <path>(dapat diulang)
Nonaktifkan penemuan dengan --no-themes.
Memilih Tema
Pilih tema melalui /settings atau di settings.json:
{
"theme": "my-theme"
}Saat pertama kali dijalankan, pi mendeteksi latar belakang terminal Anda dan defaultnya adalah dark atau light.
Membuat Tema Kustom
- Buat file tema:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json- Tentukan tema dengan semua warna yang diperlukan (lihat 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"
}
}- Pilih tema melalui
/settings.
Hot reload: Saat Anda mengedit file tema khusus yang sedang aktif, pi memuat ulang secara otomatis untuk mendapatkan masukan visual langsung.
Format Tema
{
"$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": "",
...
}
}namewajib diisi, harus unik, dan tidak boleh mengandung/.varsadalah opsional. Tentukan warna yang dapat digunakan kembali di sini, lalu referensikan dicolors.colorsharus mendefinisikan seluruh 51 token yang diperlukan.thinkingMax,scrollbarThumb, dan dua token sorotan pencarian bersifat opsional serta menggunakan fallback yang tercantum di bawah.
Bidang $schema mengaktifkan pelengkapan dan validasi otomatis editor.
Token Warna
Setiap tema harus menentukan 51 token warna yang diperlukan. Token opsional menjaga kompatibilitas dengan tema yang ada: thinkingMax menggunakan thinkingXhigh, scrollbarThumb dan searchMatchBg menggunakan selectedBg, serta searchMatchText menggunakan text sebagai fallback. Kecocokan pencarian lain memakai searchMatchText pada searchMatchBg dengan garis bawah; kecocokan saat ini membalik pasangan latar depan/latar belakang tersebut dan memakai teks tebal.
UI Inti (11 warna)
| Token | Tujuan |
|---|---|
accent |
Aksen utama (logo, item yang dipilih, kursor) |
border |
Perbatasan biasa |
borderAccent |
Perbatasan yang disorot |
borderMuted |
Batas halus (editor) |
success |
Status sukses |
error |
Status kesalahan |
warning |
Status peringatan |
muted |
Teks sekunder |
dim |
Teks tersier |
text |
Teks default (biasanya "") |
thinkingText |
Teks blok berpikir |
Latar Belakang & Konten (11 wajib, 3 opsional)
| Token | Tujuan |
|---|---|
selectedBg |
Latar belakang garis yang dipilih |
scrollbarThumb |
Latar belakang jempol scrollbar layar penuh; opsional, kembali ke selectedBg |
searchMatchBg |
Latar belakang kecocokan pencarian transkrip dan teks kecocokan saat ini; opsional, kembali ke selectedBg |
searchMatchText |
Teks kecocokan pencarian transkrip dan latar belakang kecocokan saat ini; opsional, kembali ke text |
userMessageBg |
Latar belakang pesan pengguna |
userMessageText |
Teks pesan pengguna |
customMessageBg |
Latar belakang pesan ekstensi |
customMessageText |
Teks pesan ekstensi |
customMessageLabel |
Label pesan ekstensi |
toolPendingBg |
Kotak alat (menunggu keputusan) |
toolSuccessBg |
Kotak alat (sukses) |
toolErrorBg |
Kotak alat (kesalahan) |
toolTitle |
Judul alat |
toolOutput |
Teks keluaran alat |
Markdown (10 warna)
| Token | Tujuan |
|---|---|
mdHeading |
Judul |
mdLink |
Teks tautan |
mdLinkUrl |
URL tautan |
mdCode |
Kode sebaris |
mdCodeBlock |
Konten blok kode |
mdCodeBlockBorder |
Pagar blok kode |
mdQuote |
Teks kutipan blok |
mdQuoteBorder |
Batas blokquote |
mdHr |
Aturan horisontal |
mdListBullet |
Daftar poin-poin |
Perbedaan Alat (3 warna)
| Token | Tujuan |
|---|---|
toolDiffAdded |
Menambahkan baris |
toolDiffRemoved |
Garis yang dihapus |
toolDiffContext |
Garis konteks |
Penyorotan Sintaks (9 warna)
| Token | Tujuan |
|---|---|
syntaxComment |
Komentar |
syntaxKeyword |
Kata kunci |
syntaxFunction |
Nama fungsi |
syntaxVariable |
Variabel |
syntaxString |
string |
syntaxNumber |
Angka |
syntaxType |
Jenis |
syntaxOperator |
Operator |
syntaxPunctuation |
tanda baca |
Batas Tingkat Berpikir (6 wajib, 1 opsional)
Warna batas editor menunjukkan tingkat berpikir (hierarki visual dari halus hingga menonjol):
| Token | Tujuan |
|---|---|
thinkingOff |
Berpikir |
thinkingMinimal |
Minimal berpikir |
thinkingLow |
Berpikir rendah |
thinkingMedium |
Pemikiran sedang |
thinkingHigh |
Berpikir tinggi |
thinkingXhigh |
Pemikiran ekstra tinggi |
thinkingMax |
Pemikiran maksimal; opsional, kembali ke thinkingXhigh |
Mode Pesta (1 warna)
| Token | Tujuan |
|---|---|
bashMode |
Batas editor dalam mode bash (awalan !) |
Ekspor HTML (opsional)
Bagian export mengontrol warna untuk /export keluaran HTML. Jika dihilangkan, warna berasal dari userMessageBg.
{
"export": {
"pageBg": "#18181e",
"cardBg": "#1e1e24",
"infoBg": "#3c3728"
}
}Nilai Warna
Empat format yang didukung:
| Format | Contoh | Keterangan |
|---|---|---|
| kutukan | "#ff0000" |
RGB heksa 6 digit |
| 256 warna | 39 |
xterm indeks palet 256 warna (0-255) |
| Variabel | "primary" |
Referensi ke entri vars |
| Bawaan | "" |
Warna default terminal |
Palet 256 Warna
0-15: Warna dasar ANSI (tergantung terminal)16-231: 6×6×6 kubus RGB (16 + 36×R + 6×G + Bdengan R,G,B adalah 0-5)232-255: Jalan skala abu-abu
Kompatibilitas Terminal
Pi menggunakan warna RGB 24-bit. Kebanyakan terminal modern mendukung ini (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). Untuk terminal lama yang hanya mendukung 256 warna, pi kembali ke perkiraan terdekat.
Periksa dukungan warna asli:
echo $COLORTERM # Should output "truecolor" or "24bit"Kiat
Terminal gelap: Gunakan warna cerah dan jenuh dengan kontras lebih tinggi.
Terminal terang: Gunakan warna yang lebih gelap dan kalem dengan kontras lebih rendah.
Harmoni warna: Mulailah dengan palet dasar (Nord, Gruvbox, Tokyo Night), tentukan di vars, dan rujuk secara konsisten.
Pengujian: Periksa tema Anda dengan berbagai jenis pesan, status alat, konten penurunan harga, dan teks panjang.
Kode VS: Setel terminal.integrated.minimumContrastRatio ke 1 untuk warna yang akurat.
Contoh
Lihat tema bawaan: