From 04438a85443cf312e39bf1aab3d0d875ac3fca4b Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Fri, 4 Aug 2023 20:50:29 +0100 Subject: [PATCH] Improved the scrollingregion --- TermTk/TTkWidgets/TTkTerminal/terminal_alt.py | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/TermTk/TTkWidgets/TTkTerminal/terminal_alt.py b/TermTk/TTkWidgets/TTkTerminal/terminal_alt.py index 4e753e6a..fc26eefd 100644 --- a/TermTk/TTkWidgets/TTkTerminal/terminal_alt.py +++ b/TermTk/TTkWidgets/TTkTerminal/terminal_alt.py @@ -65,7 +65,7 @@ class _TTkTerminalAltScreen(): # sb = min(h,oh) # else:# Terminal height increasing # sb = h-oh+sb - self._scrollingRegion = (st,sb) + # self._scrollingRegion = (st,sb) self._scrollingRegion = (1,h) newCanvas = TTkCanvas(width=w, height=h) s = (0,0,w,h) @@ -89,7 +89,11 @@ class _TTkTerminalAltScreen(): lines = line.split('\n') for i,l in enumerate(lines): if i: - self._terminalCursor = (x,y) = (0,min(h-1,y+1)) + y+=1 + if y >= h: + self._CSI_S_SU(y-h+1, None) # scroll up + y=h-1 + self._terminalCursor = (x,y) ls = l.split('\r') for ii,ll in enumerate(ls): if ii: @@ -260,7 +264,16 @@ class _TTkTerminalAltScreen(): # XTPOPCOLOR (default = 0) (XTREPORTCOLORS), xterm. # CSI Ps S Scroll up Ps lines (default = 1) (SU), VT420, ECMA-48. - def _CSI_S_SU(self, ps, _): pass + def _CSI_S_SU(self, ps, _): + t,b = self._scrollingRegion + w,h = self._w, self._h + #TODO: Avoid this HACK + baseData = [' ']*w + baseColors = [TTkColor.RST]*w + self._canvas._data[b:b] = [baseData.copy() for _ in range(ps)] + self._canvas._colors[b:b] = [baseColors.copy() for _ in range(ps)] + self._canvas._data = self._canvas._data[:t] + self._canvas._data[t+ps:] + self._canvas._colors = self._canvas._colors[:t] + self._canvas._colors[t+ps:] # CSI ? Pi ; Pa ; Pv S # Set or request graphics attribute (XTSMGRAPHICS), xterm. If @@ -1110,7 +1123,7 @@ class _TTkTerminalAltScreen(): # Set Scrolling Region [top;bottom] (default = full size of # window) (DECSTBM), VT100. def _CSI_r_DECSTBM(self, top, bottom): - self._scrollingRegion = (top-1, bottom-1) + self._scrollingRegion = (top-1, bottom) # CSI ? Pm r # Restore DEC Private Mode Values (XTRESTORE), xterm. The value @@ -1492,7 +1505,7 @@ class _TTkTerminalAltScreen(): 'L': _CSI_L_IL, # CSI Ps L Insert Ps Line(s) (default = 1) (IL). # 'M': _CSI_M_DL, # 'P': _CSI_P_DCH, - # 'S': _CSI_S_SU, + 'S': _CSI_S_SU, # CSI Ps S Scroll up Ps lines (default = 1) (SU), VT420, ECMA-48. # 'T': _CSI_T_SD, # 'X': _CSI_X_ECH, # 'Z': _CSI_Z_CBT,