From c8564693dd5dce39b3a4feff3461c7b7657fa29a Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Fri, 8 Dec 2023 07:02:35 +0000 Subject: [PATCH] Prepare to reuse post-selection UI for other things. --- cursesclient.py | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/cursesclient.py b/cursesclient.py index 9ad2772..2e28903 100644 --- a/cursesclient.py +++ b/cursesclient.py @@ -425,14 +425,15 @@ class File(Activity): return 'quit' elif ch in {'s', 'S'}: self.send_mode() - elif self.mode == 'send': + elif self.mode == 'select': if ch in {'q', 'Q'}: self.mode = 'normal' elif ch in {'-', 'b', 'B', curses.KEY_UP}: - self.prev_send_target() + self.prev_select_target() elif ch in {'+', curses.KEY_DOWN}: - self.next_send_target() - elif ch in {' ', 'i', 'I', 'a', 'A', 'l', 'L'}: + self.next_select_target() + elif (self.select_type == 'send' and + ch in {' ', 'i', 'I', 'a', 'A', 'l', 'L'}): self.send_complete() def send_mode(self): @@ -457,7 +458,7 @@ class ObjectFile(File): self.lines = None self.linepos = None self.width = None - self.send_target = None + self.select_target = None self.old_display_state = None self.index_by_line = [] @@ -489,7 +490,7 @@ class ObjectFile(File): return got_any def regenerate_lines(self, width): - display_state = (self.mode, self.send_target) + display_state = (self.mode, self.select_target) if (self.width == width and display_state == self.old_display_state and not self.fetch_new()): return @@ -499,7 +500,7 @@ class ObjectFile(File): pos = 0 for thing, itemindex in self.iter_text_indexed(): params = {} - if (self.mode == 'send' and itemindex == self.send_target and + if (self.mode == 'select' and itemindex == self.select_target and isinstance(thing, text.FromLine)): params['target'] = True for line in thing.render(width, **params): @@ -519,8 +520,9 @@ class ObjectFile(File): self.cc.print_at(y, 0, line) sl = text.FileStatusLine() - if self.mode == 'send': - sl.keys.append(('SPACE', 'Reply')) + if self.mode == 'select': + if self.select_type == 'send': + sl.keys.append(('SPACE', 'Reply')) sl.keys.append(('-', None)) sl.keys.append(('+', None)) sl.keys.append(('Q', 'Quit')) @@ -535,25 +537,24 @@ class ObjectFile(File): self.cc.print_at(self.cc.scr_h - 1, 0, sl_rendered) def send_mode(self): - self.mode = 'send' - self.send_target = self.index_by_line[self.linepos-1] - def prev_send_target(self): - self.send_target = max(self.minpos, self.send_target-1) - print("prev ->", self.send_target, file=sys.stderr) - def next_send_target(self): - self.send_target = min(self.maxpos-1, self.send_target+1) - print("next ->", self.send_target, file=sys.stderr) + self.mode = 'select' + self.select_type = 'send' + self.select_target = self.index_by_line[self.linepos-1] + def prev_select_target(self): + self.select_target = max(self.minpos, self.select_target-1) + def next_select_target(self): + self.select_target = min(self.maxpos-1, self.select_target+1) def send_complete(self): self.mode = 'normal' recipients = collections.OrderedDict() - for r in self.statuses[self.send_target].get_reply_recipients(): + for r in self.statuses[self.select_target].get_reply_recipients(): if r == self.cc.fq_username or r in recipients: continue recipients[r] = 1 initial_content = "".join(f"@{r} " for r in recipients) - reply_id = self.statuses[self.send_target].get_reply_id() + reply_id = self.statuses[self.select_target].get_reply_id() if reply_id is not None: hp = text.HTMLParser() try: -- 2.30.2