Spaces added to prompt on shell launch (PowerShell/pwsh) #11510

Closed
opened 2026-01-31 02:49:38 +00:00 by claunia · 31 comments
Owner

Originally created by @yooakim on GitHub (Nov 20, 2020).

Originally assigned to: @DHowett on GitHub.

Environment

Win32NT 10.0.19042.0 Microsoft Windows NT 10.0.19042.0
Windows Terminal Version: 1.4.3141.0

https://github.com/justjanne/powerline-go

Steps to reproduce

Add the following to your PowerShell $PROFILE (adjust the path to the powerline-go exectuable to your local environment)

Function global:prompt {
    $pwd = $ExecutionContext.SessionState.Path.CurrentLocation
    $startInfo = New-Object System.Diagnostics.ProcessStartInfo
    $startInfo.FileName = "$ENV:OneDriveConsumer\Util\powerline-go.exe"
    $startInfo.Arguments = "-shell bare"
    $startInfo.Environment["TERM"] = "xterm-256color"
    $startInfo.CreateNoWindow = $true
    $startInfo.StandardOutputEncoding = [System.Text.Encoding]::UTF8
    $startInfo.RedirectStandardOutput = $true
    $startInfo.UseShellExecute = $false
    $startInfo.WorkingDirectory = $pwd
    $process = New-Object System.Diagnostics.Process
    $process.StartInfo = $startInfo
    $process.Start() | Out-Null
    $standardOut = $process.StandardOutput.ReadToEnd()
    $process.WaitForExit()
    $standardOut
}

Start a PowerShell (classic) or PowerShell terminal window via Windows Terminal. The first time the prompt function is called there are spaces inserted between the different prompt parts. Pressing Enter makes these disappear and the prompt works fine.

If I use the same profile without Windows Terminal launching PowerShell.exe directly it works fine. So I suspect this is related to Windows Terminal.

Here's an animated GIF that shows what is going on:

powerline-spaces

Expected behavior

I expect to see the prompt formatted correctly as follows:
powerline-go-expected

Actual behavior

This is what the prompt looks like when the PowerShell is first started:

powerline-go-actual
Originally created by @yooakim on GitHub (Nov 20, 2020). Originally assigned to: @DHowett on GitHub. # Environment ```none Win32NT 10.0.19042.0 Microsoft Windows NT 10.0.19042.0 Windows Terminal Version: 1.4.3141.0 https://github.com/justjanne/powerline-go ``` # Steps to reproduce Add the following to your PowerShell $PROFILE (adjust the path to the powerline-go exectuable to your local environment) ```PowerShell Function global:prompt { $pwd = $ExecutionContext.SessionState.Path.CurrentLocation $startInfo = New-Object System.Diagnostics.ProcessStartInfo $startInfo.FileName = "$ENV:OneDriveConsumer\Util\powerline-go.exe" $startInfo.Arguments = "-shell bare" $startInfo.Environment["TERM"] = "xterm-256color" $startInfo.CreateNoWindow = $true $startInfo.StandardOutputEncoding = [System.Text.Encoding]::UTF8 $startInfo.RedirectStandardOutput = $true $startInfo.UseShellExecute = $false $startInfo.WorkingDirectory = $pwd $process = New-Object System.Diagnostics.Process $process.StartInfo = $startInfo $process.Start() | Out-Null $standardOut = $process.StandardOutput.ReadToEnd() $process.WaitForExit() $standardOut } ``` Start a PowerShell (classic) or PowerShell terminal window via Windows Terminal. The first time the prompt function is called there are spaces inserted between the different prompt parts. Pressing `Enter` makes these disappear and the prompt works fine. If I use the same profile without Windows Terminal launching PowerShell.exe directly it works fine. So I suspect this is related to Windows Terminal. Here's an animated GIF that shows what is going on: ![powerline-spaces](https://user-images.githubusercontent.com/862546/99776375-013ac800-2b11-11eb-8c05-48a7c3f953ed.gif) # Expected behavior I expect to see the prompt formatted correctly as follows: <img width="720" alt="powerline-go-expected" src="https://user-images.githubusercontent.com/862546/99776755-9c33a200-2b11-11eb-9cbe-441844632c51.png"> # Actual behavior This is what the prompt looks like when the PowerShell is first started: <img width="720" alt="powerline-go-actual" src="https://user-images.githubusercontent.com/862546/99776660-70182100-2b11-11eb-963f-c907c4c9ffa0.png">
Author
Owner

