mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-31 13:57:26 -08:00
fix(fish): escape link text correctly
This commit is contained in:
parent
ee56154231
commit
ba4968107f
|
@ -122,9 +122,6 @@ func (a *Ansi) Init(shellName string) {
|
||||||
a.dimmed = "\x1b[2m%s\x1b[22m"
|
a.dimmed = "\x1b[2m%s\x1b[22m"
|
||||||
a.strikethrough = "\x1b[9m%s\x1b[29m"
|
a.strikethrough = "\x1b[9m%s\x1b[29m"
|
||||||
}
|
}
|
||||||
if shellName == shell.FISH {
|
|
||||||
a.hyperlink = "\x1b]8;;%s\x1b\\\\%s\x1b]8;;\x1b\\"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Ansi) InitPlain(shellName string) {
|
func (a *Ansi) InitPlain(shellName string) {
|
||||||
|
@ -133,14 +130,60 @@ func (a *Ansi) InitPlain(shellName string) {
|
||||||
|
|
||||||
func (a *Ansi) GenerateHyperlink(text string) string {
|
func (a *Ansi) GenerateHyperlink(text string) string {
|
||||||
// hyperlink matching
|
// hyperlink matching
|
||||||
results := regex.FindNamedRegexMatch("(?P<all>(?:\\[(?P<name>.+)\\])(?:\\((?P<url>.*)\\)))", text)
|
results := regex.FindNamedRegexMatch("(?P<ALL>(?:\\[(?P<TEXT>.+)\\])(?:\\((?P<URL>.*)\\)))", text)
|
||||||
if len(results) != 3 {
|
if len(results) != 3 {
|
||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
linkText := a.escapeLinkTextForFishShell(results["TEXT"])
|
||||||
// build hyperlink ansi
|
// build hyperlink ansi
|
||||||
hyperlink := fmt.Sprintf(a.hyperlink, results["url"], results["name"])
|
hyperlink := fmt.Sprintf(a.hyperlink, results["URL"], linkText)
|
||||||
// replace original text by the new one
|
// replace original text by the new onex
|
||||||
return strings.Replace(text, results["all"], hyperlink, 1)
|
return strings.Replace(text, results["ALL"], hyperlink, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Ansi) escapeLinkTextForFishShell(text string) string {
|
||||||
|
if a.shell != shell.FISH {
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
escapeChars := map[string]string{
|
||||||
|
`c`: `\c`,
|
||||||
|
`a`: `\a`,
|
||||||
|
`b`: `\b`,
|
||||||
|
`e`: `\e`,
|
||||||
|
`f`: `\f`,
|
||||||
|
`n`: `\n`,
|
||||||
|
`r`: `\r`,
|
||||||
|
`t`: `\t`,
|
||||||
|
`v`: `\v`,
|
||||||
|
`$`: `\$`,
|
||||||
|
`*`: `\*`,
|
||||||
|
`?`: `\?`,
|
||||||
|
`~`: `\~`,
|
||||||
|
`%`: `\%`,
|
||||||
|
`#`: `\#`,
|
||||||
|
`(`: `\(`,
|
||||||
|
`)`: `\)`,
|
||||||
|
`{`: `\{`,
|
||||||
|
`}`: `\}`,
|
||||||
|
`[`: `\[`,
|
||||||
|
`]`: `\]`,
|
||||||
|
`<`: `\<`,
|
||||||
|
`>`: `\>`,
|
||||||
|
`^`: `\^`,
|
||||||
|
`&`: `\&`,
|
||||||
|
`;`: `\;`,
|
||||||
|
`"`: `\"`,
|
||||||
|
`'`: `\'`,
|
||||||
|
`x`: `\x`,
|
||||||
|
`X`: `\X`,
|
||||||
|
`0`: `\0`,
|
||||||
|
`u`: `\u`,
|
||||||
|
`U`: `\U`,
|
||||||
|
}
|
||||||
|
if val, ok := escapeChars[text[0:1]]; ok {
|
||||||
|
return val + text[1:]
|
||||||
|
}
|
||||||
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Ansi) formatText(text string) string {
|
func (a *Ansi) formatText(text string) string {
|
||||||
|
|
Loading…
Reference in a new issue