chiark / gitweb /
Prepare to reuse post-selection UI for other things.
authorSimon Tatham <anakin@pobox.com>
Fri, 8 Dec 2023 07:02:35 +0000 (07:02 +0000)
committerSimon Tatham <anakin@pobox.com>
Fri, 8 Dec 2023 07:02:35 +0000 (07:02 +0000)
cursesclient.py

index 9ad2772e3538c9eabe0746bb27b900339d85b67d..2e2890341e2da0de133e081970517cc0f1c4e5b5 100644 (file)
@@ -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: