mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-27 11:59:40 -08:00
fix(elvish): improve robustness of initialization
This commit is contained in:
parent
7486558436
commit
8f6aa125a5
|
@ -54,16 +54,17 @@ func Init(env runtime.Environment, feats Features) string {
|
|||
}
|
||||
|
||||
var command, config string
|
||||
|
||||
switch shell {
|
||||
case PWSH, PWSH5:
|
||||
command = "(@(& %s init %s --config=%s --print%s) -join \"`n\") | Invoke-Expression"
|
||||
config = quotePwshStr(env.Flags().Config)
|
||||
executable = quotePwshStr(executable)
|
||||
case ELVISH:
|
||||
command = "eval (%s init %s --config=%s --print%s | slurp)"
|
||||
config = env.Flags().Config
|
||||
command = "eval ((external %s) init %s --config=%s --print%s | slurp)"
|
||||
}
|
||||
|
||||
config = quotePwshOrElvishStr(env.Flags().Config)
|
||||
executable = quotePwshOrElvishStr(executable)
|
||||
|
||||
return fmt.Sprintf(command, executable, shell, config, additionalParams)
|
||||
case ZSH, BASH, FISH, CMD, TCSH, XONSH:
|
||||
return PrintInit(env, feats, nil)
|
||||
|
@ -88,8 +89,8 @@ func PrintInit(env runtime.Environment, features Features, startTime *time.Time)
|
|||
|
||||
switch shell {
|
||||
case PWSH, PWSH5:
|
||||
executable = quotePwshStr(executable)
|
||||
configFile = quotePwshStr(configFile)
|
||||
executable = quotePwshOrElvishStr(executable)
|
||||
configFile = quotePwshOrElvishStr(configFile)
|
||||
script = pwshInit
|
||||
case ZSH:
|
||||
executable = quotePosixStr(executable)
|
||||
|
@ -116,6 +117,8 @@ func PrintInit(env runtime.Environment, features Features, startTime *time.Time)
|
|||
configFile = quotePosixStr(configFile)
|
||||
script = tcshInit
|
||||
case ELVISH:
|
||||
executable = quotePwshOrElvishStr(executable)
|
||||
configFile = quotePwshOrElvishStr(configFile)
|
||||
script = elvishInit
|
||||
case XONSH:
|
||||
script = xonshInit
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestQuotePwshStr(t *testing.T) {
|
||||
func TestQuotePwshOrElvishStr(t *testing.T) {
|
||||
tests := []struct {
|
||||
str string
|
||||
expected string
|
||||
|
@ -19,7 +19,7 @@ func TestQuotePwshStr(t *testing.T) {
|
|||
{str: `C:\tmp\omp's dir\oh-my-posh.exe`, expected: `'C:\tmp\omp''s dir\oh-my-posh.exe'`},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
assert.Equal(t, tc.expected, quotePwshStr(tc.str), fmt.Sprintf("quotePwshStr: %s", tc.str))
|
||||
assert.Equal(t, tc.expected, quotePwshOrElvishStr(tc.str), fmt.Sprintf("quotePwshStr: %s", tc.str))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,6 @@ func (f Feature) Pwsh() Code {
|
|||
}
|
||||
}
|
||||
|
||||
func quotePwshStr(str string) string {
|
||||
func quotePwshOrElvishStr(str string) string {
|
||||
return fmt.Sprintf("'%s'", strings.ReplaceAll(str, "'", "''"))
|
||||
}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
set-env POSH_PID (to-string (randint 10000000000000 10000000000000000))
|
||||
set-env POSH_THEME '::CONFIG::'
|
||||
set-env POSH_THEME ::CONFIG::
|
||||
set-env POSH_SHELL_VERSION (elvish --version)
|
||||
set-env POWERLINE_COMMAND 'oh-my-posh'
|
||||
|
||||
var error-code = 0
|
||||
var _omp_error_code = 0
|
||||
var _omp_executable = ::OMP::
|
||||
|
||||
fn posh-after-command-hook {|m|
|
||||
var error = $m[error]
|
||||
if (is $error $nil) {
|
||||
set error-code = 0
|
||||
set _omp_error_code = 0
|
||||
} else {
|
||||
try {
|
||||
set error-code = $error[reason][exit-status]
|
||||
set _omp_error_code = $error[reason][exit-status]
|
||||
} catch {
|
||||
# built-in commands don't have a status code.
|
||||
set error-code = 1
|
||||
set _omp_error_code = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,10 +24,10 @@ set edit:after-command = [ $@edit:after-command $posh-after-command-hook~ ]
|
|||
|
||||
set edit:prompt = {
|
||||
var cmd-duration = (printf "%.0f" (* $edit:command-duration 1000))
|
||||
$_omp_executable print primary --shell=elvish --execution-time=$cmd-duration --status=$error-code --pwd=$pwd --shell-version=$E:POSH_SHELL_VERSION
|
||||
(external $_omp_executable) print primary --shell=elvish --execution-time=$cmd-duration --status=$_omp_error_code --pwd=$pwd --shell-version=$E:POSH_SHELL_VERSION
|
||||
}
|
||||
|
||||
set edit:rprompt = {
|
||||
var cmd-duration = (printf "%.0f" (* $edit:command-duration 1000))
|
||||
$_omp_executable print right --shell=elvish --execution-time=$cmd-duration --status=$error-code --pwd=$pwd --shell-version=$E:POSH_SHELL_VERSION
|
||||
(external $_omp_executable) print right --shell=elvish --execution-time=$cmd-duration --status=$_omp_error_code --pwd=$pwd --shell-version=$E:POSH_SHELL_VERSION
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue