altmeta vs number_pad

While testing a potential fix for issue #1250, I discovered that
using the altmeta option, to simulate typing Alt+x to get M-x via
typing 'ESC x', didn't work after a count prefixed by 'n' when in
number_pad mode.  It did work as intended for !number_pad when a
repeat count prefix is entered via digits without 'n'.

This doesn't solve #1250, which also occurs for number_pad but not
for !number_pad.
This commit is contained in:
PatR
2024-06-17 04:23:34 -07:00
parent 78bf0db5b3
commit c2f717cd65
2 changed files with 16 additions and 2 deletions

View File

@@ -4716,7 +4716,9 @@ get_count(
return key;
}
/* main command input routine when not repeating and not executing canned
commands; input comes via get_count() which collects repeat count if one
is present and returns next non-digit to us */
staticfn int
parse(void)
{
@@ -4728,9 +4730,17 @@ parse(void)
flush_screen(1); /* Flush screen buffer. Put the cursor on the hero. */
/* affects readchar() behavior for ESC iff 'altmeta' option is On;
reset to 0 by readchar() */
is always reset to otherInp by readchar() */
gp.program_state.input_state = commandInp;
if (!gc.Cmd.num_pad || (foo = readchar()) == gc.Cmd.spkeys[NHKF_COUNT]) {
/* if 'num_pad' is On then readchar() has just reset input_state;
set it back to commandInp, so that get_count() supports 'altmeta';
otherwise "n<count>ESC<character>" becomes "n<count>ESC" (with
<character> not read from keyboard yet) rather than intended count
and meta keystroke "n<count>M-<character>" */
gp.program_state.input_state = commandInp;
foo = get_count((char *) 0, '\0', LARGEST_INT,
&gc.command_count, GC_NOFLAGS);
gl.last_command_count = gc.command_count;