From 0e0de0a520379ac634e7e207315c39eb71c34e15 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sat, 20 Dec 2025 21:19:15 +0200 Subject: [PATCH] added deck.chat modules --- deck/chat.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/deck/chat.py b/deck/chat.py index 266b479..dec31d3 100644 --- a/deck/chat.py +++ b/deck/chat.py @@ -10,11 +10,10 @@ except: pass def _echo(msg, state): - print(msg) - return state + return msg, state class DeckChat: - def __init__(self, start_state={}, chat_prefix='> ', command_prefix='/'): + def __init__(self, start_state={}, chat_prefix='> ', command_prefix='/', paginate=0): """Init the chat class""" self.command_prefix = command_prefix # prefix that commands start with self.chat_prefix = chat_prefix # prefix to write before input @@ -22,6 +21,7 @@ class DeckChat: 'default': _echo # echo handler by default } self.state = start_state # internal state object (impl-specific) + self.paginate_n = paginate # paginate the responses exceeding N>0 lines def command(self, command, handler): """ @@ -46,13 +46,26 @@ class DeckChat: res = (cmd, arg) return res + def _paginate_output(self, text): + """Splits output for small terminals.""" + lines = text.split('\n') + for i in range(0, len(lines), self.paginate_n): + chunk = lines[i:i + self.paginate_n] + for line in chunk: print(line) + if i + self.paginate_n < len(lines): + input("-- Press Enter --") + def start(self): """Start the chat loop""" while True: try: input_msg = input('\n' + self.chat_prefix).strip() cmd, msg = self._detect_command(input_msg) - self.state = self.command_handlers[cmd](msg, self.state) + output, self.state = self.command_handlers[cmd](msg, self.state) + if self.paginate_n > 0: + self._paginate_output(output.strip()) + else: + print(output) if self.state is None: break except KeyboardInterrupt: break