T34: review round 2: bash 3.2 drops its DEBUG trap, which ran for key bindings, missed lone subshells and decided commands under extdebug, so it sends no C, and its D comes from the prompt by the command number; PowerShell takes a program's code only when the line's last pipeline ends in it, as its syntax tree and Get-Command name it; each check waits for the prompt before its line, so a repeated status is the line's own
This commit is contained in:
6 files changed
+89
-45
No files matched your search
@@ -11,7 +11,7 @@ function global:prompt {
|
||||
# Each native run sets a new $LASTEXITCODE, equal or not; strict mode refuses an unset one.
|
||||
$exit = Get-Variable LASTEXITCODE -Scope Global -ValueOnly -ErrorAction Ignore
|
||||
$ran = $null -ne $exit -and -not [object]::ReferenceEquals($exit, $global:ElyExit)
|
||||
$code = if ($ran -and $exit -ne 0) { $exit } else { 1 }
|
||||
$code = if ($global:ElyNative -and $ran -and $exit -ne 0) { $exit } else { 1 }
|
||||
}
|
||||
[Console]::Write("$esc]133;D;$code$bel")
|
||||
$global:ElyRan = $false
|
||||
@@ -38,6 +38,20 @@ if (Test-Path Function:\PSConsoleHostReadLine) {
|
||||
if (-not [string]::IsNullOrWhiteSpace($line)) {
|
||||
$global:ElyRan = $true
|
||||
$global:ElyExit = Get-Variable LASTEXITCODE -Scope Global -ValueOnly -ErrorAction Ignore
|
||||
# A program's exit code is the line's when the line's last pipeline ends in it.
|
||||
$global:ElyNative = $false
|
||||
$ast = [System.Management.Automation.Language.Parser]::ParseInput($line, [ref]$null, [ref]$null)
|
||||
# Strict mode refuses .Count on one statement alone, so the statements stay a list.
|
||||
$statements = @(if ($ast.EndBlock) { $ast.EndBlock.Statements })
|
||||
$last = if ($statements.Count) { $statements[$statements.Count - 1] }
|
||||
if ($last -is [System.Management.Automation.Language.PipelineAst]) {
|
||||
$elements = $last.PipelineElements
|
||||
$end = $elements[$elements.Count - 1]
|
||||
$name = if ($end -is [System.Management.Automation.Language.CommandAst]) { $end.GetCommandName() }
|
||||
$info = if ($name) { Get-Command -Name $name -ErrorAction Ignore | Select-Object -First 1 }
|
||||
while ($info -and $info.CommandType -eq 'Alias') { $info = $info.ResolvedCommand }
|
||||
$global:ElyNative = $null -ne $info -and $info.CommandType -in 'Application', 'ExternalScript'
|
||||
}
|
||||
[Console]::Write("$([char]27)]133;C$([char]7)")
|
||||
}
|
||||
$line
|
||||
|
||||
Reference in new issue
Block a user