Colores
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Colores estándar
Oh My Posh admite múltiples tipos de referencias de color, siendo:
-
Color verdadero usando colores hexadecimales (por ejemplo
#CB4B16). -
16 nombres de colores ANSI. Estos incluyen 8 colores ANSI básicos y
default:blackredgreenyellowbluemagentacyanwhitedefaultademás de 8 colores ANSI extendidos:
darkGraylightRedlightGreenlightYellowlightBluelightMagentalightCyanlightWhite -
Paleta de 256 colores usando su representación numérica. Por ejemplo
0es negro,1es rojo,2es verde, etc. -
La palabra clave
transparentque puede usarse para crear una sobreescritura de primer plano transparente o un color de fondo transparente usando la propiedad de primer plano del segmento. -
La palabra clave
foregroundque referencia el color de primer plano del segmento actual. -
La palabra clave
backgroundque referencia el color de fondo del segmento actual. -
La palabra clave
parentForegroundque hereda el color de primer plano del segmento activo anterior. -
La palabra clave
parentBackgroundque hereda el color de fondo del segmento activo anterior. -
La palabra clave
accentque referencia el color de acento del sistema operativo (solo Windows y macOS).
Plantillas de color
Array de plantillas de cadena para definir el color según el contexto actual. Internamente usa la función text/template de Go extendida con sprig, ofreciendo propiedades estándar para trabajar. Para segmentos, consulta la sección Propiedades de plantilla en la documentación. Las propiedades generales de plantillas están listadas aquí.
El siguiente ejemplo está basado en el Segmento 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 lógica es: cuando foreground_templates contiene un array, verificamos cada línea de plantilla hasta encontrar
una que devuelva una cadena no vacía. Así, si .Profile contiene default, la primera plantilla
devuelve #FFA400 y ese será el color usado. Si contiene jan, devuelve #f1184c. Cuando ninguna plantilla
devuelve un valor, se usa el valor de reserva #ffffff para el primer plano.
Sobrescrituras de color
Puedes sobrescribir el color de primer plano y/o fondo para texto en cualquier propiedad que lo acepte.
La sintaxis es personalizada pero intuitiva: <foreground,background>text</>. Por ejemplo:
<#ffffff,#000000>this is white with black background</> <#FF479C>but this is pink</>.
Todo entre la apertura <#FF479C> y el cierre </> se coloreará según corresponda.
Si necesitas imprimir un corchete coloreado que no coincida con el foreground del segmento,
puedes hacerlo así:
- json
- yaml
- toml
{
"template": "<#CB4B16>┏[</>"
}
template: <#CB4B16>┏[</>
template = "<#CB4B16>┏[</>"
Si además quisieras cambiar el color de fondo en el comando anterior, lo harías así:
- json
- yaml
- toml
{
"template": "<#CB4B16,#FFFFFF>┏[</>"
}
template: <#CB4B16,#FFFFFF>┏[</>
template = "<#CB4B16,#FFFFFF>┏[</>"
Para cambiar solo el color de fondo, omite el primer color en la cadena anterior:
- json
- yaml
- toml
{
"template": "<,#FFFFFF>┏[</>"
}
template: <,#FFFFFF>┏[</>
template = "<,#FFFFFF>┏[</>"
Paleta
Si tu configuración define una Paleta, puedes usar la referencia de paleta p:<palette key> donde se espere un
Color estándar.
Definición de una paleta
Una Paleta es un conjunto de colores estándar con nombre. Para usarla, define un objeto "palette"
en el nivel superior de tu configuración:
- 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"
Los nombres de color (claves de paleta) pueden tener cualquier valor de cadena, así que sé creativo. Los valores de color, por otro lado, deben ajustarse al formato de Colores estándar.
Usando una paleta
Ahora puedes usar Referencias de paleta en cualquier propiedad foreground, foreground_templates,
background, background_templates de un Segmento, y otras propiedades de configuración que esperen valores de Color estándar.
El formato de Referencia de paleta es p:<palette key>. Observa el segmento Git usando _Referencias de paleta`:
- 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 }}" ]
Tener todos los colores definidos en un solo lugar te permite importar configuraciones de color existentes (usualmente con pequeños ajustes para adaptarse al formato), cambiar fácilmente colores de múltiples segmentos a la vez, y tener una configuración más organizada en general. ¡Sé creativo!
Referencias de paleta y Colores estándar
Usar una paleta no interfiere con el uso de Colores estándar en tu configuración. Todavía puedes usar Colores estándar en cualquier parte. Esto puede ser útil si quieres usar un color específico para un único elemento de segmento, o en una Sobreescritura de color (Segmento de batería):
- 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 = "* "
Manejo de referencias inválidas
Si usas una referencia de paleta inválida como color (por ejemplo, un error tipográfico como p:bleu en lugar de p:blue),
el motor de paleta usará la palabra clave Transparent como valor de reserva. Por lo tanto, si ves que los segmentos de tu prompt
se renderizan con colores incorrectos y estás usando una paleta, asegúrate de verificar que tus referencias sean correctas.
Resolución recursiva
La paleta permite resolución recursiva de Referencias de paleta. Puedes usar una Referencia de paleta como valor de color
dentro de la paleta. Esto te permite definir colores con nombre y usar referencias a esos colores como valores de paleta.
Por ejemplo, p:foreground y p:background se configurarán correctamente como "#CAF0F80" y "#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"
Paletas múltiples
Si quieres usar una palette condicionalmente, por ejemplo para modo claro u oscuro, puedes definir múltiples
palettes y una plantilla que resuelva a la clave de palette. La template se evalúa en
tiempo de ejecución, así que tu prompt puede cambiar en cualquier momento según el resultado de la template.
Considera la siguiente configuración:
- 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"
En este caso, cuando el shell sea pwsh, se usará la paleta latte, de lo contrario usará la paleta frappe. Si lo prefieres,
también podrías agregar frappe como palette predeterminada, dado que esta se usa como respaldo cuando no hay coincidencia según lo que
resuelva el template. Si no hay coincidencia disponible y no se define palette, también se recurrirá a transparent
para cualquier referencia de color de paleta en templates/colors.
Si quieres evitar duplicación de colores, puedes usar paletas en combinación con la propiedad palette. Así puedes definir
un color una vez y reutilizarlo en múltiples paletas. Por ejemplo:
- 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"
Si un color está definido tanto en palette como en palettes, el color resuelto en palettes tendrá prioridad.
Ciclo
Cuando quieras mostrar la misma secuencia de colores (fondo y primer plano) independientemente de qué segmentos estén activos, puedes usar la propiedad cycle. Esta propiedad es una lista de colores que se usan uno tras otro en un bucle continuo. Un ciclo definido siempre tiene prioridad sobre todo lo demás.
- 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"