Couleurs
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Couleurs standards
Oh My Posh prend en charge plusieurs types de références colorimétriques :
-
Couleurs True Color via des [codes hexadécimaux][hexcolors] (par exemple
#CB4B16). -
16 [noms de couleurs ANSI][ansicolors]. Cela inclut 8 couleurs ANSI de base ainsi que
default:blackredgreenyellowbluemagentacyanwhitedefaultainsi que 8 couleurs ANSI étendues :
darkGraylightRedlightGreenlightYellowlightBluelightMagentalightCyanlightWhite -
Palette de 256 couleurs via leur représentation numérique. Par exemple
0correspond au noir,1au rouge,2au vert, etc. -
Le mot-clé
transparentpermettant de créer une surcharge de premier plan transparente ou une couleur d'arrière-plan transparente via la propriété de premier plan du segment. -
Le mot-clé
foregroundréférençant la couleur de premier plan du segment actuel. -
Le mot-clé
backgroundréférençant la couleur d'arrière-plan du segment actuel. -
Le mot-clé
parentForegroundhéritant de la couleur de premier plan du segment actif précédent. -
Le mot-clé
parentBackgroundhéritant de la couleur d'arrière-plan du segment actif précédent. -
Le mot-clé
accentréférençant la couleur d'accent du système d'exploitation (Windows et macOS uniquement).
Modèles de couleurs
Tableau de [modèles][templates] de chaînes définissant la couleur selon le contexte. Sous le capot, cette fonctionnalité utilise le module [text/template][go-text-template] de Go étendu avec [sprig][sprig], et expose plusieurs propriétés standards. Pour les segments, consultez la section Propriétés des modèles dans la documentation. Les propriétés générales des modèles sont listées [ici][template-properties].
L'exemple suivant est basé sur le [Segment AWS][aws].
- json
- yaml
- toml
{
"type": "aws",
"style": "powerline",
"powerline_symbol": "",
"foreground": "#ffffff",
"background": "#111111",
"foreground_templates": [
"{{if contains \"default\" .Profile}}#FFA400{{end}}",
"{{if contains \"jan\" .Profile}}#f1184c{{end}}"
]
}
type: aws
style: powerline
powerline_symbol:
foreground: "#ffffff"
background: "#111111"
foreground_templates:
- '{{if contains "default" .Profile}}#FFA400{{end}}'
- '{{if contains "jan" .Profile}}#f1184c{{end}}'
type = "aws"
style = "powerline"
powerline_symbol = ""
foreground = "#ffffff"
background = "#111111"
foreground_templates = [ "{{if contains \"default\" .Profile}}#FFA400{{end}}", "{{if contains \"jan\" .Profile}}#f1184c{{end}}" ]
La logique est la suivante : lorsque foreground_templates contient un tableau, chaque modèle est vérifié jusqu'à ce qu'un
retourne une chaîne non vide. Ainsi, si .Profile contient le mot default, le premier modèle
retourne #FFA400, qui sera utilisé comme couleur. S'il contient jan, il retourne #f1184c. Si aucun modèle
ne retourne de valeur, la valeur par défaut #ffffff est utilisée comme repli.
Surcharges de couleurs
Vous pouvez surcharger la couleur de premier plan et/ou d'arrière-plan pour tout texte dans les propriétés compatibles.
La syntaxe personnalisée est intuitive : <foreground,background>text</>. Par exemple,
<#ffffff,#000000>this is white with black background</> <#FF479C>but this is pink</>.
Tout contenu entre le marqueur d'ouverture <#FF479C> et la fermeture </> sera coloré en conséquence.
Pour afficher un crochet coloré différent du foreground du segment :
- json
- yaml
- toml
{
"template": "<#CB4B16>┏[</>"
}
template: <#CB4B16>┏[</>
template = "<#CB4B16>┏[</>"
Pour modifier également la couleur d'arrière-plan dans la commande précédente :
- json
- yaml
- toml
{
"template": "<#CB4B16,#FFFFFF>┏[</>"
}
template: <#CB4B16,#FFFFFF>┏[</>
template = "<#CB4B16,#FFFFFF>┏[</>"
Pour modifier uniquement la couleur d'arrière-plan, omettre la première couleur :
- json
- yaml
- toml
{
"template": "<,#FFFFFF>┏[</>"
}
template: <,#FFFFFF>┏[</>
template = "<,#FFFFFF>┏[</>"
Palette
Si votre configuration définit une palette, vous pouvez utiliser la référence p:<palette key> où une Couleur standard est attendue.
Définition d'une palette
Une palette est un ensemble de Couleurs standards nommées. Pour l'utiliser, définissez un objet "palette"
au niveau supérieur de votre configuration :
- json
- yaml
- toml
{
"palette": {
"git-foreground": "#193549",
"git": "#FFFB38",
"git-modified": "#FF9248",
"git-diverged": "#FF4500",
"git-ahead": "#B388FF",
"git-behind": "#B388FF",
"red": "#FF0000",
"green": "#00FF00",
"blue": "#0000FF",
"white": "#FFFFFF",
"black": "#111111"
}
}
palette:
git-foreground: "#193549"
git: "#FFFB38"
git-modified: "#FF9248"
git-diverged: "#FF4500"
git-ahead: "#B388FF"
git-behind: "#B388FF"
red: "#FF0000"
green: "#00FF00"
blue: "#0000FF"
white: "#FFFFFF"
black: "#111111"
[palette]
git-foreground = "#193549"
git = "#FFFB38"
git-modified = "#FF9248"
git-diverged = "#FF4500"
git-ahead = "#B388FF"
git-behind = "#B388FF"
red = "#FF0000"
green = "#00FF00"
blue = "#0000FF"
white = "#FFFFFF"
black = "#111111"
Les noms de couleurs (clés de palette) peuvent avoir n'importe quelle valeur textuelle, soyez créatifs. Les valeurs de couleur, en revanche, doivent respecter le format des Couleurs standards.
Utilisation d'une palette
Vous pouvez désormais utiliser des références de palette dans les propriétés foreground, foreground_templates,
background, background_templates de tout [segment][segment], ainsi que dans toute propriété de configuration acceptant une couleur standard.
Le format d'une référence de palette est p:<palette key>. Voici un exemple avec le segment [Git][git] utilisant des références de palette :
- json
- yaml
- toml
{
"type": "git",
"style": "powerline",
"powerline_symbol": "",
"foreground": "p:git-foreground",
"background": "p:git",
"background_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:git-modified{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:git-diverged{{ end }}",
"{{ if gt .Ahead 0 }}p:git-ahead{{ end }}",
"{{ if gt .Behind 0 }}p:git-behind{{ end }}"
]
}
type: git
style: powerline
powerline_symbol:
foreground: p:git-foreground
background: p:git
background_templates:
- "{{ if or (.Working.Changed) (.Staging.Changed) }}p:git-modified{{ end }}"
- "{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:git-diverged{{ end }}"
- "{{ if gt .Ahead 0 }}p:git-ahead{{ end }}"
- "{{ if gt .Behind 0 }}p:git-behind{{ end }}"
type = "git"
style = "powerline"
powerline_symbol = ""
foreground = "p:git-foreground"
background = "p:git"
background_templates = [ "{{ if or (.Working.Changed) (.Staging.Changed) }}p:git-modified{{ end }}", "{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:git-diverged{{ end }}", "{{ if gt .Ahead 0 }}p:git-ahead{{ end }}", "{{ if gt .Behind 0 }}p:git-behind{{ end }}" ]
Centraliser toutes les couleurs au même endroit vous permet :
- D'importer des configurations de couleurs existantes (avec quelques ajustements pour respecter le format)
- De modifier facilement les couleurs de plusieurs segments simultanément
- D'obtenir une configuration globale mieux organisée
Laissez libre cours à votre créativité !
Compatibilité entre références de palette et couleurs standards
L'utilisation d'une palette n'empêche pas d'employer des couleurs standards dans votre configuration. Cela reste possible partout, ce qui s'avère utile pour :
- Appliquer une couleur spécifique à un élément isolé d'un segment
- Utiliser dans une surcharge de couleur (exemple avec le segment [Batterie][battery]) :
- json
- yaml
- toml
{
"type": "battery",
"style": "powerline",
"invert_powerline": true,
"powerline_symbol": "",
"foreground": "p:white",
"background": "p:black",
"options": {
"discharging_icon": "<#ffa500>-</> ",
"charging_icon": "+ ",
"charged_icon": "* "
}
}
type: battery
style: powerline
invert_powerline: true
powerline_symbol:
foreground: p:white
background: p:black
options:
discharging_icon: "<#ffa500>-</> "
charging_icon: "+ "
charged_icon: "* "
type = "battery"
style = "powerline"
invert_powerline = true
powerline_symbol = ""
foreground = "p:white"
background = "p:black"
[options]
discharging_icon = "<#ffa500>-</> "
charging_icon = "+ "
charged_icon = "* "
Gestion des références invalides
Si vous utilisez une référence de palette invalide comme couleur (par exemple une faute de frappe p:bleu au lieu de p:blue), le moteur de palette utilisera le mot-clé Transparent comme valeur de repli. Ainsi, si vos segments d'invite s'affichent avec des couleurs incorrectes et que vous utilisez une palette, vérifiez bien l'exactitude de vos références.
Résolution récursive
La palette permet une résolution récursive des références de palette. Vous pouvez utiliser une référence comme valeur de couleur dans la palette elle-même. Cela permet de :
- Définir des couleurs nommées
- Utiliser leurs références comme valeurs dans la palette
Exemple : p:foreground et p:background seront correctement définis sur "#CAF0F80" et "#023E8A" :
- json
- yaml
- toml
{
"palette": {
"light-blue": "#CAF0F8",
"dark-blue": "#023E8A",
"foreground": "p:light-blue",
"background": "p:dark-blue"
}
}
palette:
light-blue: "#CAF0F8"
dark-blue: "#023E8A"
foreground: p:light-blue
background: p:dark-blue
[palette]
light-blue = "#CAF0F8"
dark-blue = "#023E8A"
foreground = "p:light-blue"
background = "p:dark-blue"
Palettes multiples
Pour utiliser une palette conditionnellement (par exemple pour un mode clair ou sombre), vous pouvez définir plusieurs palettes et utiliser un [template][templates] qui résout vers une clé de palette. Le template étant évalué dynamiquement, votre prompt peut changer à tout moment selon le résultat du template.
Exemple de configuration :
- json
- yaml
- toml
{
"palettes": {
"template": "{{ if eq .Shell \"pwsh\" }}latte{{ else }}frappe{{ end }}",
"list": {
"latte": {
"black": "#262B44",
"green": "#59C9A5",
"orange": "#F07623",
"red": "#e64553",
"white": "#E0DEF4",
"yellow": "#df8e1d",
"blue": "#7287fd"
},
"frappe": {
"black": "#262B44",
"green": "#59C9A5",
"orange": "#F07623",
"red": "#D81E5B",
"white": "#E0DEF4",
"yellow": "#F3AE35",
"blue": "#4B95E9"
}
}
}
}
palettes:
template: '{{ if eq .Shell "pwsh" }}latte{{ else }}frappe{{ end }}'
list:
latte:
black: "#262B44"
green: "#59C9A5"
orange: "#F07623"
red: "#e64553"
white: "#E0DEF4"
yellow: "#df8e1d"
blue: "#7287fd"
frappe:
black: "#262B44"
green: "#59C9A5"
orange: "#F07623"
red: "#D81E5B"
white: "#E0DEF4"
yellow: "#F3AE35"
blue: "#4B95E9"
[palettes]
template = "{{ if eq .Shell \"pwsh\" }}latte{{ else }}frappe{{ end }}"
[palettes.list.latte]
black = "#262B44"
green = "#59C9A5"
orange = "#F07623"
red = "#e64553"
white = "#E0DEF4"
yellow = "#df8e1d"
blue = "#7287fd"
[palettes.list.frappe]
black = "#262B44"
green = "#59C9A5"
orange = "#F07623"
red = "#D81E5B"
white = "#E0DEF4"
yellow = "#F3AE35"
blue = "#4B95E9"
Dans ce cas :
- Si le shell est
pwsh, la palettelattesera utilisée - Sinon, c'est la palette
frappequi s'applique
Vous pouvez aussi définir frappe comme palette par défaut, servant de repli quand aucune correspondance n'est trouvée via le template. Si aucune palette n'est disponible, toute référence de couleur utilisera transparent comme valeur de repli.
Pour éviter les duplications de couleurs, combinez les palettes avec la propriété palette. Cela permet de définir une couleur une seule fois et de la réutiliser dans plusieurs palettes :
- json
- yaml
- toml
{
"palette": {
"black": "#262B44",
"green": "#59C9A5",
"orange": "#F07623"
},
"palettes": {
"template": "{{ if eq .Shell \"pwsh\" }}latte{{ else }}frappe{{ end }}",
"list": {
"latte": {
"red": "#e64553",
"white": "#E0DEF4",
"yellow": "#df8e1d",
"blue": "#7287fd"
},
"frappe": {
"red": "#D81E5B",
"white": "#E0DEF4",
"yellow": "#F3AE35",
"blue": "#4B95E9"
}
}
}
}
palette:
black: "#262B44"
green: "#59C9A5"
orange: "#F07623"
palettes:
template: '{{ if eq .Shell "pwsh" }}latte{{ else }}frappe{{ end }}'
list:
latte:
red: "#e64553"
white: "#E0DEF4"
yellow: "#df8e1d"
blue: "#7287fd"
frappe:
red: "#D81E5B"
white: "#E0DEF4"
yellow: "#F3AE35"
blue: "#4B95E9"
[palette]
black = "#262B44"
green = "#59C9A5"
orange = "#F07623"
[palettes]
template = "{{ if eq .Shell \"pwsh\" }}latte{{ else }}frappe{{ end }}"
[palettes.list.latte]
red = "#e64553"
white = "#E0DEF4"
yellow = "#df8e1d"
blue = "#7287fd"
[palettes.list.frappe]
red = "#D81E5B"
white = "#E0DEF4"
yellow = "#F3AE35"
blue = "#4B95E9"
Priorité de résolution :
- Les couleurs définies dans palettes priment sur celles de palette
- Si une couleur existe dans les deux, c'est la version de palettes qui est utilisée ::>
Cycle de couleurs
Pour appliquer une séquence de couleurs (arrière-plan et premier plan) de manière cyclique indépendamment des segments actifs, utilisez la propriété cycle. Celle-ci contient une liste de couleurs utilisées en boucle continue. Un cycle défini a toujours priorité sur les autres mécanismes.
- json
- yaml
- toml
{
"cycle": [
{
"background": "p:blue",
"foreground": "p:white"
},
{
"background": "p:green",
"foreground": "p:black"
},
{
"background": "p:orange",
"foreground": "p:white"
}
]
}
cycle:
- background: p:blue
foreground: p:white
- background: p:green
foreground: p:black
- background: p:orange
foreground: p:white
[[cycle]]
background = "p:blue"
foreground = "p:white"
[[cycle]]
background = "p:green"
foreground = "p:black"
[[cycle]]
background = "p:orange"
foreground = "p:white"