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

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

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