def _run_input_iter(self): while True: processed = [] codes = self._get_gpm_codes() + \ self._get_keyboard_codes() original_codes = codes try: while codes: run, codes = escape.process_keyqueue(codes, True) processed.extend(run) except escape.MoreInputRequired: k = len(original_codes) - len(codes) yield (self.complete_wait, processed, original_codes[:k]) original_codes = codes processed = [] codes += self._get_keyboard_codes() + \ self._get_gpm_codes() while codes: run, codes = escape.process_keyqueue(codes, False) processed.extend(run) if self._resized: processed.append('window resize') self._resized = False yield (self.max_wait, processed, original_codes)
def _run_input_iter(self): while True: processed = [] codes = self._get_gpm_codes() + \ self._get_keyboard_codes() original_codes = codes try: while codes: run, codes = escape.process_keyqueue( codes, True) processed.extend(run) except escape.MoreInputRequired: k = len(original_codes) - len(codes) yield (self.complete_wait, processed, original_codes[:k]) original_codes = codes processed = [] codes += self._get_keyboard_codes() + \ self._get_gpm_codes() while codes: run, codes = escape.process_keyqueue( codes, False) processed.extend(run) if self._resized: processed.append('window resize') self._resized = False yield (self.max_wait, processed, original_codes)
def _get_input(self, wait_tenths): # this works around a strange curses bug with window resizing # not being reported correctly with repeated calls to this # function without a doupdate call in between curses.doupdate() key = self._getch(wait_tenths) resize = False raw = [] keys = [] while key >= 0: raw.append(key) if key == KEY_RESIZE: resize = True elif key == KEY_MOUSE: keys += self._encode_mouse_event() else: keys.append(key) key = self._getch_nodelay() processed = [] try: while keys: run, keys = escape.process_keyqueue(keys, True) processed += run except escape.MoreInputRequired: key = self._getch(self.complete_tenths) while key >= 0: raw.append(key) if key == KEY_RESIZE: resize = True elif key == KEY_MOUSE: keys += self._encode_mouse_event() else: keys.append(key) key = self._getch_nodelay() while keys: run, keys = escape.process_keyqueue(keys, False) processed += run if resize: processed.append('window resize') return processed, raw
def _get_input(self, wait_tenths): # this works around a strange curses bug with window resizing # not being reported correctly with repeated calls to this # function without a doupdate call in between curses.doupdate() key = self._getch(wait_tenths) resize = False raw = [] keys = [] while key >= 0: raw.append(key) if key==KEY_RESIZE: resize = True elif key==KEY_MOUSE: keys += self._encode_mouse_event() else: keys.append(key) key = self._getch_nodelay() processed = [] try: while keys: run, keys = escape.process_keyqueue(keys, True) processed += run except escape.MoreInputRequired: key = self._getch(self.complete_tenths) while key >= 0: raw.append(key) if key==KEY_RESIZE: resize = True elif key==KEY_MOUSE: keys += self._encode_mouse_event() else: keys.append(key) key = self._getch_nodelay() while keys: run, keys = escape.process_keyqueue(keys, False) processed += run if resize: processed.append('window resize') return processed, raw
def _run_input_iter(self): def empty_resize_pipe(): # clean out the pipe used to signal external event loops # that a resize has occured try: while True: os.read(self._resize_pipe_rd, 1) except OSError: pass while True: processed = [] codes = self._get_gpm_codes() + \ self._get_keyboard_codes() original_codes = codes try: while codes: run, codes = escape.process_keyqueue( codes, True) processed.extend(run) except escape.MoreInputRequired: k = len(original_codes) - len(codes) yield (self.complete_wait, processed, original_codes[:k]) empty_resize_pipe() original_codes = codes processed = [] codes += self._get_keyboard_codes() + \ self._get_gpm_codes() while codes: run, codes = escape.process_keyqueue( codes, False) processed.extend(run) if self._resized: processed.append('window resize') self._resized = False yield (self.max_wait, processed, original_codes) empty_resize_pipe()