Получить содержимое текущей строки, всего, что справа от курсора и всего окна
Необходимо получить содержимое строки, где находится курсор, затем получить всё, что справа от курсора и, наконец, всё, что на экране в данный момент. Первые два действия нужны для реализации поведения backspace (т. к. \b не удаляет символ слева).
Вот код программы:
#!/bin/env python
import sys, os
import time
def getch():
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class Console:
size = os.get_terminal_size()
def __init__(self):
pass
def clear_screen():
sys.stdout.write("\033[H\033[J")
sys.stdout.flush()
def set_cursor_at(y, x):
sys.stdout.write(f"\033[{y};{x}H")
sys.stdout.flush()
def move_cursor_forward(n):
sys.stdout.write(f"\033[{n}C")
sys.stdout.flush()
def move_cursor_backward(n):
sys.stdout.write(f"\033[{n}D")
sys.stdout.flush()
def move_cursor_up(n):
sys.stdout.write(f"\033[{n}A")
sys.stdout.flush()
def move_cursor_down(n):
sys.stdout.write(f"\033[{n}B")
sys.stdout.flush()
def print_text(text):
sys.stdout.write(text)
sys.stdout.flush()
def main(argv):
Console.clear_screen()
Console.set_cursor_at(1,1)
Console.print_text("Hello, World")
Console.move_cursor_forward(5)
Console.print_text("Now I'm here!")
while True:
ch = getch()
if ord(ch) == 27:
group = getch()
key = getch()
if ord(group) == 91:
if ord(key) == 68: Console.move_cursor_backward(1)
if ord(key) == 67: Console.move_cursor_forward(1)
if ord(key) == 65: Console.move_cursor_up(1)
if ord(key) == 66: Console.move_cursor_down(1)
else: break
elif ord(ch) == 127:
pass
# Backspace
else: Console.print_text(ch)
if __name__ == '__main__':
main(sys.argv)