Получить содержимое текущей строки, всего, что справа от курсора и всего окна

Необходимо получить содержимое строки, где находится курсор, затем получить всё, что справа от курсора и, наконец, всё, что на экране в данный момент. Первые два действия нужны для реализации поведения 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)

Ответы (0 шт):