From 1719f0b6cf92a58045aeaee158e6e6894ce37215 Mon Sep 17 00:00:00 2001 From: Amr Gharbeia Date: Sun, 19 Apr 2026 14:54:15 -0400 Subject: [PATCH] fix(tui): Use get-wide-event and map character keys correctly --- literate/tui-client.org | 8 ++++---- src/tui-client.lisp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/literate/tui-client.org b/literate/tui-client.org index d739f4f..8d2f2bd 100644 --- a/literate/tui-client.org +++ b/literate/tui-client.org @@ -101,10 +101,11 @@ The OpenCortex TUI Client is a standalone Common Lisp application built on **Cro (setf last-status *status-text*)) ;; 3. Handle Keyboard Input - (let ((ch (get-char input-win))) + (let* ((event (get-wide-event input-win)) + (ch (and event (typep event 'event) (event-key event)))) (when ch (cond - ((eq ch #\Newline) + ((or (eq ch #\Newline) (eq ch #\Return)) (let ((cmd (coerce *input-buffer* 'string))) (setf (fill-pointer *input-buffer*) 0) (when (> (length cmd) 0) @@ -112,12 +113,11 @@ The OpenCortex TUI Client is a standalone Common Lisp application built on **Cro (format *stream* "~a" framed) (finish-output *stream*))) (when (string= cmd "/exit") (setf *is-running* nil)))) - ((eq ch :backspace) + ((or (eq ch :backspace) (eq ch #\Backspace) (eq ch #\Rubout) (eq ch #\Del)) (when (> (length *input-buffer*) 0) (decf (fill-pointer *input-buffer*)))) ((characterp ch) (vector-push-extend ch *input-buffer*)))) - (clear input-win) (add-string input-win (concatenate 'string "> " (coerce *input-buffer* 'string))) (move input-win 0 (+ 2 (length *input-buffer*))) diff --git a/src/tui-client.lisp b/src/tui-client.lisp index ed0ba23..c1e2378 100644 --- a/src/tui-client.lisp +++ b/src/tui-client.lisp @@ -88,10 +88,11 @@ (setf last-status *status-text*)) ;; 3. Handle Keyboard Input - (let ((ch (get-char input-win))) + (let* ((event (get-wide-event input-win)) + (ch (and event (typep event 'event) (event-key event)))) (when ch (cond - ((eq ch #\Newline) + ((or (eq ch #\Newline) (eq ch #\Return)) (let ((cmd (coerce *input-buffer* 'string))) (setf (fill-pointer *input-buffer*) 0) (when (> (length cmd) 0) @@ -99,12 +100,11 @@ (format *stream* "~a" framed) (finish-output *stream*))) (when (string= cmd "/exit") (setf *is-running* nil)))) - ((eq ch :backspace) + ((or (eq ch :backspace) (eq ch #\Backspace) (eq ch #\Rubout) (eq ch #\Del)) (when (> (length *input-buffer*) 0) (decf (fill-pointer *input-buffer*)))) ((characterp ch) (vector-push-extend ch *input-buffer*)))) - (clear input-win) (add-string input-win (concatenate 'string "> " (coerce *input-buffer* 'string))) (move input-win 0 (+ 2 (length *input-buffer*)))