首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在powershell中调整窗口大小时,Write-Host with background colour用背景色填充整行

在powershell中调整窗口大小时,Write-Host with background colour用背景色填充整行
EN

Stack Overflow用户
提问于 2021-02-10 01:12:13
回答 1查看 255关注 0票数 2

例如,如果您在powershell会话中执行此命令

代码语言:javascript
复制
write-host 'hello' -ForegroundColor 'red' -BackgroundColor 'cyan'

调整窗口大小会导致背景色填满整行:

我已经在Windows终端、Windows控制台和Fluent终端上进行了测试,它们都表现出了这种行为。(我猜可能有一个虚拟终端序列/ANSI代码来解决这个问题,但我不知道这是什么)。

那么,我们如何防止这种情况的发生呢?

代码语言:javascript
复制
λ $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.1.1
PSEdition                      Core
GitCommitId                    7.1.1
OS                             Microsoft Windows 10.0.19041
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

编辑:作为测试,我尝试了以下方法:

代码语言:javascript
复制
write-host 'hello' -ForegroundColor 'red' -BackgroundColor 'cyan' -NoNewline; write-host 'world' -BackgroundColor black

这当然会显示“HelloWorld”,其中“World”没有背景颜色,或者更准确地说,与默认颜色(黑色)相同。

如果我们再前进一步,在背景颜色设置为黑色之后打印一个额外的空格,那么这并不能达到预期的响应,即在调整大小后,我们又看到背景颜色青色填充了整行。

因此,我们需要某种不可见的字符来阻止背景颜色的溢出,或者是一种完全不同的方法,而我目前还不知道这种方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 02:35:37

这是2017年conhost中的confirmed bug。所以,所有依赖于conhost的东西都会有这个bug。

这是windows控制台中的错误,而不是powershell中的错误。它在powershell之外是有buggy的(试试this,例如)。

控制台使用最后一个字符的颜色填充行,该颜色不是空格(0x20)、制表符(0x09)或换行符。

您可以尝试以下解决方案之一:

1-在行尾使用Non-Breaking space字符空间。这是唯一的空格单字节字符,是空格,控制台不会忽略它,也不是换行符。

代码语言:javascript
复制
write-host 'hello' -f 'red' -b 'cyan' -n;   write-host ([char]0xA0)

2-使用颜色与控制台颜色匹配的任何字符。这是更糟糕的,因为它被复制到剪贴板,输出等。

代码语言:javascript
复制
$hostBgColor = $Host.UI.RawUI.BackgroundColor
write-host 'hello' -f 'red' -b 'cyan' -n;   write-host 'X' -f $hostBgColor -b $hostBgColor

3-使用其他unicode多字节whitespace characters,但根据许多因素,它们可能看起来不同,包括字体和unicode支持int console\output file。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66123718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档