turbo-editors/turbo-pythonpublic Fork 0
main
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-python.git
git clone ssh://git@rickub.com/turbo-editors/turbo-python.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

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