| 📦 Turbo Python 6fc62ea k33g 11h ago | 1 | # Référence : format des fichiers de thème |
| 2 | |
| 3 | > Description neutre et exhaustive d'un fichier de thème Turbo Python. |
| 4 | |
| 5 | 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. |
| 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 | |
| 16 | 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 `..`. |
| 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 | |
| 34 | 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). |
| 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 | |
| 44 | 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. |
| 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 | |
| 57 | Chaque 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 | |
| 70 | 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. |
| 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 | |
| 82 | Les seize noms ANSI : `black` `maroon` `green` `olive` `navy` `purple` `teal` `silver` `gray` `red` `lime` `yellow` `blue` `fuchsia` `aqua` `white`. |
| 83 | |
| 84 | Une couleur non reconnue est une **erreur de chargement**, pas un repli silencieux. |
| 85 | |
| 86 | ## Clés de style |
| 87 | |
| 88 | Les 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 | |
| 165 | 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). |
| 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 | |
| 176 | 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). |
| 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 | |
| 200 | Quel 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 |
| 217 | name = "Le mien" |
| 218 | description = "Turbo Classic, avec des commentaires lisibles." |
| 219 | inherits = "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. | |