package termutil func (buffer *Buffer) shrink(width uint16) { var replace []Line prevCursor := int(buffer.cursorPosition.Line) for i, line := range buffer.lines { line.shrink(width) // this line fits within the new width restriction, keep it as is and continue if line.Len() <= width { replace = append(replace, line) continue } wrappedLines := line.wrap(width) if prevCursor >= i { buffer.cursorPosition.Line += uint64(len(wrappedLines) - 1) } replace = append(replace, wrappedLines...) } buffer.cursorPosition.Col = buffer.cursorPosition.Col % width buffer.lines = replace } func (buffer *Buffer) grow(width uint16) { var replace []Line var current Line prevCursor := int(buffer.cursorPosition.Line) for i, line := range buffer.lines { if !line.wrapped { if i > 0 { replace = append(replace, current) } current = newLine() } if i == prevCursor { buffer.cursorPosition.Line -= uint64(i - len(replace)) } for _, cell := range line.cells { if len(current.cells) == int(width) { replace = append(replace, current) current = newLine() current.wrapped = true } current.cells = append(current.cells, cell) } } replace = append(replace, current) buffer.lines = replace } // deprecated func (buffer *Buffer) resizeView(width uint16, height uint16) { if buffer.viewHeight == 0 { buffer.viewWidth = width buffer.viewHeight = height return } // scroll to bottom buffer.scrollLinesFromBottom = 0 if width < buffer.viewWidth { // wrap lines if we're shrinking buffer.shrink(width) buffer.grow(width) } else if width > buffer.viewWidth { // unwrap lines if we're growing buffer.grow(width) } buffer.viewWidth = width buffer.viewHeight = height buffer.resetVerticalMargins(uint(buffer.viewHeight)) }