home · contact · privacy
Standardize leaving input prompts with empty input.
authorChristian Heller <c.heller@plomlompom.de>
Sun, 6 Dec 2020 23:57:17 +0000 (00:57 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 6 Dec 2020 23:57:17 +0000 (00:57 +0100)
rogue_chat.html
rogue_chat_curses.py

index 3d17c5a32e172fc8917d3e150827b8bcccec5e37..573e295874411a5a8ebe319adbddb7472dbd4b1a 100644 (file)
@@ -196,7 +196,7 @@ let mode_helps = {
     'chat': {
         'short': 'chat',
         'intro': '',
-        'long': 'This mode allows you to engage in chit-chat with other users.  Any line you enter into the input prompt that does not start with a "/" will be sent out to nearby players – but barriers and distance will reduce what they can read, so stand close to them to ensure they get your message.  Lines that start with a "/" are used for commands like:'
+        'long': 'This mode allows you to engage in chit-chat with other users.  Any line you enter into the input prompt that does not start with a "/" will be sent out to nearby players – but barriers and distance will reduce what they can read, so stand close to them to ensure they get your message.  Lines that start with a "/" are used for commands like:\n\n/nick NAME – re-name yourself to NAME'
     },
     'login': {
         'short': 'login',
@@ -666,7 +666,6 @@ let tui = {
   map_lines: [],
   selectables: [],
   init: function() {
-      this.mode_chat.available_modes = ["play", "study", "edit", "admin_enter"]
       this.mode_play.available_modes = ["chat", "study", "edit", "admin_enter",
                                         "command_thing", "take_thing"]
       this.mode_play.available_actions = ["move", "drop_thing",
@@ -1120,13 +1119,7 @@ let tui = {
           movement_keys_desc = Object.keys(this.movement_keys).join(',');
       }
       let content = this.mode.short_desc + " help\n\n" + this.mode.help_intro + "\n\n";
-      if (this.mode.name == 'chat') {
-          content += '/nick NAME – re-name yourself to NAME\n';
-          content += '/' + this.keys.switch_to_play + ' or /play – switch to play mode\n';
-          content += '/' + this.keys.switch_to_study + ' or /study – switch to study mode\n';
-          content += '/' + this.keys.switch_to_edit + ' or /edit – switch to world edit mode\n';
-          content += '/' + this.keys.switch_to_admin_enter + ' or /admin – switch to admin mode\n';
-      } else if (this.mode.available_actions.length > 0) {
+      if (this.mode.available_actions.length > 0) {
           content += "Available actions:\n";
           for (let action of this.mode.available_actions) {
               if (Object.keys(this.action_tasks).includes(action)) {
@@ -1394,7 +1387,15 @@ tui.inputEl.addEventListener('keydown', (event) => {
     if (event.key == 'Enter') {
         event.preventDefault();
     }
-    if (tui.mode.has_input_prompt && event.key == 'Enter' && tui.inputEl.value == '/help') {
+    if (tui.mode.has_input_prompt && event.key == 'Enter'
+        && tui.inputEl.value.length == 0
+        && ['chat', 'command_thing', 'take_thing',
+            'admin_enter'].includes(tui.mode.name)) {
+        if (tui.mode.name != 'chat') {
+            tui.log_msg('@ aborted');
+        }
+        tui.switch_mode('play');
+    } else if (tui.mode.has_input_prompt && event.key == 'Enter' && tui.inputEl.value == '/help') {
         tui.show_help = true;
         tui.inputEl.value = "";
         tui.restore_input_values();
@@ -1406,23 +1407,16 @@ tui.inputEl.addEventListener('keydown', (event) => {
         server.send(['LOGIN', tui.inputEl.value]);
         tui.inputEl.value = "";
     } else if (tui.mode.name == 'command_thing' && event.key == 'Enter') {
-        if (tui.inputEl.value.length == 0) {
-            tui.log_msg('@ aborted');
-            tui.switch_mode('play');
-        } else if (tui.task_action_on('command')) {
+        if (tui.task_action_on('command')) {
             server.send(['TASK:COMMAND', tui.inputEl.value]);
             tui.inputEl.value = "";
         }
     } else if (tui.mode.name == 'take_thing' && event.key == 'Enter') {
-        if (tui.inputEl.value.length == 0) {
-            tui.log_msg('@ aborted');
+        const i = parseInt(tui.inputEl.value);
+        if (isNaN(i) || i < 0 || i >= tui.selectables.length) {
+            tui.log_msg('? invalid index, aborted');
         } else {
-            const i = parseInt(tui.inputEl.value);
-            if (isNaN(i) || i < 0 || i >= tui.selectables.length) {
-                tui.log_msg('? invalid index, aborted');
-            } else {
-                server.send(['TASK:PICK_UP', tui.selectables[i][0]]);
-            }
+            server.send(['TASK:PICK_UP', tui.selectables[i][0]]);
         }
         tui.inputEl.value = "";
         tui.switch_mode('play');
@@ -1485,15 +1479,7 @@ tui.inputEl.addEventListener('keydown', (event) => {
         let tokens = parser.tokenize(tui.inputEl.value);
         if (tokens.length > 0 && tokens[0].length > 0) {
             if (tui.inputEl.value[0][0] == '/') {
-                if (tokens[0].slice(1) == 'play' || tokens[0][1] == tui.keys.switch_to_play) {
-                    tui.switch_mode('play');
-                } else if (tokens[0].slice(1) == 'study' || tokens[0][1] == tui.keys.switch_to_study) {
-                    tui.switch_mode('study');
-                } else if (tokens[0].slice(1) == 'edit' || tokens[0][1] == tui.keys.switch_to_edit) {
-                    tui.switch_mode('edit');
-                } else if (tokens[0].slice(1) == 'admin' || tokens[0][1] == tui.keys.switch_to_admin_enter) {
-                    tui.switch_mode('admin_enter');
-                } else if (tokens[0].slice(1) == 'nick') {
+                if (tokens[0].slice(1) == 'nick') {
                     if (tokens.length > 1) {
                         server.send(['NICK', tokens[1]]);
                     } else {
index c6954bfce2b8ba502e170968cc5ec953c7f0e75a..b7590381055dc93123178b82bf80811e0844e019 100755 (executable)
@@ -84,7 +84,7 @@ mode_helps = {
     'chat': {
         'short': 'chat',
         'intro': '',
-        'long': 'This mode allows you to engage in chit-chat with other users.  Any line you enter into the input prompt that does not start with a "/" will be sent out to nearby players – but barriers and distance will reduce what they can read, so stand close to them to ensure they get your message.  Lines that start with a "/" are used for commands like:'
+        'long': 'This mode allows you to engage in chit-chat with other users.  Any line you enter into the input prompt that does not start with a "/" will be sent out to nearby players – but barriers and distance will reduce what they can read, so stand close to them to ensure they get your message.  Lines that start with a "/" are used for commands like:\n\n/nick NAME – re-name yourself to NAME'
     },
     'login': {
         'short': 'login',
@@ -903,12 +903,6 @@ class TUI:
                         key = self.keys[action]
                     content += '[%s] – %s\n' % (key, action_descriptions[action])
                 content += '\n'
-            if self.mode.name == 'chat':
-                content += '/nick NAME – re-name yourself to NAME\n'
-                content += '/%s or /play – switch to play mode\n' % self.keys['switch_to_play']
-                content += '/%s or /study – switch to study mode\n' % self.keys['switch_to_study']
-                content += '/%s or /edit – switch to world edit mode\n' % self.keys['switch_to_edit']
-                content += '/%s or /admin – switch to admin mode\n' % self.keys['switch_to_admin_enter']
             content += self.mode.list_available_modes(self)
             for i in range(self.size.y):
                 safe_addstr(i,
@@ -1007,6 +1001,12 @@ class TUI:
                 reset_screen_size()
             elif self.mode.has_input_prompt and key == 'KEY_BACKSPACE':
                 self.input_ = self.input_[:-1]
+            elif self.mode.has_input_prompt and key == '\n' and self.input_ == ''\
+                 and self.mode.name in {'chat', 'command_thing', 'take_thing',
+                                        'admin_enter'}:
+                if self.mode.name != 'chat':
+                    self.log_msg('@ aborted')
+                self.switch_mode('play')
             elif self.mode.has_input_prompt and key == '\n' and self.input_ == '/help':
                 self.show_help = True
                 self.input_ = ""
@@ -1023,24 +1023,18 @@ class TUI:
                 self.send('LOGIN ' + quote(self.input_))
                 self.input_ = ""
             elif self.mode.name == 'take_thing' and key == '\n':
-                if self.input_ == '':
-                    self.log_msg('@ aborted')
-                else:
-                    try:
-                        i = int(self.input_)
-                        if i < 0 or i >= len(self.selectables):
-                            self.log_msg('? invalid index, aborted')
-                        else:
-                            self.send('TASK:PICK_UP %s' % self.selectables[i].id_)
-                    except ValueError:
+                try:
+                    i = int(self.input_)
+                    if i < 0 or i >= len(self.selectables):
                         self.log_msg('? invalid index, aborted')
+                    else:
+                        self.send('TASK:PICK_UP %s' % self.selectables[i].id_)
+                except ValueError:
+                    self.log_msg('? invalid index, aborted')
                 self.input_ = ''
                 self.switch_mode('play')
             elif self.mode.name == 'command_thing' and key == '\n':
-                if self.input_ == '':
-                    self.log_msg('@ aborted')
-                    self.switch_mode('play')
-                elif task_action_on('command'):
+                if task_action_on('command'):
                     self.send('TASK:COMMAND ' + quote(self.input_))
                     self.input_ = ""
             elif self.mode.name == 'control_pw_pw' and key == '\n':
@@ -1083,16 +1077,8 @@ class TUI:
             elif self.mode.name == 'chat' and key == '\n':
                 if self.input_ == '':
                     continue
-                if self.input_[0] == '/':  # FIXME fails on empty input
-                    if self.input_ in {'/' + self.keys['switch_to_play'], '/play'}:
-                        self.switch_mode('play')
-                    elif self.input_ in {'/' + self.keys['switch_to_study'], '/study'}:
-                        self.switch_mode('study')
-                    elif self.input_ in {'/' + self.keys['switch_to_edit'], '/edit'}:
-                        self.switch_mode('edit')
-                    elif self.input_ in {'/' + self.keys['switch_to_admin_enter'], '/admin'}:
-                        self.switch_mode('admin_enter')
-                    elif self.input_.startswith('/nick'):
+                if self.input_[0] == '/':
+                    if self.input_.startswith('/nick'):
                         tokens = self.input_.split(maxsplit=1)
                         if len(tokens) == 2:
                             self.send('NICK ' + quote(tokens[1]))