Browse Source

Separate terminal '\n' from '\r' to capture CTRL-J

pull/54/head
Eugenio Parodi 4 years ago
parent
commit
79fbd16312
  1. 5
      TermTk/TTkCore/TTkTerm/inputkey.py
  2. 14
      TermTk/TTkCore/TTkTerm/term.py
  3. 5
      docs/MDNotes/Resources.md

5
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 ),

14
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()

5
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)
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

Loading…
Cancel
Save