chiark / gitweb /
Add 'change language' in the pre-posting menu.
authorSimon Tatham <anakin@pobox.com>
Sat, 9 Dec 2023 16:43:41 +0000 (16:43 +0000)
committerSimon Tatham <anakin@pobox.com>
Sat, 9 Dec 2023 17:21:45 +0000 (17:21 +0000)
Uses the new bottom-line editor to prompt for a replacement language
tag.

cursesclient.py

index 0dbf77c083e0b695e6875f072db74ec9e615c744..3f49109e184d98b860b20620972df3f59c3d1918 100644 (file)
@@ -291,6 +291,10 @@ class Menu(Activity):
 
         self.normalised = True
 
+    def renormalise(self):
+        self.normalised = False
+        self.normalise()
+
     def render(self):
         self.normalise()
         y = 0
@@ -798,6 +802,10 @@ class StatusInfoFile(ObjectFile):
             cc, lambda x,cc:x, client.StatusInfoFeed(cc, self.data), title)
 
 class EditorCommon:
+    # Common editing operations between the post editor and the line editor.
+    # Expects self.text to be the editor buffer, and self.point to be
+    # the cursor position within it, from 0 to len(self.text) _inclusive_.
+
     def move_to(self, pos):
         self.point = max(0, min(len(self.text), pos))
 
@@ -1033,6 +1041,8 @@ class Composer(Activity, EditorCommon):
         except KeyError:
             self.url_cost = 23
 
+        self.language = "en" # FIXME: find a better default from somewhere
+
     def render(self):
         y = 0
 
@@ -1160,7 +1170,7 @@ class Composer(Activity, EditorCommon):
         params = {
             "status": self.text.rstrip("\n"),
             "visibility": "public",
-            "language": "en", # FIXME
+            "language": self.language,
         }
         if self.reply_id is not None:
             params["in_reply_to_id"] = self.reply_id
@@ -1176,6 +1186,10 @@ class PostMenu(Menu):
         super().__init__(composer.cc)
         self.composer = composer
         self.title = text.ColouredString("Post a status", "H")
+        self.refresh_items()
+
+    def refresh_items(self):
+        self.items.clear()
         self.items.append(text.MenuKeypressLine(
             'SPACE', text.ColouredString("Post")))
         self.items.append(text.BlankLine())
@@ -1183,6 +1197,14 @@ class PostMenu(Menu):
             'Q', text.ColouredString("Cancel post")))
         self.items.append(text.MenuKeypressLine(
             'A', text.ColouredString("Re-edit post")))
+        self.items.append(text.BlankLine())
+        self.items.append(text.MenuKeypressLine(
+            'L', text.ColouredString(f"Language: '{self.composer.language}'")))
+        self.renormalise()
+
+    def set_language(self, lang):
+        self.composer.language = lang
+        self.refresh_items()
 
     def handle_key(self, ch):
         if ch in {'q', 'Q'}:
@@ -1190,6 +1212,10 @@ class PostMenu(Menu):
             return 'quit' # FIXME: maybe a confirmation, like real Mono?
         elif ch in {'a', 'A'}:
             self.chain_to(self.composer)
+        elif ch in {'l', 'L'}:
+            self.push_to(BottomLinePrompt(
+                self.cc, self.set_language, "Language tag for post: ",
+                self.composer.language))
         elif ch in {' '}:
             self.composer.post()
             self.cc.composer = None