Remove while loop in GetViewIntoMessageBuffer, closes #12
This commit is contained in:
parent
82678907ba
commit
65bf58731f
|
@ -388,20 +388,14 @@ namespace tgcli {
|
||||||
if (absoluteCursorPosition < bufferWidth - wraparoundOffsetPre - 1)
|
if (absoluteCursorPosition < bufferWidth - wraparoundOffsetPre - 1)
|
||||||
return (TruncateString(message, bufferWidth, $"{Ansi.Inverse}>{Ansi.InverseOff}"), absoluteCursorPosition);
|
return (TruncateString(message, bufferWidth, $"{Ansi.Inverse}>{Ansi.InverseOff}"), absoluteCursorPosition);
|
||||||
|
|
||||||
// now we can be sure the message needs at least one wrap
|
|
||||||
|
|
||||||
// first wrap
|
|
||||||
// get rid of the content shown on the zeroth wrap, which is buf width minus wraparoundPreW (respects > character on screen edge)
|
|
||||||
var finalMessage = message[(bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPost)..];
|
|
||||||
var finalCursorPos = absoluteCursorPosition - bufferWidth + wraparoundOffsetPreW + wraparoundOffsetPostW;
|
var finalCursorPos = absoluteCursorPosition - bufferWidth + wraparoundOffsetPreW + wraparoundOffsetPostW;
|
||||||
|
var wraparounds = (finalCursorPos - wraparoundOffsetPostW) / (bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPostW);
|
||||||
|
finalCursorPos += wraparoundOffsetPostW * wraparounds;
|
||||||
|
finalCursorPos %= bufferWidth - wraparoundOffsetPreW;
|
||||||
|
|
||||||
// successive wraps
|
var messageOffset = (bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPostW) * wraparounds;
|
||||||
// repeat above steps (but respective of the new < character) until the string fits into the buffer
|
var finalMessage = message[(bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPost)..];
|
||||||
// it fits into the buffer when cursorPos >= bufferwidth minus wraparound (this time respecting > character absent on first wrap)
|
finalMessage = finalMessage[messageOffset..];
|
||||||
while (finalCursorPos >= bufferWidth - wraparoundOffsetPreW) {
|
|
||||||
finalMessage = finalMessage[(bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPostW)..];
|
|
||||||
finalCursorPos = finalCursorPos - bufferWidth + wraparoundOffsetPreW + wraparoundOffsetPostW;
|
|
||||||
}
|
|
||||||
|
|
||||||
finalMessage = TruncateString(finalMessage, bufferWidth - 1, $"{Ansi.Inverse}>{Ansi.InverseOff}");
|
finalMessage = TruncateString(finalMessage, bufferWidth - 1, $"{Ansi.Inverse}>{Ansi.InverseOff}");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue