home · contact · privacy
Add weechat-like buffer rotation via ALT+KEY_LEFT/KEY_RIGHT. master
authorChristian Heller <c.heller@plomlompom.de>
Mon, 2 Jun 2025 14:04:42 +0000 (16:04 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 2 Jun 2025 14:04:42 +0000 (16:04 +0200)
ircplom.py

index b8cec6b1c78e5ba7a443cd90c77d99c61c5e9a5e..2fdd8029fecc5615d0c72427d6aaca8a77107eb4 100755 (executable)
@@ -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