mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-11-09 20:44:03 -08:00
parent
e7d699d6db
commit
d7e289b3bf
|
@ -34,6 +34,9 @@ You can make use of the following syntax to decorate text:
|
|||
- `<u>underline</u>`: renders `underline` as underlined text
|
||||
- `<i>italic</i>`: renders `italic` as italic text
|
||||
- `<s>strikethrough</s>`: renders `strikethrough` as strikethrough text
|
||||
- `<d>dimmed</d>`: renders `dimmed` as dimmed text
|
||||
- `<f>blink</f>`: renders `blink` as blinking (flashing) text
|
||||
- `<r>reversed</r>`: renders `reversed` as reversed text
|
||||
|
||||
This can be used in templates and icons/text inside your config.
|
||||
|
||||
|
|
|
@ -36,6 +36,9 @@ type Ansi struct {
|
|||
italic string
|
||||
underline string
|
||||
strikethrough string
|
||||
blink string
|
||||
reverse string
|
||||
dimmed string
|
||||
format string
|
||||
shellReservedKeywords []shellKeyWordReplacement
|
||||
}
|
||||
|
@ -69,6 +72,9 @@ func (a *Ansi) Init(shell string) {
|
|||
a.bold = "%%{\x1b[1m%%}%s%%{\x1b[22m%%}"
|
||||
a.italic = "%%{\x1b[3m%%}%s%%{\x1b[23m%%}"
|
||||
a.underline = "%%{\x1b[4m%%}%s%%{\x1b[24m%%}"
|
||||
a.blink = "%%{\x1b[5m%%}%s%%{\x1b[25m%%}"
|
||||
a.reverse = "%%{\x1b[7m%%}%s%%{\x1b[27m%%}"
|
||||
a.dimmed = "%%{\x1b[2m%%}%s%%{\x1b[22m%%}"
|
||||
a.strikethrough = "%%{\x1b[9m%%}%s%%{\x1b[29m%%}"
|
||||
// escape double quotes and variable expansion
|
||||
a.shellReservedKeywords = append(a.shellReservedKeywords, shellKeyWordReplacement{"\\", "\\\\"}, shellKeyWordReplacement{"%", "%%"})
|
||||
|
@ -93,6 +99,9 @@ func (a *Ansi) Init(shell string) {
|
|||
a.bold = "\\[\x1b[1m\\]%s\\[\x1b[22m\\]"
|
||||
a.italic = "\\[\x1b[3m\\]%s\\[\x1b[23m\\]"
|
||||
a.underline = "\\[\x1b[4m\\]%s\\[\x1b[24m\\]"
|
||||
a.blink = "\\[\x1b[5m%s\\[\x1b[25m\\]"
|
||||
a.reverse = "\\[\x1b[7m\\]%s\\[\x1b[27m\\]"
|
||||
a.dimmed = "\\[\x1b[2m\\]%s\\[\x1b[22m\\]"
|
||||
a.strikethrough = "\\[\x1b[9m\\]%s\\[\x1b[29m\\]"
|
||||
// escape backslashes to avoid replacements
|
||||
// https://tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html
|
||||
|
@ -118,6 +127,9 @@ func (a *Ansi) Init(shell string) {
|
|||
a.bold = "\x1b[1m%s\x1b[22m"
|
||||
a.italic = "\x1b[3m%s\x1b[23m"
|
||||
a.underline = "\x1b[4m%s\x1b[24m"
|
||||
a.blink = "\x1b[5m%s\x1b[25m"
|
||||
a.reverse = "\x1b[7m%s\x1b[27m"
|
||||
a.dimmed = "\x1b[2m%s\x1b[22m"
|
||||
a.strikethrough = "\x1b[9m%s\x1b[29m"
|
||||
}
|
||||
// common replacement for all shells
|
||||
|
@ -137,7 +149,7 @@ func (a *Ansi) generateHyperlink(text string) string {
|
|||
}
|
||||
|
||||
func (a *Ansi) formatText(text string) string {
|
||||
results := regex.FindAllNamedRegexMatch("(?P<context><(?P<format>[buis])>(?P<text>[^<]+)</[buis]>)", text)
|
||||
results := regex.FindAllNamedRegexMatch("(?P<context><(?P<format>[buisrdf])>(?P<text>[^<]+)</[buisrdf]>)", text)
|
||||
for _, result := range results {
|
||||
var formatted string
|
||||
switch result["format"] {
|
||||
|
@ -149,6 +161,12 @@ func (a *Ansi) formatText(text string) string {
|
|||
formatted = fmt.Sprintf(a.italic, result["text"])
|
||||
case "s":
|
||||
formatted = fmt.Sprintf(a.strikethrough, result["text"])
|
||||
case "d":
|
||||
formatted = fmt.Sprintf(a.dimmed, result["text"])
|
||||
case "f":
|
||||
formatted = fmt.Sprintf(a.blink, result["text"])
|
||||
case "r":
|
||||
formatted = fmt.Sprintf(a.reverse, result["text"])
|
||||
}
|
||||
text = strings.Replace(text, result["context"], formatted, 1)
|
||||
}
|
||||
|
|
|
@ -71,6 +71,9 @@ func TestFormatText(t *testing.T) {
|
|||
{Case: "underline", Text: "This <u>is</u> white", Expected: "This \x1b[4mis\x1b[24m white"},
|
||||
{Case: "italic", Text: "This <i>is</i> white", Expected: "This \x1b[3mis\x1b[23m white"},
|
||||
{Case: "strikethrough", Text: "This <s>is</s> white", Expected: "This \x1b[9mis\x1b[29m white"},
|
||||
{Case: "dimmed", Text: "This <d>is</d> white", Expected: "This \x1b[2mis\x1b[22m white"},
|
||||
{Case: "flash", Text: "This <f>is</f> white", Expected: "This \x1b[5mis\x1b[25m white"},
|
||||
{Case: "reversed", Text: "This <r>is</r> white", Expected: "This \x1b[7mis\x1b[27m white"},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
a := Ansi{}
|
||||
|
|
Loading…
Reference in a new issue