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

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

📦 Turbo Go 3d7798b · on main · k33g · 13h ago
themes.md · 236 lines · 10.7 KBmarkdown
Blame HistoryOpen raw

Référence : format des fichiers de thème

Description neutre et exhaustive d'un fichier de thème Turbo Go.

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_GO_THEME_DIR Utilisé quand la variable est définie et non vide.
~/.config/turbo-go/themes Linux (os.UserConfigDir).
~/Library/Application Support/turbo-go/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.

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.

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.

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.

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

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.
  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 Go.

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_GO_THEME_DIR` | Utilisé quand la variable est définie et non vide. |
| `~/.config/turbo-go/themes` | Linux (`os.UserConfigDir`). |
| `~/Library/Application Support/turbo-go/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. |