Browse Source

Fix resize terminal crash

pull/172/head
Eugenio Parodi 3 years ago
parent
commit
f71bdc3578
  1. 7
      TermTk/TTkWidgets/TTkTerminal/terminal_screen.py
  2. 3
      TermTk/TTkWidgets/TTkTerminal/terminal_screen_CSI.py
  3. 4
      TermTk/TTkWidgets/TTkTerminal/terminalview.py
  4. 6
      tests/timeit/20.thread.01.mutex.py

7
TermTk/TTkWidgets/TTkTerminal/terminal_screen.py

@ -81,6 +81,10 @@ class _TTkTerminalScreen(_TTkTerminalScreen_CSI, _TTkTerminalScreen_C1):
return self._terminalCursor
def resize(self, w, h):
# I normalize the size to the default terminal
# to avoid negative or zerosized term
w = max(80,w)
h = max(24,h)
ow, oh = self._w, self._h
# st,sb = self._scrollingRegion
# if oh <= h: # Terminal height decreasing
@ -94,13 +98,13 @@ class _TTkTerminalScreen(_TTkTerminalScreen_CSI, _TTkTerminalScreen_C1):
newCanvas = TTkCanvas(width=w, height=h)
s = (0,0,w,h)
newCanvas.paintCanvas(self._canvas,s,s,s)
self._canvas = newCanvas
self._canvasNewLine += [True]*h
self._canvasLineSize += [0]*h
self._canvasNewLine = self._canvasNewLine[:h]
self._canvasLineSize = self._canvasLineSize[:h]
self._canvas = newCanvas
x,y = self._terminalCursor
self._terminalCursor = (max(0,min(x,w-1)),max(0,min(y,h-1)))
@ -109,6 +113,7 @@ class _TTkTerminalScreen(_TTkTerminalScreen_CSI, _TTkTerminalScreen_C1):
w,h = self._w, self._h
st,sb = self._scrollingRegion
self._last = txt[-1] if txt else None
# TTkLog.error(f"P: {x=} {y=} {w=} {h=} {len(txt)=}")
for bi, tout in enumerate(txt.split('\a')): # grab the bells
if bi:

3
TermTk/TTkWidgets/TTkTerminal/terminal_screen_CSI.py

@ -473,7 +473,8 @@ class _TTkTerminalScreen_CSI():
# CSI Ps d Line Position Absolute [row] (default = [1,column]) (VPA).
def _CSI_d_VPA(self, ps, _):
x,y = self._terminalCursor
self._terminalCursor = (x,ps-1)
w,h = self._w, self._h
self._terminalCursor = (x,max(0,min(h-1,ps-1)))
# CSI Ps e Line Position Relative [rows] (default = [row+1,column])
# (VPR).

4
TermTk/TTkWidgets/TTkTerminal/terminalview.py

@ -159,8 +159,6 @@ class TTkTerminalView(TTkAbstractScrollView, _TTkTerminal_CSI_DEC):
def _resizeScreen(self):
w,h = self.size()
self._screen_current.resize(w,h)
def resizeEvent(self, w: int, h: int):
if self._fd:
# s = struct.pack('HHHH', 0, 0, 0, 0)
# t = fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ, s)
@ -169,6 +167,8 @@ class TTkTerminalView(TTkAbstractScrollView, _TTkTerminal_CSI_DEC):
t = fcntl.ioctl(self._fd, termios.TIOCSWINSZ, s)
# termios.tcsetwinsize(self._fd,(h,w))
def resizeEvent(self, w: int, h: int):
if self._resize_pipe:
os.write(self._resize_pipe[1], b'resize')

6
tests/timeit/20.thread.01.muitex.py → tests/timeit/20.thread.01.mutex.py

@ -35,7 +35,8 @@ def test1():
ret = 1
mutex.acquire()
for x in test:
ret = max(ret,x*x)
# ret = max(ret,x*x)
ret += x # max(ret,x*x)
mutex.release()
return ret
@ -43,7 +44,8 @@ def test2():
ret = 1
for x in test:
mutex.acquire()
ret = max(ret,x*x)
# ret = max(ret,x*x)
ret += x # max(ret,x*x)
mutex.release()
return ret
Loading…
Cancel
Save