1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
# Référence : format des fichiers de thème
> Description neutre et exhaustive d'un fichier de thème Turbo Python.
Un thème est un fichier TOML. Les thèmes sont lus d'abord dans le répertoire utilisateur, puis parmi ceux embarqués dans le binaire ; un fichier utilisateur l'emporte sur un thème embarqué du même nom.
## Emplacements
| Emplacement | Remarques |
| --- | --- |
| `$TURBO_PYTHON_THEME_DIR` | Utilisé quand la variable est définie et non vide. |
| `~/.config/turbo-python/themes` | Linux (`os.UserConfigDir`). |
| `~/Library/Application Support/turbo-python/themes` | macOS. |
| embarqués | `turbo-classic`, `turbo-dark`, `borland-light`, `cappuccino`, `catppuccin-frappe`, `catppuccin-latte`, `cobalt`, `darcula`, `intellij-light`, `monochrome-dark`, `monochrome-light`. |
Le **nom** d'un thème pour `-theme` et pour `Options ▸ Theme…` est son nom de fichier sans `.toml`. Il ne peut contenir ni `/`, ni `\`, ni `..`.
## Les thèmes livrés
| Nom | Fond | Pour |
| --- | --- | --- |
| `turbo-classic` | Marine Borland | Le défaut : la palette de Turbo C |
| `turbo-dark` | Gris sombre neutre | Les terminaux modernes en couleurs vraies |
| `borland-light` | Blanc papier | Les pièces claires et la vidéoprojection |
| `cappuccino` | Brun expresso | La mise en page Turbo, en chaud : du lait dans le texte, du caramel là où Turbo Dark met du bleu |
| `catppuccin-frappe` | Ardoise chaude | La palette Catppuccin Frappé, inchangée : des accents pastel sur un fond doucement sombre |
| `catppuccin-latte` | Papier chaud | La palette Catppuccin Latte, inchangée : le même mappage avec la saturation qu'exige un fond clair |
| `cobalt` | Marine profond | La palette Cobalt, accents laissés aussi francs qu'on les connaît |
| `darcula` | Anthracite | D'après le Darcula de JetBrains : mots-clés orange, chaînes vertes, et la ponctuation orange qui le rend reconnaissable |
| `intellij-light` | Blanc | D'après l'IntelliJ Light de JetBrains : mots-clés bleus gras, chaînes vertes grasses |
| `monochrome-dark` | Noir et gris | Aucune teinte — le code se distingue par la luminosité, le gras, l'italique et le souligné |
| `monochrome-light` | Papier et gris | Le même, dans l'autre sens : sur papier, c'est le gris le plus foncé qui parle le plus fort |
Chacun **énonce sa palette entière** au lieu d'en hériter l'essentiel. Un thème que vous écrivez, lui, peut hériter ; voir [en écrire un](../how-to/write-a-theme.md).
## Un nom auquel un thème répondait autrefois
`monochrome` se charge toujours. C'est le nom sous lequel ce thème était livré avant que `monochrome-light` ne le rejoigne et que la paire ne soit renommée : un fichier de réglages ou un `-theme` disant `monochrome` obtient `monochrome-dark`.
| Nom retiré | Charge |
| --- | --- |
| `monochrome` | `monochrome-dark` |
Un nom retiré n'est **pas** listé par `-theme` ni par **Options ▸ Theme…** : chaque thème n'apparaît donc qu'une fois, sous le nom qu'il porte aujourd'hui. Un thème à vous nommé `monochrome.toml` l'emporte quand même sur lui, exactement comme pour n'importe quel autre nom.
## Champs de premier niveau
| Champ | Type | Défaut | Description |
| --- | --- | --- | --- |
| `name` | chaîne | le nom du fichier | Nom affiché, dans le sélecteur de thème et la boîte À propos. |
| `description` | chaîne | `""` | Une ligne, affichée par `-list-themes`. |
| `inherits` | chaîne | aucun | Nom d'un thème dont partir. Ses styles résolus servent de base ; ce fichier redéfinit ce qu'il nomme. Les chaînes sont plafonnées à 16 sauts. |
| `colors` | table | `{}` | Les styles. Les clés sont celles listées plus bas. |
## Champs d'une entrée
Chaque valeur sous `[colors]` est une table en ligne :
| Champ | Type | Défaut | Description |
| --- | --- | --- | --- |
| `fg` | chaîne | hérité | Couleur de premier plan. |
| `bg` | chaîne | hérité | Couleur de fond. |
| `bold` | booléen | `false` | Activer le gras. |
| `underline` | booléen | `false` | Activer le souligné. |
| `italic` | booléen | `false` | Activer l'italique. |
| `reverse` | booléen | `false` | Échanger premier plan et fond. |
| `dim` | booléen | `false` | Activer l'atténuation. |
| `blink` | booléen | `false` | Activer le clignotement. |
Les attributs ne sont jamais qu'**activés** ; il n'existe pas de moyen de désactiver un attribut hérité autrement qu'en n'en héritant pas.
## Valeurs de couleur
| Forme | Exemple | Remarques |
| --- | --- | --- |
| Nom ANSI | `navy`, `aqua`, `silver`, `fuchsia` | Les seize noms, plus la liste W3C complète. |
| Littéral hexadécimal | `#5fafd7` | 24 bits ; tcell l'approxime sur les terminaux sans couleurs vraies. |
| `default` | `default` | Ce que le terminal utilise lui-même. |
| `-` | `-` | Identique à `default`. |
| `""` | `""` | Identique à `default`. |
Les seize noms ANSI : `black` `maroon` `green` `olive` `navy` `purple` `teal` `silver` `gray` `red` `lime` `yellow` `blue` `fuchsia` `aqua` `white`.
Une couleur non reconnue est une **erreur de chargement**, pas un repli silencieux.
## Clés de style
Les clés non définies retombent le long des points, et finalement sur `default`.
### Base
| Clé | Ce qu'elle colore |
| --- | --- |
| `default` | Le dernier recours de toute recherche |
| `desktop` | Le fond texturé derrière les fenêtres |
| `shadow` | Les cellules qu'une fenêtre assombrit derrière elle |
### Barre de menus
| Clé | Ce qu'elle colore |
| --- | --- |
| `menu.bar` | La rangée de titres |
| `menu.item` | Une entrée déroulante |
| `menu.selected` | L'entrée surlignée |
| `menu.shortcut` | La lettre d'accès d'un intitulé |
| `menu.disabled` | Une entrée non choisissable |
### Fenêtres
| Clé | Ce qu'elle colore |
| --- | --- |
| `window.frame.active` | Le cadre de la fenêtre active |
| `window.frame.inactive` | Tous les autres cadres |
| `window.title.active` | Le titre de la fenêtre active |
| `window.title.inactive` | Tous les autres titres |
| `window.body` | L'intérieur, avant que son contenu ne se dessine |
### Barres
| Clé | Ce qu'elle colore |
| --- | --- |
| `statusbar` | La barre elle-même |
| `statusbar.key` | La partie `Fn` d'un indice |
| `statusbar.hint` | Le texte aligné à droite |
| `scrollbar` | La glissière d'une barre de défilement |
| `scrollbar.thumb` | Son curseur et ses flèches |
### Dialogues et contrôles
| Clé | Ce qu'elle colore |
| --- | --- |
| `dialog.frame` | Le cadre d'un dialogue |
| `dialog.body` | Son intérieur |
| `dialog.title` | Son titre |
| `dialog.label` | Une ligne de texte statique |
| `button` | Un bouton |
| `button.focused` | Le bouton qui a le focus |
| `button.shortcut` | La lettre d'accès d'un bouton |
| `input` | Un champ de saisie |
| `input.focused` | Le champ qui a le focus |
| `input.selection` | Le texte sélectionné dans un champ |
| `list` | Une liste |
| `list.selected` | Sa ligne surlignée, quand elle a le focus |
| `list.unfocused` | Sa ligne surlignée, sinon |
| `checkbox` | Une case à cocher |
| `checkbox.focused` | La case qui a le focus |
### Éditeur
| Clé | Ce qu'elle colore |
| --- | --- |
| `editor.text` | Le texte qu'aucune autre règle ne revendique |
| `editor.selection` | Le texte sélectionné |
| `editor.linenumber` | La gouttière des numéros de ligne |
| `editor.currentline` | La ligne où se trouve le curseur |
| `editor.cursor` | Le curseur. Son **fond** est aussi envoyé au terminal comme couleur de curseur, et son premier plan peint le caractère en dessous. |
### Terminal
| Clé | Ce qu'elle colore |
| --- | --- |
| `terminal.text` | Toute cellule d'une fenêtre terminal dont le programme qui y tourne n'a pas choisi la couleur |
| `terminal.cursor` | La cellule sous le curseur d'un terminal, quand cette fenêtre a le focus |
Un programme qui nomme ses propres couleurs les conserve : ces deux clés ne remplissent que ce qu'il a laissé indéfini. Voir [Fenêtres terminal](terminal.md).
### Arbre du projet
| Clé | Ce qu'elle colore |
| --- | --- |
| `tree.text` | Le nom d'un fichier dans l'arbre, et le fond de l'arbre |
| `tree.directory` | Le nom d'un dossier |
| `tree.selected` | La ligne surlignée, quand l'arbre a le focus |
| `tree.unfocused` | La ligne surlignée, quand il ne l'a pas |
Elles sont distinctes des clés `list.*` à dessein : la liste d'un dialogue est colorée pour ressortir sur un dialogue, et la réutiliser surlignerait une ligne d'arbre dans la couleur même qu'a déjà le corps d'une fenêtre. Voir [Arbre du projet](project-tree.md).
### Syntaxe
| Clé | Ce qu'elle colore |
| --- | --- |
| `syntax.identifier` | Un nom ordinaire |
| `syntax.keyword` | `func`, `if`, `package`, … |
| `syntax.type` | `int`, `string`, et un nom après `type` |
| `syntax.builtin` | `len`, `append`, `make`, … |
| `syntax.constant` | `true`, `false`, `nil`, `iota` |
| `syntax.function` | Un nom avant `(`, ou après `func` |
| `syntax.string` | Un littéral chaîne |
| `syntax.char` | Un littéral rune |
| `syntax.number` | Un littéral entier, flottant ou imaginaire |
| `syntax.comment` | `//` et `/* */` |
| `syntax.operator` | `+`, `:=`, `<-`, … |
| `syntax.punctuation` | Parenthèses, virgules, points, points-virgules |
| `syntax.heading` | Un titre Markdown, toute la ligne |
| `syntax.tag` | Un nom d'élément HTML et ses chevrons |
| `syntax.attribute` | Le nom d'un attribut HTML |
| `syntax.emphasis` | Le gras et l'italique Markdown |
| `syntax.link` | Un lien ou une image Markdown |
Quel langage produit quelle classe est indiqué dans [Langages colorés](languages.md).
### Complétion et diagnostics
| Clé | Ce qu'elle colore |
| --- | --- |
| `completion.frame` | Le cadre de la liste |
| `completion.item` | Une suggestion |
| `completion.selected` | La suggestion surlignée |
| `completion.detail` | L'étiquette de nature à côté d'une suggestion |
| `diagnostic.error` | Une erreur du serveur de langage |
| `diagnostic.warning` | Un avertissement |
| `diagnostic.info` | Une note |
## Exemple
```toml
name = "Le mien"
description = "Turbo Classic, avec des commentaires lisibles."
inherits = "turbo-classic"
[colors]
"syntax.comment" = { fg = "#8a8a8a", italic = true }
"syntax.string" = { fg = "#87d7af" }
"editor.currentline" = { bg = "#00005f" }
```
## Erreurs
| Message | Cause |
| --- | --- |
| `theme: not found: "x"` | Aucun `x.toml` dans le répertoire utilisateur ni parmi les thèmes embarqués. |
| `theme: not found: "…" is not a plain theme name` | Le nom contient `/`, `\` ou `..`. |
| `invalid TOML: …` | Le fichier n'est pas du TOML valide. |
| `colors."k": fg: unknown colour "…"` | Le nom de couleur n'est pas reconnu. |
| `inherits: chain deeper than 16, probably a loop` | Deux thèmes héritent l'un de l'autre, directement ou par l'intermédiaire d'autres. |
| `inherits "x": theme: not found` | Le parent nommé n'existe pas. |
|