summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asciifarm/client/main.py36
-rw-r--r--asciifarm/client/parseargs.py1
2 files changed, 31 insertions, 6 deletions
diff --git a/asciifarm/client/main.py b/asciifarm/client/main.py
index f6cf7e3..c00b592 100644
--- a/asciifarm/client/main.py
+++ b/asciifarm/client/main.py
@@ -26,7 +26,29 @@ def main(argv=None):
os.environ.setdefault("ESCDELAY", "25")
- def start(stdscr):
+ try:
+ # Initialize curses
+ stdscr = curses.initscr()
+
+ # Turn off echoing of keys, and enter cbreak mode,
+ # where no buffering is performed on keyboard input
+ curses.noecho()
+ curses.cbreak()
+
+ # In keypad mode, escape sequences for special keys
+ # (like the cursor keys) will be interpreted and
+ # a special value like curses.KEY_LEFT will be returned
+ stdscr.keypad(1)
+
+ # Start color, too. Harmless if the terminal doesn't have
+ # color; user can test with has_color() later on. The try/catch
+ # works around a minor bit of over-conscientiousness in the curses
+ # module -- the error return from C start_color() is ignorable.
+ try:
+ curses.start_color()
+ except:
+ pass
+
display = Display(stdscr, characters, colours)
client = Client(stdscr, display, name, connection, keybindings, logfile)
try:
@@ -36,12 +58,16 @@ def main(argv=None):
except Exception as e:
# throw the execption outside ncurses
# so the cleanup can happen first
- nonlocal error
error = e
- nonlocal closeMessage
closeMessage = client.closeMessage
-
- curses.wrapper(start)
+ finally:
+ # Set everything back to normal
+ if 'stdscr' in locals():
+ stdscr.keypad(0)
+ curses.echo()
+ curses.nocbreak()
+ curses.endwin()
+
if error is not None:
raise error
diff --git a/asciifarm/client/parseargs.py b/asciifarm/client/parseargs.py
index a229192..9a73adf 100644
--- a/asciifarm/client/parseargs.py
+++ b/asciifarm/client/parseargs.py
@@ -6,7 +6,6 @@ import json
import os
import os.path
-from .start import main as clientmain
from . import loaders