From 79fbd1631238fec4ca1decc7303c690a30357643 Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Sun, 14 Aug 2022 20:49:06 +0100 Subject: [PATCH] Separate terminal '\n' from '\r' to capture CTRL-J --- TermTk/TTkCore/TTkTerm/inputkey.py | 5 +++-- TermTk/TTkCore/TTkTerm/term.py | 14 ++++++++++++++ docs/MDNotes/Resources.md | 5 ++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/TermTk/TTkCore/TTkTerm/inputkey.py b/TermTk/TTkCore/TTkTerm/inputkey.py index f2353969..7920bb03 100644 --- a/TermTk/TTkCore/TTkTerm/inputkey.py +++ b/TermTk/TTkCore/TTkTerm/inputkey.py @@ -85,6 +85,7 @@ def _translate_key(key): "\t" : ( TTkK.Key_Tab , TTkK.NoModifier ) , "\033[Z" : ( TTkK.Key_Tab , TTkK.ShiftModifier ) , "\n" : ( TTkK.Key_Enter , TTkK.NoModifier ) , + "\r" : ( TTkK.Key_Enter , TTkK.NoModifier ) , "\033[A" : ( TTkK.Key_Up , TTkK.NoModifier ) , "\033[B" : ( TTkK.Key_Down , TTkK.NoModifier ) , "\033[C" : ( TTkK.Key_Right , TTkK.NoModifier ) , @@ -224,10 +225,10 @@ def _translate_key(key): '\x07': ( TTkK.Key_G , TTkK.ControlModifier ), '\x08': ( TTkK.Key_H , TTkK.ControlModifier ), # '\x09': ( TTkK.Key_I , TTkK.ControlModifier ), # Tab = '\t' = 0x09 - # '\x0a': ( TTkK.Key_J , TTkK.ControlModifier ), # Enter = '\n' = 0x0a + '\x0a': ( TTkK.Key_J , TTkK.ControlModifier ), # Enter = '\n' = 0x0a '\x0b': ( TTkK.Key_K , TTkK.ControlModifier ), '\x0c': ( TTkK.Key_L , TTkK.ControlModifier ), - '\x0d': ( TTkK.Key_M , TTkK.ControlModifier ), + # '\x0d': ( TTkK.Key_M , TTkK.ControlModifier ), # Enter = '\r' = 0x0d '\x0e': ( TTkK.Key_N , TTkK.ControlModifier ), '\x0f': ( TTkK.Key_O , TTkK.ControlModifier ), '\x10': ( TTkK.Key_P , TTkK.ControlModifier ), diff --git a/TermTk/TTkCore/TTkTerm/term.py b/TermTk/TTkCore/TTkTerm/term.py index 6487888d..6117bef5 100644 --- a/TermTk/TTkCore/TTkTerm/term.py +++ b/TermTk/TTkCore/TTkTerm/term.py @@ -140,6 +140,7 @@ class TTkTerm(): if TTkTerm.mouse: TTkTerm.push(TTkTerm.Mouse.ON) TTkTerm.setEcho(False) + TTkTerm.CRNL(False) TTkTerm.setSigmask(sigmask, False) @staticmethod @@ -147,6 +148,7 @@ class TTkTerm(): TTkTerm.push(TTkTerm.Mouse.OFF + TTkTerm.Mouse.DIRECT_OFF) TTkTerm.push(TTkTerm.CLEAR + TTkTerm.NORMAL_SCREEN + TTkTerm.Cursor.SHOW + TTkTerm.escTitle()) TTkTerm.setEcho(True) + TTkTerm.CRNL(True) termios.tcsetattr(sys.stdin, termios.TCSADRAIN, TTkTerm._termAttr) @staticmethod @@ -154,6 +156,7 @@ class TTkTerm(): TTkTerm.push(TTkTerm.Mouse.OFF + TTkTerm.Mouse.DIRECT_OFF) TTkTerm.push(TTkTerm.CLEAR + TTkTerm.NORMAL_SCREEN + TTkTerm.Cursor.SHOW + TTkTerm.escTitle()) TTkTerm.setEcho(True) + TTkTerm.CRNL(True) @staticmethod def cont(): @@ -161,6 +164,7 @@ class TTkTerm(): if TTkTerm.mouse: TTkTerm.push(TTkTerm.Mouse.ON) TTkTerm.setEcho(False) + TTkTerm.CRNL(False) @staticmethod def escTitle(txt = "") -> str: @@ -187,6 +191,16 @@ class TTkTerm(): else: l &= ~termios.ECHO termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, [i,o,c,l,isp,osp,cc]) + @staticmethod + def CRNL(val: bool): + #Translate carriage return to newline on input (unless IGNCR is set). + # '\n' CTRL-J + # '\r' CTRL-M (Enter) + (i,o,c,l,isp,osp,cc) = termios.tcgetattr(sys.stdin.fileno()) + if val: i |= termios.ICRNL + else: i &= ~termios.ICRNL + termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, [i,o,c,l,isp,osp,cc]) + @staticmethod def getTerminalSize(): return os.get_terminal_size() diff --git a/docs/MDNotes/Resources.md b/docs/MDNotes/Resources.md index 36553188..0b01917e 100644 --- a/docs/MDNotes/Resources.md +++ b/docs/MDNotes/Resources.md @@ -77,4 +77,7 @@ termios.tcsetattr(sys.stdin, termios.TCSADRAIN, attr) - CTRL-Z -> termios.VSUSP - CTRL-Q -> termios.VSTART -Have a look at [test.termios.001.py](../../tests/test.termios.001.py) \ No newline at end of file +Have a look at [test.termios.001.py](../../tests/test.termios.001.py) + +### [GNU Nano](https://www.nano-editor.org) Terminal Initialization +https://git.savannah.gnu.org/cgit/nano.git/tree/src/nano.c#n1199