From 3053183a68e82fe065491604519d97b5a1a5014e Mon Sep 17 00:00:00 2001 From: cage Date: Wed, 28 Feb 2024 15:49:28 +0100 Subject: [PATCH] - [TUI] allowed the backspace key to send rubout char (ASCII 177). --- src/command-window.lisp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/command-window.lisp b/src/command-window.lisp index f70d4f8..da4edc1 100644 --- a/src/command-window.lisp +++ b/src/command-window.lisp @@ -246,6 +246,10 @@ be either `:keybinding' or `:string'. the former for key command the latter for (defgeneric remove-messages (object)) +(defun event-wants-delete-last-element-p (decoded-event) + (or (eq decoded-event :key-backspace) + (string= decoded-event "^?"))) + (defun manage-command-event (command-window event) "Intercept UI events in keybinding mode" (with-accessors ((command-line command-line) @@ -257,7 +261,7 @@ be either `:keybinding' or `:string'. the former for key command the latter for (move-suggestion-page-left command-window)) ((eq :control-right decoded-event) ; suggestion win pagination (move-suggestion-page-right command-window)) - ((eq :key-backspace decoded-event) ; delete last command or char + ((event-wants-delete-last-element-p decoded-event) ; delete last command or char (let ((command-before-last (safe-all-but-last-elt command-line))) (setf command-line nil) (cond @@ -479,6 +483,8 @@ command line." command-line) (program-events:push-event input-done-event)))) +(define-constant +event-cut-line+ "^K" :test #'string=) + (defun manage-string-event (command-window event) "Manage UI events when `command-window` is in string mode" (with-accessors ((command-line command-line) @@ -498,15 +504,15 @@ command line." (db:insert-in-history prompt command-line) (set-history-most-recent command-window prompt))) (multiple-value-bind (decoded-event original-key-event) - (decode-key-event event) + (decode-key-event event :convert-symbol-to-string nil) (cond - ((string= decoded-event "^K") + ((string= decoded-event +event-cut-line+) (setf command-line (safe-subseq command-line 0 (no-prompt-point-pos command-window)))) ((eq :alt-left original-key-event) (move-suggestion-page-left command-window)) ((eq :alt-right original-key-event) (move-suggestion-page-right command-window)) - ((eq :key-backspace original-key-event) + ((event-wants-delete-last-element-p decoded-event) (setf command-line (delete-at-point command-window command-line :direction :left)) (when 'hooks:*after-char-to-command-window* (hooks:run-hook 'hooks:*after-delete-char-from-command-window* command-window))