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)
|
||||
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 wraparounds = (finalCursorPos - wraparoundOffsetPostW) / (bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPostW);
|
||||
finalCursorPos += wraparoundOffsetPostW * wraparounds;
|
||||
finalCursorPos %= bufferWidth - wraparoundOffsetPreW;
|
||||
|
||||
// successive wraps
|
||||
// repeat above steps (but respective of the new < character) until the string fits into the buffer
|
||||
// it fits into the buffer when cursorPos >= bufferwidth minus wraparound (this time respecting > character absent on first wrap)
|
||||
while (finalCursorPos >= bufferWidth - wraparoundOffsetPreW) {
|
||||
finalMessage = finalMessage[(bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPostW)..];
|
||||
finalCursorPos = finalCursorPos - bufferWidth + wraparoundOffsetPreW + wraparoundOffsetPostW;
|
||||
}
|
||||
var messageOffset = (bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPostW) * wraparounds;
|
||||
var finalMessage = message[(bufferWidth - wraparoundOffsetPreW - wraparoundOffsetPost)..];
|
||||
finalMessage = finalMessage[messageOffset..];
|
||||
|
||||
finalMessage = TruncateString(finalMessage, bufferWidth - 1, $"{Ansi.Inverse}>{Ansi.InverseOff}");
|
||||
|
||||
|
|
Loading…
Reference in a new issue