Make PSReadline render correct portion of prompt on Unix when it's a multi-line string (#3867)

Check whether the prompt is multi-line or not. If it is, then only use the part that is shown in the input line.
This commit is contained in:
Dongbo Wang 2017-05-25 17:26:39 -07:00 committed by GitHub
parent c29bd7d684
commit e75cff662a

View file

@ -560,6 +560,13 @@ namespace Microsoft.PowerShell
#if UNIX // TODO: not necessary if ReadBufferLines worked, or if rendering worked on spans instead of complete lines
string newPrompt = GetPrompt();
int index = newPrompt.LastIndexOf('\n');
if (index != -1)
{
// The prompt text could be a multi-line string, and in such case
// we only want the part of it that is shown on the input line.
newPrompt = newPrompt.Substring(index + 1);
}
var bufferLineCount = (newPrompt.Length) / (_console.BufferWidth) + 1;
_consoleBuffer = ReadBufferLines(_initialY, bufferLineCount);