'KEY_DOWN': ('prompt_scroll', 'down'),
'KEY_PGUP': ('log_scroll', 'up'),
'KEY_PGDOWN': ('log_scroll', 'down'),
+ '[91, 49, 59, 51, 68]': ('buffer', 'left'),
+ '[91, 49, 59, 51, 67]': ('buffer', 'right'),
}
IRCSPEC_LINE_SEPARATOR = b'\r\n'
def _cmd__quit(self) -> None:
self.broadcast('QUIT')
- def _cmd__buffer(self, buffer_idx_str: str) -> Optional[str]:
- if not buffer_idx_str.isdigit():
- return f'not-integer buffer_idx: {buffer_idx_str}'
- buffer_idx = int(buffer_idx_str)
- if buffer_idx < 0 or buffer_idx > len(self._logs):
- return f'unavailable buffer idx: {buffer_idx}'
+ def _cmd__buffer(self, towards: str) -> Optional[str]:
+ n_buffers = len(self._logs)
+ if n_buffers < 2:
+ return 'no alternate buffer to move into'
+ if towards in {'left', 'right'}:
+ multiplier = (+1) if towards == 'right' else (-1)
+ buffer_idx = self._buffer_idx + multiplier
+ if not 0 <= buffer_idx < n_buffers:
+ buffer_idx -= multiplier * n_buffers
+ elif not towards.isdigit():
+ return f'neither "left"/"right" nor integer: {towards}'
+ else:
+ buffer_idx = int(towards)
+ if not 0 <= buffer_idx < n_buffers:
+ return f'unavailable buffer idx: {buffer_idx}'
self._buffer_idx = buffer_idx
self._log.draw()
return None