Browse Source

Added configurable sigmask for CTRL-C, CTRL-Z, CTRL-S

pull/50/head
Eugenio Parodi 4 years ago
parent
commit
c9390a98a8
  1. 2
      TermTk/TTkCore/TTkTerm/readinputlinux_thread.py
  2. 21
      TermTk/TTkCore/TTkTerm/term.py
  3. 4
      TermTk/TTkCore/ttk.py
  4. 9
      demo/showcase/textedit.py

2
TermTk/TTkCore/TTkTerm/readinputlinux_thread.py

@ -41,7 +41,7 @@ class ReadInput():
threading.Thread(target=self._pullInputThread).start()
def _pullInputThread(self):
_fn = sys.stdin.fileno()
_fn = sys.stdin
_attr = termios.tcgetattr(_fn)
tty.setcbreak(_fn)

21
TermTk/TTkCore/TTkTerm/term.py

@ -80,6 +80,11 @@ class TTkTerm():
def hide():
TTkTerm.push(TTkTerm.Cursor.HIDE)
class Sigmask():
CTRL_C = 0x0001
CTRL_S = 0x0002
CTRL_Z = 0x0004
title: str = "TermTk"
mouse: bool = True
width: int = 0
@ -87,20 +92,34 @@ class TTkTerm():
_sigWinChCb = None
# Save treminal attributes during the initialization in order to
# restore later the original states
_termAttr = termios.tcgetattr(sys.stdin)
@staticmethod
def init(mouse: bool = True, title: str = "TermTk"):
def init(mouse: bool = True, title: str = "TermTk", sigmask=0):
TTkTerm.title = title
TTkTerm.mouse = mouse
TTkTerm.push(TTkTerm.ALT_SCREEN + TTkTerm.CLEAR + TTkTerm.Cursor.HIDE + TTkTerm.escTitle(TTkTerm.title))
if TTkTerm.mouse:
TTkTerm.push(TTkTerm.Mouse.ON)
TTkTerm.setEcho(False)
if sigmask:
attr = termios.tcgetattr(sys.stdin)
if sigmask & TTkTerm.Sigmask.CTRL_C:
attr[6][termios.VINTR]=0
if sigmask & TTkTerm.Sigmask.CTRL_S:
attr[6][termios.VSTOP]=0
if sigmask & TTkTerm.Sigmask.CTRL_Z:
attr[6][termios.VSUSP]=0
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, attr)
@staticmethod
def exit():
TTkTerm.push(TTkTerm.Mouse.OFF + TTkTerm.Mouse.DIRECT_OFF)
TTkTerm.push(TTkTerm.CLEAR + TTkTerm.NORMAL_SCREEN + TTkTerm.Cursor.SHOW + TTkTerm.escTitle())
TTkTerm.setEcho(True)
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, TTkTerm._termAttr)
@staticmethod
def stop():

4
TermTk/TTkCore/ttk.py

@ -44,6 +44,7 @@ class TTk(TTkWidget):
'_name', '_running', '_input',
'_events', '_key_events', '_mouse_events', '_screen_events',
'_title',
'_sigmask',
#Signals
'eventKeyPress', 'eventMouse' )
@ -59,6 +60,7 @@ class TTk(TTkWidget):
self._mouse_events = queue.Queue()
self._screen_events = queue.Queue()
self._title = kwargs.get('title','TermTk')
self._sigmask = kwargs.get('sigmask', TTkK.NONE)
self.setFocusPolicy(TTkK.ClickFocus)
self.hide()
try:
@ -113,7 +115,7 @@ class TTk(TTkWidget):
self._running = True
# Keep track of the multiTap to avoid the extra key release
lastMultiTap = False
TTkTerm.init(title=self._title)
TTkTerm.init(title=self._title, sigmask=self._sigmask)
self._mainloop()
#except Exception as e:
# TTkLog.error(f"{e}")

9
demo/showcase/textedit.py

@ -226,17 +226,20 @@ def main():
ttk.TTkLog.use_default_file_logging()
root = ttk.TTk()
root = ttk.TTk(sigmask=ttk.TTkTerm.Sigmask.CTRL_S | ttk.TTkTerm.Sigmask.CTRL_Z | ttk.TTkTerm.Sigmask.CTRL_C)
if windowed:
rootTree = ttk.TTkWindow(parent=root,pos = (0,0), size=(70,40), title="Test Text Edit", layout=ttk.TTkGridLayout(), border=True)
else:
rootTree = root
root.setLayout(ttk.TTkGridLayout())
split = ttk.TTkSplitter(parent=rootTree)
split = ttk.TTkSplitter()
document = ttk.TTkTextDocument()
demoTextEdit(split, document)
demoTextEditSecondary(split, document)
rootTree.layout().addWidget(ttk.TTkKeyPressView(maxHeight=3),1,0)
rootTree.layout().addWidget(split,0,0,1,2)
rootTree.layout().addWidget(quitbtn := ttk.TTkButton(border=True, text="Quit", maxWidth=6),1,0)
rootTree.layout().addWidget(ttk.TTkKeyPressView(maxHeight=3),1,1)
quitbtn.clicked.connect(root.quit)
root.mainloop()
if __name__ == "__main__":

Loading…
Cancel
Save