@zadjii-msft commented on GitHub (Nov 20, 2020):

This might sound crazy, but if you highlight that first prompt line, the one with the spaces, then dismiss the selection, does it re-render correctly?

@zadjii-msft commented on GitHub (Nov 20, 2020): This might sound crazy, but if you highlight that first prompt line, the one with the spaces, then dismiss the selection, does it re-render correctly?
Author
Owner

@DHowett commented on GitHub (Nov 20, 2020):

It looks like you've customized your powershell profile somewhat? I can't reproduce this, but I am not using -NoLogo or have otherwise suppressed the startup banner. 🤔

@DHowett commented on GitHub (Nov 20, 2020): It looks like you've customized your powershell profile somewhat? I can't reproduce this, but I am not using `-NoLogo` or have otherwise suppressed the startup banner. 🤔
Author
Owner

@DHowett commented on GitHub (Nov 20, 2020):

Yeah, this only happens with -NoLogo. Interesting!

@zadjii-msft this is coming out of conpty with additional \e[1C in it, but only on the first-ever print to the screen. Everything else comes out fine.

First run

␛[38;5;250m␛[48;5;240m␛[H␣REDMOND\duhowett␛[38;5;240m␛[48;5;238m␛[1C␛[38;5;250m␛[1Cdhowett-sl␛[38;5;238m␛[48;5;31m␛[1C␛[38;5;15m␛[1C~␛[38;5;31m␛[48;5;236m␛[1C␛[38;5;15m␛[1C$␛[38;5;236m␛[49m␛[1C␛[1C␛

After Clear

␛[38;5;250m␛[48;5;240m␣REDMOND\duhowett␣␛[38;5;240m␛[48;5;238m␣␛[38;5;250mdhowett-sl␣␛[38;5;238m␛[48;5;31m␣␛[38;5;15m~␣␛[38;5;31m␛[48;5;236m␣␛[38;5;15m$␣␛[38;5;236m␛[49m␣␛[m
@DHowett commented on GitHub (Nov 20, 2020): Yeah, this only happens with `-NoLogo`. Interesting! @zadjii-msft this is coming out of conpty with additional `\e[1C` in it, but only on the first-ever print to the screen. _Everything else_ comes out fine. First run ``` ␛[38;5;250m␛[48;5;240m␛[H␣REDMOND\duhowett␛[38;5;240m␛[48;5;238m␛[1C␛[38;5;250m␛[1Cdhowett-sl␛[38;5;238m␛[48;5;31m␛[1C␛[38;5;15m␛[1C~␛[38;5;31m␛[48;5;236m␛[1C␛[38;5;15m␛[1C$␛[38;5;236m␛[49m␛[1C␛[1C␛ ``` After Clear ``` ␛[38;5;250m␛[48;5;240m␣REDMOND\duhowett␣␛[38;5;240m␛[48;5;238m␣␛[38;5;250mdhowett-sl␣␛[38;5;238m␛[48;5;31m␣␛[38;5;15m~␣␛[38;5;31m␛[48;5;236m␣␛[38;5;15m$␣␛[38;5;236m␛[49m␣␛[m ```
Author
Owner

@zadjii-msft commented on GitHub (Nov 20, 2020):

well that's batty. Thanks for investigating! @DHowett any chance you've got a oneliner repro for me that I can turn into a test? (if not that's cool too, this is probably enough to work off of)

EDIT: J/K read the OP again, that's simple enough. I was worried I had to install a module or something.

@zadjii-msft commented on GitHub (Nov 20, 2020): well that's batty. Thanks for investigating! @DHowett any chance you've got a oneliner repro for me that I can turn into a test? (if not that's cool too, this is probably enough to work off of) EDIT: J/K read the OP again, that's simple enough. I was worried I had to install a module or something.
Author
Owner

@DHowett commented on GitHub (Nov 20, 2020):

Nah, it's even easier!

test_8341.ps1

"`e[38;5;250m`e[48;5;240m REDMOND\duhowett `e[38;5;240m`e[48;5;238m `e[38;5;250mdhowett-sl `e[38;5;238m`e[48;5;31m `e[38;5;15m~ `e[38;5;31m`e[48;5;236m `e[38;5;15m$ `e[38;5;236m`e[49m `e[m"
sleep 100

wt nt pwsh -c test_8341.ps1
@DHowett commented on GitHub (Nov 20, 2020): Nah, it's even easier! ### `test_8341.ps1` ``` "`e[38;5;250m`e[48;5;240m REDMOND\duhowett `e[38;5;240m`e[48;5;238m `e[38;5;250mdhowett-sl `e[38;5;238m`e[48;5;31m `e[38;5;15m~ `e[38;5;31m`e[48;5;236m `e[38;5;15m$ `e[38;5;236m`e[49m `e[m" sleep 100 ``` ### ``` wt nt pwsh -c test_8341.ps1 ```
Author
Owner

@DHowett commented on GitHub (Nov 20, 2020):

Just so long as it's the first thing printed to the screen. I used the powershell core escape escape, so it won't work in Windows PowerShell (sorry)

@DHowett commented on GitHub (Nov 20, 2020): Just so long as it's the first thing printed to the screen. I used the powershell core escape escape, so it won't work in Windows PowerShell (sorry)
Author
Owner

@yooakim commented on GitHub (Dec 3, 2020):

I've been off-line for a while but thanks for the looking into this :-)

@yooakim commented on GitHub (Dec 3, 2020): I've been off-line for a while but thanks for the looking into this :-)
Author
Owner

@ntaken commented on GitHub (Jan 21, 2021):

hmm.. Have the same thing happening to me with Windows terminal Version: 1.4.3243.0 but with Ubuntu wsl after following this guide [https://docs.microsoft.com/sv-se/windows/terminal/tutorials/powerline-setup] .
Works fine with wsl.exe.

Resizing the window or open any file and close it will fix the stripes.

@ntaken commented on GitHub (Jan 21, 2021): hmm.. Have the same thing happening to me with Windows terminal Version: 1.4.3243.0 but with Ubuntu wsl after following this guide [https://docs.microsoft.com/sv-se/windows/terminal/tutorials/powerline-setup] . Works fine with wsl.exe. Resizing the window or open any file and close it will fix the stripes.
Author
Owner

@brunovieira97 commented on GitHub (Sep 11, 2021):

My Windows Terminal was updated yesterday and this started happening for me. Even though I always use up to date versions of everything (or did so until 2 months ago), this never happened before.

Any update on this?

@brunovieira97 commented on GitHub (Sep 11, 2021): My Windows Terminal was updated yesterday and this started happening for me. Even though I always use up to date versions of everything (or did so until 2 months ago), this never happened before. Any update on this?
Author
Owner

@ghost commented on GitHub (Sep 12, 2021):

I can confirm that this happens with the -NoLogo option, and only on the first prompt:

image

As a workaround, I've added a cls to my PS profile, which had no impact on launch time:

Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt Paradox
Clear-Host
@ghost commented on GitHub (Sep 12, 2021): I can confirm that this happens with the `-NoLogo` option, and only on the first prompt: ![image](https://user-images.githubusercontent.com/63101447/132992092-7bba28df-d230-46fd-95dc-01b27e278cba.png) As a workaround, I've added a `cls` to my PS profile, which had no impact on launch time: ```powershell Import-Module posh-git Import-Module oh-my-posh Set-PoshPrompt Paradox Clear-Host ```
Author
Owner

@DHowett commented on GitHub (Sep 13, 2021):

How strange! Would you be willing to try and capture this with the debug tap?

@DHowett commented on GitHub (Sep 13, 2021): How strange! Would you be willing to try and capture this with the [debug tap](https://github.com/microsoft/terminal/wiki/Enabling-the-debug-tap)?
Author
Owner

@DHowett commented on GitHub (Sep 13, 2021):

Wait, I forgot that we already had a repro for this. You can ignore that request!

@DHowett commented on GitHub (Sep 13, 2021): Wait, I forgot that we already had a repro for this. You can ignore that request!
Author
Owner

@brunovieira97 commented on GitHub (Sep 13, 2021):

@DHowett if you need any assistance in reproducing, or more information on it, count on me! I'm interested in helping in any way I can ;)

@brunovieira97 commented on GitHub (Sep 13, 2021): @DHowett if you need any assistance in reproducing, or more information on it, count on me! I'm interested in helping in any way I can ;)
Author
Owner

@wu-yue-yu commented on GitHub (Sep 16, 2021):

ah, I have the same problem. But it perfoms normally before, just becomes like this when I accidentally change the cmd profile. Then my wsl looks like this.

@wu-yue-yu commented on GitHub (Sep 16, 2021): ah, I have the same problem. But it perfoms normally before, just becomes like this when I accidentally change the cmd profile. Then my wsl looks like this.
Author
Owner

@wu-yue-yu commented on GitHub (Sep 16, 2021):

My Windows Terminal was updated yesterday and this started happening for me. Even though I always use up to date versions of everything (or did so until 2 months ago), this never happened before.

Any update on this?

Maybe because of the update? Me too. It jumps out recently.

@wu-yue-yu commented on GitHub (Sep 16, 2021): > My Windows Terminal was updated yesterday and this started happening for me. Even though I always use up to date versions of everything (or did so until 2 months ago), this never happened before. > > Any update on this? Maybe because of the update? Me too. It jumps out recently.
Author
Owner

@wu-yue-yu commented on GitHub (Sep 16, 2021):

It happens only start up, and has nothing to do with the logo, I think.
image

@wu-yue-yu commented on GitHub (Sep 16, 2021): It happens only start up, and has nothing to do with the logo, I think. ![image](https://user-images.githubusercontent.com/59756623/133552772-d5e0095a-6198-492f-ad9e-e914d2f74035.png)
Author
Owner

@wu-yue-yu commented on GitHub (Sep 16, 2021):

If there's anything before prompt, it works fine, even print some space before the prompt.
image

@wu-yue-yu commented on GitHub (Sep 16, 2021): If there's anything before prompt, it works fine, even print some space before the prompt. ![image](https://user-images.githubusercontent.com/59756623/133553267-fd5bbda6-2c00-4c1a-a866-2302bfc90c0f.png)
Author
Owner

@ayalon commented on GitHub (Sep 16, 2021):

I am also affected. I'm using Powerline Go
https://github.com/justjanne/powerline-go

@ayalon commented on GitHub (Sep 16, 2021): I am also affected. I'm using Powerline Go https://github.com/justjanne/powerline-go
Author
Owner

@wu-yue-yu commented on GitHub (Sep 16, 2021):

Also, when split the window, it will look like this:
image

@wu-yue-yu commented on GitHub (Sep 16, 2021): Also, when split the window, it will look like this: ![image](https://user-images.githubusercontent.com/59756623/133628181-c2404aa1-752c-4ef1-a34d-891a745d4c17.png)
Author
Owner

@chevcast commented on GitHub (Sep 27, 2021):

Same issue for me. I'm using powerline-shell in Ubuntu. This issue only occurs in Windows Terminal and not in any other terminal. Including Hyper terminal.

image

This is a fresh install of Windows Terminal and like others it only happens on first render. If I hit enter for a new prompt it renders correctly. The only setting I changed is to set the font to Fira Code which has the separator symbols in it and I set the cursor style to a solid bar. That's it. The rest is all default, though I have toggled plenty of render/appearance settings back and forth to see if anything affected it. No settings seem to affect it.

@chevcast commented on GitHub (Sep 27, 2021): Same issue for me. I'm using powerline-shell in Ubuntu. This issue only occurs in Windows Terminal and not in any other terminal. Including Hyper terminal. ![image](https://user-images.githubusercontent.com/874394/134835167-8211168d-c185-4ee3-8af4-264d33611516.png) This is a fresh install of Windows Terminal and like others it only happens on first render. If I hit enter for a new prompt it renders correctly. The only setting I changed is to set the font to `Fira Code` which has the separator symbols in it and I set the cursor style to a solid bar. That's it. The rest is all default, though I have toggled plenty of render/appearance settings back and forth to see if anything affected it. No settings seem to affect it.
Author
Owner

@chevcast commented on GitHub (Sep 27, 2021):

I can confirm that this happens with the -NoLogo option, and only on the first prompt:

image

As a workaround, I've added a cls to my PS profile, which had no impact on launch time:

Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt Paradox
Clear-Host

I just did the equivalent in my .bashrc for Ubuntu by putting a clear; at the bottom and this does "fix" the issue! So thanks for that. At least there's a workaround. It's a minor issue I know but it was annoying me lol

@chevcast commented on GitHub (Sep 27, 2021): > I can confirm that this happens with the `-NoLogo` option, and only on the first prompt: > > ![image](https://user-images.githubusercontent.com/63101447/132992092-7bba28df-d230-46fd-95dc-01b27e278cba.png) > > As a workaround, I've added a `cls` to my PS profile, which had no impact on launch time: > > ```powershell > Import-Module posh-git > Import-Module oh-my-posh > Set-PoshPrompt Paradox > Clear-Host > ``` I just did the equivalent in my `.bashrc` for Ubuntu by putting a `clear;` at the bottom and this does "fix" the issue! So thanks for that. At least there's a workaround. It's a minor issue I know but it was annoying me lol
Author
Owner

@singh-ramanpreet commented on GitHub (Oct 12, 2021):

The issue seems to be resolved for me after switching to "WSL from Microsoft Store".
https://devblogs.microsoft.com/commandline/a-preview-of-wsl-in-the-microsoft-store-is-now-available/

@singh-ramanpreet commented on GitHub (Oct 12, 2021): The issue seems to be resolved for me after switching to "WSL from Microsoft Store". https://devblogs.microsoft.com/commandline/a-preview-of-wsl-in-the-microsoft-store-is-now-available/
Author
Owner

@chevsunrun commented on GitHub (Oct 12, 2021):

Oh wow thanks for the link. Happy to see WSL progressing into a stand-alone app!

@chevsunrun commented on GitHub (Oct 12, 2021): Oh wow thanks for the link. Happy to see WSL progressing into a stand-alone app!
Author
Owner

@PilotBob commented on GitHub (Jan 7, 2022):

Just to be complete, this also happens when I open the Ubnutu / WSL2 / Bash shell in Terminal.

@PilotBob commented on GitHub (Jan 7, 2022): Just to be complete, this also happens when I open the Ubnutu / WSL2 / Bash shell in Terminal.
Author
Owner

@floatingrain commented on GitHub (Jan 31, 2022):

This problem still happens in Windows Terminal 1.12.3472.0

@floatingrain commented on GitHub (Jan 31, 2022): This problem still happens in Windows Terminal 1.12.3472.0
Author
Owner

@DHowett commented on GitHub (Feb 1, 2022):

HA! We finally have a root cause for this. I ran into a different issue, where the "version update" notification was losing the background color around the edges, and it all started to fall into place.

image

If we are painting the first frame or any frame after you clear the entire screen, as an optimization[^1] we don't send a bunch of space characters. We neglected to check whether those space characters were meaningful (had background colors, underlines, other attributes...). This happens for each run of text (so, region of text bordered by a color/attribute change), not per line.

Proximal area of failure:

27de97bf93/src/renderer/vt/paint.cpp (L448-L462)

I wonder if we can use this function to help:

27de97bf93/src/buffer/out/TextAttribute.hpp (L135-L137)

[^1] The ConPTY API tries very hard to pretend that it is not translating a buffer of 120x30 cells into VT . . . so it lies, cheats and steals sometimes. The buffer contains 3900 empty spaces on startup, so we try not to send them to apps.

@DHowett commented on GitHub (Feb 1, 2022): HA! We finally have a root cause for this. I ran into a different issue, where the "version update" notification was losing the background color around the edges, and it all started to fall into place. <img width="496" alt="image" src="https://user-images.githubusercontent.com/189190/152048335-123fbc32-56ed-45a1-b066-f970f2dec9de.png"> If we are painting the first frame or any frame after you clear the entire screen, as an optimization[^1] we don't send a bunch of space characters. We neglected to check whether those space characters were _meaningful_ (had background colors, underlines, other attributes...). This happens for each run of text (so, region of text bordered by a color/attribute change), not per line. Proximal area of failure: https://github.com/microsoft/terminal/blob/27de97bf9325d02c6e5bf13e005e2c805ac963a3/src/renderer/vt/paint.cpp#L448-L462 I wonder if we can use this function to help: https://github.com/microsoft/terminal/blob/27de97bf9325d02c6e5bf13e005e2c805ac963a3/src/buffer/out/TextAttribute.hpp#L135-L137 [^1] The ConPTY API tries very hard to pretend that it is not translating a buffer of 120x30 cells into VT . . . so it lies, cheats and steals sometimes. The buffer contains 3900 empty spaces on startup, so we try not to send them to apps.
Author
Owner

@DHowett commented on GitHub (Feb 17, 2022):

image

It's testable!
I am not certain the right way to fix it, but it's fixable too. The test passes as of c9e2069971, but the attribute math is not correct (to which I suspect @j4james will attest)

@DHowett commented on GitHub (Feb 17, 2022): <img width="278" alt="image" src="https://user-images.githubusercontent.com/189190/154380486-d4ee12af-7b9f-4c69-adf9-c8ab30728a20.png"> It's testable! I am not certain the right way to fix it, but it's fixable too. The test passes as of https://github.com/microsoft/terminal/commit/c9e206997106eeecbaa287d9f41e4ccdd6f835e1, but the attribute math is not correct (to which I suspect @j4james will attest)
Author
Owner

@ghost commented on GitHub (Aug 18, 2022):

:tada:This issue was addressed in #13665, which has now been successfully released as Windows Terminal v1.14.228.🎉

Handy links:

@ghost commented on GitHub (Aug 18, 2022): :tada:This issue was addressed in #13665, which has now been successfully released as `Windows Terminal v1.14.228`.:tada: Handy links: * [Release Notes](https://github.com/microsoft/terminal/releases/tag/v1.14.228) * [Store Download](https://www.microsoft.com/store/apps/9n8g5rfz9xk3?cid=storebadge&ocid=badge)
Author
Owner

@ghost commented on GitHub (Aug 18, 2022):

:tada:This issue was addressed in #13665, which has now been successfully released as Windows Terminal Preview v1.15.228.🎉

Handy links:

@ghost commented on GitHub (Aug 18, 2022): :tada:This issue was addressed in #13665, which has now been successfully released as `Windows Terminal Preview v1.15.228`.:tada: Handy links: * [Release Notes](https://github.com/microsoft/terminal/releases/tag/v1.15.228) * [Store Download](https://www.microsoft.com/store/apps/9n8g5rfz9xk3?cid=storebadge&ocid=badge)
Author
Owner

@Un1q32 commented on GitHub (Dec 1, 2022):

i seem to have a similar issue
Screenshot (4) edit

It's different on different font sizes. The above screenshot is with a font size of 12, but with a font size of 13 the gaps disappear.

@Un1q32 commented on GitHub (Dec 1, 2022): i seem to have a similar issue ![Screenshot (4) edit](https://user-images.githubusercontent.com/57970114/204942696-1762b32a-3c02-4487-9580-d3ba6ec93301.png) It's different on different font sizes. The above screenshot is with a font size of 12, but with a font size of 13 the gaps disappear.
Author
Owner

@zadjii-msft commented on GitHub (Dec 5, 2022):

@OldWorldOrdr Nah, that's more like, well, one of these: https://github.com/microsoft/terminal/issues?q=is%3Aissue+is%3Aopen+line+drawing

There's a few of those, so it's hard to point the finger at just one.

@zadjii-msft commented on GitHub (Dec 5, 2022): @OldWorldOrdr Nah, that's more like, well, one of these: https://github.com/microsoft/terminal/issues?q=is%3Aissue+is%3Aopen+line+drawing There's a few of those, so it's hard to point the finger at just one.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#11510