
On Tue, 10 Oct 2023 at 02:16, Yurii Monakov monakov.y@gmail.com wrote:
Unexpected 'Esc' key presses are accumulated internally, even if it is already clear that the current escape sequence is invalid. This results in weird behaviour. For example, the next character after 'Esc' key simply disappears from input and 'Unknown command' is printed after 'Enter'.
This commit fixes some issues with extra 'Esc' keys entered by user:
- Sequence <Esc><Esc><Enter> right after autoboot stop gives:
=> nknown command 'ry 'help' => 2. Sequence <Esc><p><r><i><Enter> gives: => ri Unknown command 'ri' - try 'help' => 3. Extra 'Esc' key presses break backspace functionality.
Signed-off-by: Yurii Monakov monakov.y@gmail.com
Changes for v2:
- add tests and reword commit message
Changes for v3:
- fix indentation
common/cli_getch.c | 2 ++ test/common/cread.c | 12 ++++++++++++ 2 files changed, 14 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org
Unfortunately this shows a design flaw, one which is hard to fix in general. But this does improve it.
The flaw is that we assume that character sequences have a time gap between them, which allows figuring out when a sequence has finished.
But when starting up there may be buffered output with no gaps. I don't think there is a general fix for this problem. One option is to have a special mode at the start, where escape sequences are ignored. But the user may press an arrow key on startup.
So I don't have anything much to suggest here. Let's see how this fix goes. Perhaps it is enough.
Regards, Simon