#-*- coding: utf-8 -*-
"""
Curses-based console user interface for TMW chat client.
"""
import curses
from curses.textpad import Textbox
stdscr = None
chatlog_win = None
input_win = None
players_win = None
input_textbox = None
def init():
global stdscr, chatlog_win, input_win, players_win, input_textbox
stdscr = curses.initscr()
curses.cbreak()
curses.noecho()
stdscr.keypad(1)
h, w = stdscr.getmaxyx()
PNW = 20 # player name width
INH = 4 # input window height
stdscr.vline(0, w - PNW - 1, curses.ACS_VLINE, h)
stdscr.hline(h - INH - 1, 0, curses.ACS_HLINE, w - PNW - 1)
chatlog_win = curses.newwin(h - INH - 1, w - PNW - 1, 0, 0)
input_win = curses.newwin(INH, w - PNW - 1, h - INH, 0)
players_win = curses.newwin(h, PNW, 0, w - PNW)
chatlog_win.idlok(1)
chatlog_win.scrollok(1)
players_win.idlok(1)
players_win.scrollok(1)
input_textbox = Textbox(input_win)
input_textbox.stripspaces = True
stdscr.noutrefresh()
input_win.noutrefresh()
players_win.noutrefresh()
chatlog_win.noutrefresh()
curses.doupdate()
def chatlog_append(line):
if line[-1] != "\n":
line = line + "\n"
chatlog_win.addstr(line)
chatlog_win.refresh()
def input_loop(callback):
def v(ch):
# chatlog_append(curses.keyname(ch))
if ch in (curses.KEY_ENTER, curses.ascii.NL):
return curses.ascii.BEL
return ch
cmd = ''
while cmd not in ('/exit', '/quit'):
cmd = input_textbox.edit(v).strip()
callback(cmd)
input_win.clear()
input_win.move(0, 0)
def finalize():
stdscr.keypad(0)
curses.echo()
curses.nocbreak()
curses.endwin()