mirror of
https://github.com/markqvist/rnsh.git
synced 2025-06-24 22:10:40 -04:00
Fixed invalid escape sequence handling. This fixes terminal escape sequences such as Page Up/down, home/end, pasting text and others not being processed correctly.
This commit is contained in:
parent
4da540f189
commit
a77451743b
1 changed files with 11 additions and 5 deletions
|
@ -283,26 +283,27 @@ async def initiate(configdir: str, identitypath: str, verbosity: int, quietness:
|
||||||
flush_chars = ["\x01", "\x03", "\x04", "\x05", "\x0c", "\x11", "\x13", "\x15", "\x19", "\t", "\x1A", "\x1B"]
|
flush_chars = ["\x01", "\x03", "\x04", "\x05", "\x0c", "\x11", "\x13", "\x15", "\x19", "\t", "\x1A", "\x1B"]
|
||||||
def handle_escape(b):
|
def handle_escape(b):
|
||||||
nonlocal line_mode
|
nonlocal line_mode
|
||||||
if b == "~":
|
if b == "?":
|
||||||
return "~"
|
|
||||||
elif b == "?":
|
|
||||||
os.write(1, "\n\r\n\rSupported rnsh escape sequences:".encode("utf-8"))
|
os.write(1, "\n\r\n\rSupported rnsh escape sequences:".encode("utf-8"))
|
||||||
os.write(1, "\n\r ~~ Send the escape character by typing it twice".encode("utf-8"))
|
os.write(1, "\n\r ~~ Send the escape character by typing it twice".encode("utf-8"))
|
||||||
os.write(1, "\n\r ~. Terminate session and exit immediately".encode("utf-8"))
|
os.write(1, "\n\r ~. Terminate session and exit immediately".encode("utf-8"))
|
||||||
os.write(1, "\n\r ~L Toggle line-interactive mode".encode("utf-8"))
|
os.write(1, "\n\r ~L Toggle line-interactive mode".encode("utf-8"))
|
||||||
os.write(1, "\n\r ~? Display this quick reference\n\r".encode("utf-8"))
|
os.write(1, "\n\r ~? Display this quick reference\n\r".encode("utf-8"))
|
||||||
os.write(1, "\n\r(Escape sequences are only recognized immediately after newline)\n\r".encode("utf-8"))
|
os.write(1, "\n\r(Escape sequences are only recognized immediately after newline)\n\r".encode("utf-8"))
|
||||||
|
return None
|
||||||
elif b == ".":
|
elif b == ".":
|
||||||
_link.teardown()
|
_link.teardown()
|
||||||
|
return None
|
||||||
elif b == "L":
|
elif b == "L":
|
||||||
line_mode = not line_mode
|
line_mode = not line_mode
|
||||||
if line_mode:
|
if line_mode:
|
||||||
os.write(1, "\n\rLine-interactive mode enabled\n\r".encode("utf-8"))
|
os.write(1, "\n\rLine-interactive mode enabled\n\r".encode("utf-8"))
|
||||||
else:
|
else:
|
||||||
os.write(1, "\n\rLine-interactive mode disabled\n\r".encode("utf-8"))
|
os.write(1, "\n\rLine-interactive mode disabled\n\r".encode("utf-8"))
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
return b
|
||||||
|
|
||||||
stdin_eof = False
|
stdin_eof = False
|
||||||
def stdin():
|
def stdin():
|
||||||
nonlocal stdin_eof, pre_esc, esc, line_mode
|
nonlocal stdin_eof, pre_esc, esc, line_mode
|
||||||
|
@ -318,9 +319,11 @@ async def initiate(configdir: str, identitypath: str, verbosity: int, quietness:
|
||||||
line_flush = True
|
line_flush = True
|
||||||
data.append(b)
|
data.append(b)
|
||||||
elif line_mode and c in flush_chars:
|
elif line_mode and c in flush_chars:
|
||||||
|
pre_esc = False
|
||||||
line_flush = True
|
line_flush = True
|
||||||
data.append(b)
|
data.append(b)
|
||||||
elif line_mode and (c == "\b" or c == "\x7f"):
|
elif line_mode and (c == "\b" or c == "\x7f"):
|
||||||
|
pre_esc = False
|
||||||
if len(line_buffer)>0:
|
if len(line_buffer)>0:
|
||||||
line_buffer.pop(-1)
|
line_buffer.pop(-1)
|
||||||
blind_write_count -= 1
|
blind_write_count -= 1
|
||||||
|
@ -331,9 +334,12 @@ async def initiate(configdir: str, identitypath: str, verbosity: int, quietness:
|
||||||
elif esc == True:
|
elif esc == True:
|
||||||
ret = handle_escape(c)
|
ret = handle_escape(c)
|
||||||
if ret != None:
|
if ret != None:
|
||||||
|
if ret != "~":
|
||||||
|
data.append(ord("~"))
|
||||||
data.append(ord(ret))
|
data.append(ord(ret))
|
||||||
esc = False
|
esc = False
|
||||||
else:
|
else:
|
||||||
|
pre_esc = False
|
||||||
data.append(b)
|
data.append(b)
|
||||||
|
|
||||||
if not line_mode:
|
if not line_mode:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue