diff options
Diffstat (limited to 'bin')
-rw-r--r-- | bin/README.md | 1 | ||||
-rw-r--r-- | bin/handler.py | 16 |
2 files changed, 15 insertions, 2 deletions
diff --git a/bin/README.md b/bin/README.md index 2ae4869..7340b8e 100644 --- a/bin/README.md +++ b/bin/README.md @@ -34,6 +34,7 @@ $ ./bin/salis.py load --file 16.sim |`M` |Toggle minimal mode | |Numbers `[1..0]` |Cycle simulation `2^((n-1) % 10)` steps | |Enter |Activate cursor (WORLD page) | +|Escape |Save and quit simulation | ### Console commands The console opens up when `c` is pressed. Commands, with their respective diff --git a/bin/handler.py b/bin/handler.py index 366b94a..40fafea 100644 --- a/bin/handler.py +++ b/bin/handler.py @@ -25,6 +25,8 @@ import curses class Handler: + KEY_ESCAPE = 27 + def __init__(self, sim): """ Handler constructor. Simply link this class to the main simulation class and printer class and create symbol dictionary. @@ -32,9 +34,17 @@ class Handler: self.__sim = sim self.__printer = sim.printer self.__inst_dict = self.__get_inst_dict() - self.__min_commands = [ord("M"), ord(" "), curses.KEY_RESIZE] + self.__min_commands = [ + ord("M"), + ord(" "), + curses.KEY_RESIZE, + self.KEY_ESCAPE, + ] self.console_history = [] + # Set short delay for ESCAPE key (which is used to exit the simulator). + os.environ.setdefault("ESCDELAY", "25") + def process_cmd(self, cmd): """ Process incoming commands from curses. Commands are received via ncurses' getch() function, thus, they must be transformed into their @@ -44,7 +54,9 @@ class Handler: if self.__sim.minimal and cmd not in self.__min_commands: return - if cmd == ord("M"): + if cmd == self.KEY_ESCAPE: + self.__on_quit([None], save=True) + elif cmd == ord("M"): self.__printer.screen.clear() self.__sim.minimal = not self.__sim.minimal elif cmd == ord(" "): |