home · contact · privacy
Refactor prompt prefix management.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 10 Jul 2025 10:18:42 +0000 (12:18 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 10 Jul 2025 10:18:42 +0000 (12:18 +0200)
ircplom/tui.py

index 22c0ce57795400dd154ea23c3ade98a5d76d5923..c5e74912240023220c7ccc4bcebf4ab9fdb042fb 100644 (file)
@@ -197,8 +197,7 @@ class _PromptWidget(_ScrollableWidget):
     'Keyboard-controlled command input field.'
     _y: int
     _width: int
-    _prompt: str = _PROMPT_TEMPLATE
-    _history_idx = 0
+    _history_idx: int = 0
     _input_buffer_unsafe: str
     _cursor_x: int
 
@@ -246,6 +245,10 @@ class _PromptWidget(_ScrollableWidget):
         self._write(to_write[cursor_x_to_write + 1:])
         return True
 
+    @property
+    def _prompt(self) -> str:
+        return _PROMPT_TEMPLATE
+
     def _archive_prompt(self) -> None:
         self.append(self._input_buffer)
         self._reset_buffer('')
@@ -309,7 +312,14 @@ class _PromptWidget(_ScrollableWidget):
 
 class _ConnectionPromptWidget(_PromptWidget):
     'PromptWidget with attributes, methods for dealing with an IrcConnection.'
-    _nickname: str = ''
+    _nick: str = ''
+    _nick_confirmed: bool = False
+
+    @property
+    def _prompt(self) -> str:
+        return ((' ' if self._nick_confirmed else '?')
+                + self._nick
+                + super()._prompt)
 
     def update_prompt(self,
                       nick_confirmed=False,
@@ -317,13 +327,9 @@ class _ConnectionPromptWidget(_PromptWidget):
                       ) -> None:
         'Update nickname-relevant knowledge to go into prompt string.'
         self.tainted = True
-        self._prompt = ''
+        self._nick_confirmed = nick_confirmed
         if nick:
-            self._nickname = nick
-        if self._nickname:
-            self._prompt += ' ' if nick_confirmed else '?'
-            self._prompt += self._nickname
-        self._prompt += _PROMPT_TEMPLATE
+            self._nick = nick
 
 
 class _Window(_Widget):