[Concept,00/19] Enhanced command-line editing with undo/redo support

Message ID 20260130035849.3580212-1-simon.glass@canonical.com
Headers
Series Enhanced command-line editing with undo/redo support |

Message

Simon Glass Jan. 30, 2026, 3:58 a.m. UTC
  This series adds enhanced editing features to the U-Boot command line,
including multi-level undo/redo, yank/paste, word navigation, and
multiline editing support for the expo textedit widget.

Key features:
- Multi-level undo (Ctrl+Z) and redo (Ctrl+Shift+Z) with configurable
  depth via CONFIG_CMDLINE_UNDO_COUNT
- Yank/paste killed text with Ctrl+Y
- Word navigation with Ctrl+Left/Right arrows
- Home/End key support in sandbox SDL console
- Multiline editing mode where Ctrl+K kills to end of line (not buffer)
  and Home/End navigate within the current line

The series also includes test infrastructure improvements, fixes a memory
leak in expo text object destruction, and fixes a buildman bug with
merge_config.sh path resolution when using work directories.


Simon Glass (19):
  buildman: Fix merge_config.sh path when using work directories
  buildman: Add option to build then show summary
  test: Add ut_check_video() helper function
  test: Add video_compress_fb_() with message parameter
  test: Display message at top right during video test delay
  expo: Free gen.lines alist when destroying text objects
  expo: Read all available input to keep up with key repeat
  input: Add Ctrl+arrow key support for sandbox SDL console
  input: Add Home and End key support for sandbox SDL console
  input: Add Ctrl+Shift+Z support for redo
  cli: Add a Kconfig for enhanced editing
  cmd: editenv: Add -e flag for expo-based editing
  test: Add editenv test for init/poll/uninit functions
  expo: Convert BKEY_UP/DOWN to control characters for text input
  cli: Add Ctrl+Left/Right arrow support for word navigation
  expo: Add SCENEOF_MULTILINE flag for textedit
  cli: Make Ctrl+K clear to end of line in multiline mode
  cli: Add Ctrl+Y to yank killed text
  cli: Add multi-level undo/redo support

 arch/sandbox/dts/cros-ec-keyboard.dtsi |   4 +
 boot/Kconfig                           |   9 +
 boot/Makefile                          |   1 +
 boot/editenv.c                         | 193 +++++++++++++++++++
 boot/expo.c                            |   6 +-
 boot/scene.c                           |   2 +
 boot/scene_txtin.c                     |  73 ++++++-
 cmd/Kconfig                            |  47 ++++-
 cmd/nvedit.c                           |  50 ++++-
 common/Makefile                        |   1 +
 common/cli_getch.c                     |  40 ++++
 common/cli_readline.c                  | 239 +++++++++++++++++++++--
 common/cli_undo.c                      | 251 ++++++++++++++++++++++++
 doc/develop/expo.rst                   |  21 ++
 doc/usage/cmdline.rst                  |  68 +++++++
 drivers/input/input.c                  |  54 ++++++
 include/cli.h                          | 230 +++++++++++++++++++++-
 include/expo.h                         |  66 +++++++
 include/test/test.h                    |   5 +
 include/test/video.h                   |  12 ++
 test/boot/Makefile                     |   1 +
 test/boot/editenv.c                    | 253 +++++++++++++++++++++++++
 test/boot/expo.c                       |  63 +++++-
 test/dm/video.c                        | 139 +++++++++++++-
 test/test-main.c                       |   2 +
 tools/buildman/buildman.rst            |   5 +-
 tools/buildman/cfgutil.py              |  21 +-
 tools/buildman/cmdline.py              |   2 +
 tools/buildman/control.py              |   4 +
 tools/buildman/test.py                 | 110 +++++++++++
 tools/buildman/test_cfgutil.py         |  48 +++++
 31 files changed, 1954 insertions(+), 66 deletions(-)
 create mode 100644 boot/editenv.c
 create mode 100644 common/cli_undo.c
 create mode 100644 test/boot/editenv.c