From 68ba631d7af62a416da8ff487534ec27b6a2d5c3 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Tue, 10 Nov 2020 06:49:03 +0100
Subject: [PATCH] Don't lose input values by /help input.

---
 rogue_chat_curses.py                | 20 ++++++++++-------
 rogue_chat_nocanvas_monochrome.html | 33 +++++++++++++++++------------
 2 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py
index 67f3c05..73c1a98 100755
--- a/rogue_chat_curses.py
+++ b/rogue_chat_curses.py
@@ -279,6 +279,16 @@ class TUI:
     def query_info(self):
         self.send('GET_ANNOTATION ' + str(self.explorer))
 
+    def restore_input_values(self):
+        if self.mode.name == 'annotate' and self.explorer in self.game.info_db:
+            info = self.game.info_db[self.explorer]
+            if info != '(none)':
+                self.input_ = info
+        elif self.mode.name == 'portal' and self.explorer in self.game.portals:
+            self.input_ = self.game.portals[self.explorer]
+        elif self.mode.name == 'password':
+            self.input_ = self.password
+
     def switch_mode(self, mode_name, keep_position = False):
         self.map_mode = 'terrain'
         self.mode = getattr(self, 'mode_' + mode_name)
@@ -297,14 +307,7 @@ class TUI:
         elif self.mode.name == 'teleport':
             self.log_msg("@ May teleport to %s" % (self.teleport_target_host)),
             self.log_msg("@ Enter 'YES!' to enthusiastically affirm.");
-        elif self.mode.name == 'annotate' and self.explorer in self.game.info_db:
-            info = self.game.info_db[self.explorer]
-            if info != '(none)':
-                self.input_ = info
-        elif self.mode.name == 'portal' and self.explorer in self.game.portals:
-            self.input_ = self.game.portals[self.explorer]
-        elif self.mode.name == 'password':
-            self.input_ = self.password
+        self.restore_input_values()
 
     def loop(self, stdscr):
         import time
@@ -586,6 +589,7 @@ class TUI:
             elif self.mode.has_input_prompt and key == '\n' and self.input_ == '/help':
                 self.show_help = True
                 self.input_ = ""
+                self.restore_input_values()
             elif self.mode.has_input_prompt and key != '\n':  # Return key
                 self.input_ += key
                 max_length = self.window_width * self.size.y - len(input_prompt) - 1
diff --git a/rogue_chat_nocanvas_monochrome.html b/rogue_chat_nocanvas_monochrome.html
index 6041871..8634959 100644
--- a/rogue_chat_nocanvas_monochrome.html
+++ b/rogue_chat_nocanvas_monochrome.html
@@ -355,13 +355,8 @@ let tui = {
     }
     this.mode = mode;
     this.empty_input();
-    if (mode == mode_annotate && explorer.position in explorer.info_db) {
-        let info = explorer.info_db[explorer.position];
-        if (info != "(none)") {
-	    this.inputEl.value = info;
-	    this.recalc_input_lines();
-        }
-    } else if (mode == mode_login) {
+    this.restore_input_values();
+    if (mode == mode_login) {
         if (this.login_name) {
             server.send(['LOGIN', this.login_name]);
         } else {
@@ -369,19 +364,28 @@ let tui = {
         }
     } else if (mode == mode_edit) {
         this.show_help = true;
-    } else if (mode == mode_portal && explorer.position in game.portals) {
-        let portal = game.portals[explorer.position]
-        this.inputEl.value = portal;
-        this.recalc_input_lines();
-    } else if (mode == mode_password) {
-        this.inputEl.value = this.password;
-        this.recalc_input_lines();
     } else if (mode == mode_teleport) {
         tui.log_msg("@ May teleport to: " + tui.teleport_target);
         tui.log_msg("@ Enter 'YES!' to entusiastically affirm.");
     }
     this.full_refresh();
   },
+  restore_input_values: function() {
+      if (this.mode == mode_annotate && explorer.position in explorer.info_db) {
+          let info = explorer.info_db[explorer.position];
+          if (info != "(none)") {
+              this.inputEl.value = info;
+              this.recalc_input_lines();
+          }
+      } else if (this.mode == mode_portal && explorer.position in game.portals) {
+          let portal = game.portals[explorer.position]
+          this.inputEl.value = portal;
+          this.recalc_input_lines();
+      } else if (this.mode == mode_password) {
+          this.inputEl.value = this.password;
+          this.recalc_input_lines();
+      }
+  },
   empty_input: function(str) {
       this.inputEl.value = "";
       if (this.mode.has_input_prompt) {
@@ -743,6 +747,7 @@ tui.inputEl.addEventListener('keydown', (event) => {
     if (tui.mode.has_input_prompt && event.key == 'Enter' && tui.inputEl.value == '/help') {
         tui.show_help = true;
         tui.empty_input();
+        tui.restore_input_values();
         tui.full_refresh();
     } else if (!tui.mode.has_input_prompt && event.key == tui.keys.help) {
         tui.show_help = true;
-- 
2.30.2