【发布时间】:2019-06-20 05:57:03
【问题描述】:
我正在尝试使用 Powershell (v5.1) 的内置 PSReadLine (v2) 模块来自定义 Powershell 控制台文本颜色。
以前版本的 PSReadLine 允许您为任何给定的令牌类型简单地指定 -Background 和 -Foreground 参数。但情况已不再如此。 PSReadLine v2 引入了使用 ANSI 转义码来定义颜色行为。我认为这可以提供更大的灵活性,但它要完成的任务非常复杂。关于这些代码的文档到处都是,并且高度依赖于宿主应用程序的实现,这使得找到答案变得更加困难。
简单地为文本前景着色(相对)很容易,例如:
set-psreadlineoption -colors @{
CommandColor = "`e[93m"
CommentColor = "`e[32m"
}
但是,如果您想引入装饰,例如粗体、下划线或我特别感兴趣的背景颜色和这些的组合,事情就会变得更加复杂。
SelectionColor(用不同的背景颜色突出显示选定的文本)的默认值为`e[35;43m。但是这个大提示仍然不足以泄露我正在寻找的语法秘密。
doc for Set-PSReadLineOption 非常实事求是地声明:
您可以指定其他转义序列,包括:
256色
24 位颜色
前景、背景或两者
反转,粗体
...但没有提供示例。
您将如何指定定义前景色和背景色或任何其他颜色和彩色装饰组合的转义码?
我发现有助于了解这些转义码的来源是: http://jafrog.com/2013/11/23/colors-in-terminal.html https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
但我无法完全理解这些。
已解决:
感谢@LotPings。我错误地假设转义码只能给他们一定数量的选项。事实上,我可以指定任意数量(或实现目标所需的数量)。比如:
$e = [char]0x1b
"$e[38;2;255;128;128;48;2;128;0;255;4mtest$e[0m"
... 将产生单词test,带有粉红色前景和紫色背景的下划线。分解:
【问题讨论】:
标签: powershell colors psreadline