mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-26 19:39:39 -08:00
parent
b5b35d1456
commit
fe2e5fd1d3
|
@ -32,7 +32,8 @@ type Ansi struct {
|
|||
escapeRight string
|
||||
hyperlink string
|
||||
hyperlinkRegex string
|
||||
pwd string
|
||||
osc99 string
|
||||
osc7 string
|
||||
bold string
|
||||
italic string
|
||||
underline string
|
||||
|
@ -65,7 +66,8 @@ func (a *Ansi) Init(shellName string) {
|
|||
a.escapeRight = "%}"
|
||||
a.hyperlink = "%%{\x1b]8;;%s\x1b\\%%}%s%%{\x1b]8;;\x1b\\%%}"
|
||||
a.hyperlinkRegex = `(?P<STR>%{\x1b]8;;(.+)\x1b\\%}(?P<TEXT>.+)%{\x1b]8;;\x1b\\%})`
|
||||
a.pwd = "%%{\x1b]%s;\"%s\"\x1b\\%%}"
|
||||
a.osc99 = "%%{\x1b]9;9;\"%s\"\x1b\\%%}"
|
||||
a.osc7 = "%%{\x1b]7;file://%s/%s\x1b\\%%}"
|
||||
a.bold = "%%{\x1b[1m%%}%s%%{\x1b[22m%%}"
|
||||
a.italic = "%%{\x1b[3m%%}%s%%{\x1b[23m%%}"
|
||||
a.underline = "%%{\x1b[4m%%}%s%%{\x1b[24m%%}"
|
||||
|
@ -92,7 +94,8 @@ func (a *Ansi) Init(shellName string) {
|
|||
a.escapeRight = "\\]"
|
||||
a.hyperlink = "\\[\x1b]8;;%s\x1b\\\\\\]%s\\[\x1b]8;;\x1b\\\\\\]"
|
||||
a.hyperlinkRegex = `(?P<STR>\\\[\x1b\]8;;(.+)\x1b\\\\\\\](?P<TEXT>.+)\\\[\x1b\]8;;\x1b\\\\\\\])`
|
||||
a.pwd = "\\[\x1b]%s;\"%s\"\x1b\\\\\\]"
|
||||
a.osc99 = "\\[\x1b]9;9;\"%s\"\x1b\\\\\\]"
|
||||
a.osc7 = "\\[\x1b]7;file://%s/%s\x1b\\\\]"
|
||||
a.bold = "\\[\x1b[1m\\]%s\\[\x1b[22m\\]"
|
||||
a.italic = "\\[\x1b[3m\\]%s\\[\x1b[23m\\]"
|
||||
a.underline = "\\[\x1b[4m\\]%s\\[\x1b[24m\\]"
|
||||
|
@ -119,7 +122,8 @@ func (a *Ansi) Init(shellName string) {
|
|||
a.escapeRight = ""
|
||||
a.hyperlink = "\x1b]8;;%s\x1b\\%s\x1b]8;;\x1b\\"
|
||||
a.hyperlinkRegex = "(?P<STR>\x1b]8;;(.+)\x1b\\\\\\\\?(?P<TEXT>.+)\x1b]8;;\x1b\\\\)"
|
||||
a.pwd = "\x1b]%s;\"%s\"\x1b\\"
|
||||
a.osc99 = "\x1b]9;9;\"%s\"\x1b\\"
|
||||
a.osc7 = "\x1b]7;file://%s/%s\x1b\\"
|
||||
a.bold = "\x1b[1m%s\x1b[22m"
|
||||
a.italic = "\x1b[3m%s\x1b[23m"
|
||||
a.underline = "\x1b[4m%s\x1b[24m"
|
||||
|
@ -243,17 +247,17 @@ func (a *Ansi) ChangeLine(numberOfLines int) string {
|
|||
return fmt.Sprintf(a.linechange, numberOfLines, position)
|
||||
}
|
||||
|
||||
func (a *Ansi) ConsolePwd(pwdType, pwd string) string {
|
||||
func (a *Ansi) ConsolePwd(pwdType, hostName, pwd string) string {
|
||||
if strings.HasSuffix(pwd, ":") {
|
||||
pwd += "\\"
|
||||
}
|
||||
switch pwdType {
|
||||
case OSC7:
|
||||
return fmt.Sprintf(a.pwd, "7", pwd)
|
||||
return fmt.Sprintf(a.osc7, hostName, pwd)
|
||||
case OSC99:
|
||||
fallthrough
|
||||
default:
|
||||
return fmt.Sprintf(a.pwd, "9;9", pwd)
|
||||
return fmt.Sprintf(a.osc99, pwd)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ func (e *Engine) printPWD() {
|
|||
cwd := e.Env.Pwd()
|
||||
// Backwards compatibility for deprecated OSC99
|
||||
if e.Config.OSC99 {
|
||||
e.writeANSI(e.Ansi.ConsolePwd(color.OSC99, cwd))
|
||||
e.writeANSI(e.Ansi.ConsolePwd(color.OSC99, "", cwd))
|
||||
return
|
||||
}
|
||||
// Allow template logic to define when to enable the PWD (when supported)
|
||||
|
@ -97,7 +97,8 @@ func (e *Engine) printPWD() {
|
|||
if err != nil || len(pwdType) == 0 {
|
||||
return
|
||||
}
|
||||
e.writeANSI(e.Ansi.ConsolePwd(pwdType, cwd))
|
||||
host, _ := e.Env.Host()
|
||||
e.writeANSI(e.Ansi.ConsolePwd(pwdType, host, cwd))
|
||||
}
|
||||
|
||||
func (e *Engine) newline() {
|
||||
|
|
|
@ -53,16 +53,17 @@ func TestPrintPWD(t *testing.T) {
|
|||
}{
|
||||
{Case: "Empty PWD"},
|
||||
{Case: "OSC99", PWD: color.OSC99, Expected: "\x1b]9;9;\"pwd\"\x1b\\"},
|
||||
{Case: "OSC7", PWD: color.OSC7, Expected: "\x1b]7;\"pwd\"\x1b\\"},
|
||||
{Case: "OSC7", PWD: color.OSC7, Expected: "\x1b]7;file://host/pwd\x1b\\"},
|
||||
{Case: "Deprecated OSC99", OSC99: true, Expected: "\x1b]9;9;\"pwd\"\x1b\\"},
|
||||
{Case: "Template (empty)", PWD: "{{ if eq .Shell \"pwsh\" }}osc7{{ end }}"},
|
||||
{Case: "Template (non empty)", PWD: "{{ if eq .Shell \"shell\" }}osc7{{ end }}", Expected: "\x1b]7;\"pwd\"\x1b\\"},
|
||||
{Case: "Template (non empty)", PWD: "{{ if eq .Shell \"shell\" }}osc7{{ end }}", Expected: "\x1b]7;file://host/pwd\x1b\\"},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
env := new(mock.MockedEnvironment)
|
||||
env.On("Pwd").Return("pwd")
|
||||
env.On("Shell").Return("shell")
|
||||
env.On("Host").Return("host", nil)
|
||||
env.On("TemplateCache").Return(&environment.TemplateCache{
|
||||
Env: make(map[string]string),
|
||||
Shell: "shell",
|
||||
|
|
Loading…
Reference in a new issue