diff options
Diffstat (limited to 'asciifarm/client/main.py')
| -rw-r--r-- | asciifarm/client/main.py | 56 |
1 files changed, 22 insertions, 34 deletions
diff --git a/asciifarm/client/main.py b/asciifarm/client/main.py index c00b592..d720477 100644 --- a/asciifarm/client/main.py +++ b/asciifarm/client/main.py @@ -1,13 +1,18 @@ #! /usr/bin/python3 -import curses + import json -import os -import getpass + import sys +import termios +import tty +import signal +#import os + from .connection import Connection from .gameclient import Client -from .display.display import Display +from .display import Display from .parseargs import parse_args +from ratuil.screen import Screen def main(argv=None): @@ -24,33 +29,19 @@ def main(argv=None): error = None closeMessage = None - os.environ.setdefault("ESCDELAY", "25") + #os.environ.setdefault("ESCDELAY", "25") + + fd = sys.stdin.fileno() + oldterm = termios.tcgetattr(fd) 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 + + tty.setraw(sys.stdin) + Screen.default.hide_cursor() - display = Display(stdscr, characters, colours) - client = Client(stdscr, display, name, connection, keybindings, logfile) + display = Display(characters) + client = Client(display, name, connection, keybindings, logfile) + signal.signal(signal.SIGWINCH, client.onSigwinch) try: client.start() except KeyboardInterrupt: @@ -61,12 +52,9 @@ def main(argv=None): error = e closeMessage = client.closeMessage finally: - # Set everything back to normal - if 'stdscr' in locals(): - stdscr.keypad(0) - curses.echo() - curses.nocbreak() - curses.endwin() + ## Set everything back to normal + termios.tcsetattr(fd, termios.TCSADRAIN, oldterm) + Screen.default.finalize() if error is not None: |
