From fd02d3a2616381019591b1dadadb9e320fd3db66 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Mon, 2 Jun 2025 16:04:42 +0200 Subject: [PATCH] Add weechat-like buffer rotation via ALT+KEY_LEFT/KEY_RIGHT. --- ircplom.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ircplom.py b/ircplom.py index b8cec6b..2fdd802 100755 --- a/ircplom.py +++ b/ircplom.py @@ -29,6 +29,8 @@ KEYBINDINGS = { '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' @@ -605,12 +607,21 @@ class TuiLoop(Loop): 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 -- 2.30.2