将日期时间添加到posh-hg提示符

时间:2016-04-04 20:07:16

标签: powershell mercurial

我已按如下方式更改了我的Powershell配置文件,以便在posh-hg提示符中包含datetime:

if(!(Test-Path function:\TabExpansion)) { New-Item function:\Global:TabExpansion -value '' | Out-Null }

# Load posh-hg example profile
. 'C:\ProgramData\chocolatey\lib\Posh-HG\JeremySkinner-posh-hg-e273b0d\profile.example.ps1'

Rename-Item Function:\Prompt PoshHGPrompt -Force
function Prompt() {if(Test-Path Function:\PrePoshHGPrompt){++$global:poshScope; New-Item function:\script:Write-host -value "param([object] `$object, `$backgroundColor, `$foregroundColor, [switch] `$nonewline) " -Force | Out-Null;$private:p = PrePoshHGPrompt; if(--$global:poshScope -eq 0) {Remove-Item function:\Write-Host -Force}}PoshHGPrompt}

$global:HgPromptSettings.BeforeText = " [$(Get-Date -format g)] `n["

由于某种原因,日期根本没有更新。我怀疑它可能与posh-hg如何建立提示有关,但这有点疯狂猜测。

2 个答案:

答案 0 :(得分:1)

目前,您无法使用BeforeText进行操作。

如果您look at the codeBeforeText作为字符串(L29)传递到Write-Prompt

Write-Prompt $s.BeforeText -BackgroundColor $s.BeforeBackgroundColor -ForegroundColor $s.BeforeForegroundColor

为了实现这一点,必须更改Write-Prompt功能代码:

function Write-Prompt($Object, $ForegroundColor, $BackgroundColor = -1) {
    $parameters = @{
        'NoNewLine' = $True;
        'ForegroundColor' = $ForegroundColor;
    }

    if ($Object -is [ScriptBlock]) {
        $parameters.Add('Object', (&$Object))
    } else {
        $parameters.Add('Object', $Object)
    }

    if ($BackgroundColor -ge 0) {
        $parameters.Add('BackgroundColor', $BackgroundColor)
    }

    Write-Host @parameters
}

我确信可能需要进行一些更改以使其完美,但无论如何......

然后,您可以像这样设置$global:HgPromptSettings.BeforeText

$global:HgPromptSettings.BeforeText = {" [$(Get-Date -format g)] `n["}

答案 1 :(得分:0)

我试图对$global:GitPromptSettings.DefaultPromptPrefix = '$(Get-Date -format HH:mm:ss) '做同样的事情,并得到相同的结果:时间戳在会话开始时评估一次,之后被修复。

所以我搜索了互联网,发现了关于posh-hg的这个帖子,并得出结论,这对于posh-git也是如此。

同一天晚上,我正在阅读git后问题,并发现this thread关于在提示中添加'副作用'。考虑到我的失败,我添加了一条评论,告诉它可能因为'仅评估一次'而无法工作。

但是看得出来!事实证明,我的powershell知识完全像我害怕的那样有限:

  

@rkeithhill:提供字符串时要小心使用单引号。如果你使用双引号,任何变量/子表达式,即$()只会被eval一次。

所以现在我的个人资料中有{{1}},并在我的提示前面加上时间戳。原因是,我不知道这是否适用于posh-hg,但至少你可以试试。