Не перезаписывать завернутый текст проклятиями - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь написать простое приложение для чата на основе сокетов на python и создаю клиента с проклятиями.

У меня проблема в том, что вы можете получать сообщения длиннее ширины окна, и вв этом случае текст переносится, как и ожидалось, но следующее сообщение записывается на следующей строке, перезаписывая предыдущее, перенесенное на эту строку.

Вот соответствующий код:

def receive():
  global recv_queue
  raw_data = sock.recv(1024)
  raw_data = json.loads(raw_data)
  recv_queue.append(raw_data["TMSG"] + "\n")


def mainloop(stdscr):
  global recv_queue
  i = 1

  stdscr.clear()
  curses.cbreak()
  stdscr.keypad(1)
  stdscr.scrollok(1)
  curses.noecho()
  menu_bar = stdscr.derwin(3, curses.COLS, 0, 0)
  log_win = stdscr.derwin(curses.LINES - 6, curses.COLS, 2, 0)
  ed_win = stdscr.derwin(0, curses.COLS, curses.LINES - 4, 0)
  sub_ed_win = ed_win.derwin(2, curses.COLS - 2, 1, 1)

  box = curses.textpad.Textbox(sub_ed_win, insert_mode=True)
  while True:

    log_win.border()
    ed_win.border()
    menu_bar.box()

    menu_bar.refresh()
    log_win.refresh()
    ed_win.refresh()
    sub_ed_win.refresh()

    t = threading.Thread()
    t.run = box.edit
    t.start()

    receive()

    try:
      log_win.addstr(i, 1, recv_queue.pop().encode("utf_8"))
      i += 1
    except:
      pass


wrapper(mainloop)

Частьгде я запускаю поток для редактирования box можно игнорировать, он еще не закончен.

...