diff options
author | Joe Anderson <jandew+dev@gmail.com> | 2016-02-19 08:39:13 -0800 |
---|---|---|
committer | Joe Anderson <jandew+dev@gmail.com> | 2016-02-19 08:39:13 -0800 |
commit | 677a2f71206ad515a07738fff405235b9ba8b94b (patch) | |
tree | a7d33af0c9281dea42bf21b84034f715c2eaaf61 /oo.py | |
parent | 7f83687be6811d718ca1c3c4197200e177f455ea (diff) | |
download | oo-677a2f71206ad515a07738fff405235b9ba8b94b.tar.gz oo-677a2f71206ad515a07738fff405235b9ba8b94b.zip |
added ability to break pause loops
Diffstat (limited to 'oo.py')
-rw-r--r-- | oo.py | 41 |
1 files changed, 33 insertions, 8 deletions
@@ -542,6 +542,34 @@ class ooPlay: self.screen.refresh() pause_length = 80 + def sleep(self, delay=1): + """Like most sleep functions, but can be escaped with spacebar. + + delay is in units of self.pause_length, + the standard delay per char for the class. + delay may be a positive integer or float. + + Implementation is such that keypresses other than spacebar + can shorten or lengthen the pause, + but the pause is capped at twice the intended delay. + + Returns True if spacebar was pressed. + """ + pause = int(self.pause_length * delay) + self.screen.timeout(pause) + while True: + inp = self.screen.getch() + if inp == -1: + space_pressed = False + break + if inp == ord(" "): + space_pressed = True + break + pause //= 2 + self.screen.timeout(pause) + self.screen.timeout(-1) + return space_pressed + def write(self, string=None, pause=None): """Write string to the bottom line. @@ -551,7 +579,7 @@ class ooPlay: scrolls through string if a string is not given, then "H" is used - if pause is True, there will be a pause for reading + if pause is True, there will be a pause for reading at the end if pause is not given but a string is, there will be a pause if neither a pause nor a string is given, there will not be a pause @@ -575,8 +603,7 @@ class ooPlay: centered_string = string.center(width, " ") self.screen.addstr(self.Y - 1, 0, centered_string, color) self.screen.refresh() - if pause: curses.napms(self.pause_length * len(string)) - curses.ungetch(0) # clear input + if pause: self.sleep(2*len(string)) return # scrolling through a wider string @@ -584,14 +611,12 @@ class ooPlay: strings = [string[i:i + width] for i in range(len(string) - width + 1)] self.screen.addstr(self.Y - 1, 0, strings[0], color) self.screen.refresh() - curses.napms(self.pause_length * width) + if self.sleep(width): return for s in strings: self.screen.addstr(self.Y - 1, 0, s, color) self.screen.refresh() - curses.napms(self.pause_length) - if pause: curses.napms(self.pause_length * width) - curses.ungetch(0) # clear input - #TODO: ungetch appears to not clear inputs as desired :/ + if self.sleep(): return + if pause: self.sleep(width) def write_help(self): """Write one of the help messages.""" |