6

我喜欢在我的 PowerShell 提示符中包含 Mercurial/Git 存储库状态。有时这会大大减慢prompt()函数的运行速度,导致等待很长时间,直到您可以开始在 shell 中输入。我想知道,是否可以更新提示异步?

理想情况下,它会:

  1. Write-Host当前目录(典型提示)
  2. 开始在后台收集回购状态。
  3. 收集到 repo 状态后,假设prompt没有再次调用,将 repo 状态插入到提示中。

有没有人这样做过?

4

1 回答 1

5

不是本身。

您不能异步更新提示,因为提示只返回文本,并且只要完成顶级命令,就会在主机中调用它。

您可以重写提示来执行诸如检查数据源或异步更新的变量之类的操作。因此,在命令运行时提示不会不断变化,但它不会挂起一段时间,因为它只是在查找数据。

更棘手的是,它进入了试图在事后偷看执行结果的游戏。PowerShell 不会保留它们,除非它们被分配给某些东西。因此,要正确执行此操作,必须覆盖 Out-Default(仅适用于 ISE、PowerGUI 等,而不适用于 powershell.exe)。覆盖它并不难,但它需要了解很多 PowerShell 巫术,即使按照我令人印象深刻的标准。

好的方面来说,我显然一直在思考这个问题,并且有一个模块可以做很多这样的事情,我只是在确定我要如何处理它以及它是否保留在自己的模块中或加入我们构建的其他模块之一。

我会在外出时更新它,但这个路线图应该会有很大帮助。

简短的回答是您无法更新提示异步,但您可以让它变得更快,并且这样做所需的技巧打开了许多更酷的门。

希望这可以帮助

于 2012-05-31T23:18:08.167 回答