summaryrefslogtreecommitdiffstats
path: root/cursed.py
diff options
context:
space:
mode:
Diffstat (limited to 'cursed.py')
-rw-r--r--cursed.py37
1 files changed, 22 insertions, 15 deletions
diff --git a/cursed.py b/cursed.py
index 5259408..7e262b5 100644
--- a/cursed.py
+++ b/cursed.py
@@ -3,8 +3,10 @@ import asyncio
import sys
class Console():
- def __init__(self):
+ def __init__(self, messages):
self.stdscr = curses.initscr()
+ self.messages = messages
+ self.typed_message = ""
def __enter__(self):
curses.noecho()
@@ -18,24 +20,29 @@ class Console():
curses.echo()
curses.endwin()
- def redraw(self, messages):
+ def redraw(self):
self.stdscr.clear()
- for msg in messages:
+ for msg in self.messages:
self.stdscr.addstr(msg + '\n')
+ if self.typed_message != "":
+ self.stdscr.addstr(self.typed_message)
self.stdscr.refresh()
-async def start(c, on_str, on_tab, messages):
- string = ""
- c.redraw(messages)
+async def start(c, on_str, on_tab):
while True:
- char = await asyncio.to_thread(c.stdscr.getkey)
- if char == '\n' and string != "":
- await on_str(string)
- messages.append(string)
- c.redraw(messages)
- string = ""
- elif char == '\t':
- await on_tab()
+ c.redraw()
+ char = await asyncio.to_thread(c.stdscr.get_wch)
+ if isinstance(char, str):
+ if char == '\n':
+ if c.typed_message != "":
+ await on_str(c.typed_message)
+ c.messages.append(c.typed_message)
+ c.typed_message = ""
+ elif char == '\t':
+ await on_tab()
+ else:
+ c.typed_message += char
else:
- string += char
+ if char == 263:
+ c.typed_message = c.typed_message[:-1]