fix: cursor movement marks dirty in text-input and textarea (regression from cursor rendering fix)

This commit is contained in:
Hermes Agent
2026-05-12 14:07:17 +00:00
parent b0ede26bff
commit baa27f766f
2 changed files with 14 additions and 7 deletions

View File

@@ -72,17 +72,21 @@
;;; --------------------------------------------------------------------------- ;;; ---------------------------------------------------------------------------
(defun text-input-move-left (input) (defun text-input-move-left (input)
(when (plusp (text-input-cursor input)) (when (plusp (text-input-cursor input))
(decf (text-input-cursor input)))) (decf (text-input-cursor input)))
(mark-dirty input))
(defun text-input-move-right (input) (defun text-input-move-right (input)
(when (< (text-input-cursor input) (length (text-input-value input))) (when (< (text-input-cursor input) (length (text-input-value input)))
(incf (text-input-cursor input)))) (incf (text-input-cursor input)))
(mark-dirty input))
(defun text-input-move-home (input) (defun text-input-move-home (input)
(setf (text-input-cursor input) 0)) (setf (text-input-cursor input) 0)
(mark-dirty input))
(defun text-input-move-end (input) (defun text-input-move-end (input)
(setf (text-input-cursor input) (length (text-input-value input)))) (setf (text-input-cursor input) (length (text-input-value input)))
(mark-dirty input))
(defun text-input-delete-word-before (input) (defun text-input-delete-word-before (input)
"Delete from cursor back to previous word boundary." "Delete from cursor back to previous word boundary."

View File

@@ -39,7 +39,8 @@
(max 0 (min (textarea-cursor-row ta) (1- (length lines))))) (max 0 (min (textarea-cursor-row ta) (1- (length lines)))))
(let ((line-len (length (nth (textarea-cursor-row ta) lines)))) (let ((line-len (length (nth (textarea-cursor-row ta) lines))))
(setf (textarea-cursor-col ta) (setf (textarea-cursor-col ta)
(max 0 (min (textarea-cursor-col ta) line-len)))))) (max 0 (min (textarea-cursor-col ta) line-len)))))
(mark-dirty ta))
;;; --------------------------------------------------------------------------- ;;; ---------------------------------------------------------------------------
;;; Utility: join strings with newline ;;; Utility: join strings with newline
@@ -207,11 +208,13 @@
(textarea-ensure-cursor ta)) (textarea-ensure-cursor ta))
(:up (textarea-move-up ta)) (:up (textarea-move-up ta))
(:down (textarea-move-down ta)) (:down (textarea-move-down ta))
(:home (setf (textarea-cursor-col ta) 0)) (:home (setf (textarea-cursor-col ta) 0)
(textarea-ensure-cursor ta))
(:end (let ((lines (textarea-lines ta))) (:end (let ((lines (textarea-lines ta)))
(when (< (textarea-cursor-row ta) (length lines)) (when (< (textarea-cursor-row ta) (length lines))
(setf (textarea-cursor-col ta) (setf (textarea-cursor-col ta)
(length (nth (textarea-cursor-row ta) lines)))))) (length (nth (textarea-cursor-row ta) lines))))
(textarea-ensure-cursor ta)))
(:enter (let ((cb (textarea-on-submit ta))) (:enter (let ((cb (textarea-on-submit ta)))
(if cb (if cb
(funcall cb (textarea-value ta)) (funcall cb (textarea-value ta))