From 75554d3a6640a36fcee602d78aee93f38704849e Mon Sep 17 00:00:00 2001 From: Madhur Garg Date: Fri, 31 May 2019 20:34:39 +0530 Subject: Initial version of scrollback --- poezio/tabs/basetabs.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'poezio/tabs') diff --git a/poezio/tabs/basetabs.py b/poezio/tabs/basetabs.py index dbe92a32..f2f2d26f 100644 --- a/poezio/tabs/basetabs.py +++ b/poezio/tabs/basetabs.py @@ -490,6 +490,11 @@ class ChatTab(Tab): self.command_say, usage='', shortdesc='Send the message.') + self.register_command( + 'sb', + self.command_sb, + usage="", + shortdesc='Scrollback to the given line number, meassage, or clear the buffer.') self.register_command( 'xhtml', self.command_xhtml, @@ -782,6 +787,68 @@ class ChatTab(Tab): def command_say(self, line, correct=False): pass + @command_args_parser.quoted(0, 2) + def command_sb(self, args): + """ + /sb + """ + if args is None or len(args) == 0: + self.text_win.scroll_down(len(self.text_win.built_lines)) + self.core.refresh_window() + self.core.information('Command Usage: clear goto home end status', 'Info') + elif len(args) == 1: + if args[0] == 'end': + self.text_win.scroll_down(len(self.text_win.built_lines)) + self.core.refresh_window() + elif args[0] == 'home': + self.text_win.scroll_up(len(self.text_win.built_lines)) + self.core.refresh_window() + elif args[0] == 'clear': + self._text_buffer.messages = [] + self.text_win.rebuild_everything(self._text_buffer) + self.core.refresh_window() + elif args[0] == 'status': + self.core.information('Total %s lines in this tab.' %len(self.text_win.built_lines), 'Info') + elif len(args) == 2 and args[0] == 'goto': + try: + datetime.strptime(args[1], '%Y-%m-%d %H:%M:%S') + except ValueError: + if '+' in args[1]: + scroll_len = args[1].strip('+') + self.text_win.scroll_up(int(scroll_len)) + self.core.refresh_window() + return + elif '-' in args[1]: + scroll_len = args[1].strip('-') + self.text_win.scroll_down(int(scroll_len)) + self.core.refresh_window() + return + elif int(args[1]): + if len(self.text_win.built_lines) - self.text_win.height >= int(args[1]): + self.text_win.pos = len(self.text_win.built_lines) - self.text_win.height - int(args[1]) + 1 + self.core.refresh_window() + return + else: + self.text_win.pos = 0 + self.core.refresh_window() + return + text_buffer = self._text_buffer + line_count=0 + for message in text_buffer.messages: + line_count+=1 + for i in message.txt: + if i == '\n': + line_count+=1 + if message.str_time == args[1]: + if len(self.text_win.built_lines) - self.text_win.height >= line_count: + self.text_win.pos = len(self.text_win.built_lines) - self.text_win.height - line_count + 1 + self.core.refresh_window() + return + else: + self.text_win.pos = 0 + self.core.refresh_window() + return + def on_line_up(self): return self.text_win.scroll_up(1) -- cgit v1.2.3