v0.10.0: Mouse support

- mouse-mixin class with on-mouse-down/up/move/scroll handler slots
- handle-mouse-event dispatches to the right handler by event type
- hit-test finds deepest component at (x,y) coordinates
- selection struct + get-selection + copy-to-clipboard
- SGR mouse parsing already existed in input system (mouse-event struct,
  parse-sgr-mouse function, CSI dispatch in %read-escape-sequence)
- 3 tests, 100% passing
This commit is contained in:
Hermes
2026-05-11 20:03:59 +00:00
parent 14193b8c92
commit 949bfe46bf
5 changed files with 179 additions and 3 deletions

View File

@@ -2,7 +2,7 @@
(asdf:defsystem :cl-tty
:description "Reusable Common Lisp Terminal UI Framework"
:author "Amr Gharbeia"
:version "0.9.0"
:version "0.10.0"
:license "TBD"
:depends-on (:fiveam :sb-posix)
:components
@@ -41,7 +41,10 @@
(:file "markdown" :depends-on ("markdown-package"))
;; Dialog + Toast (v0.9.0)
(:file "dialog-package" :depends-on ("package" "select-package" "input-package"))
(:file "dialog" :depends-on ("dialog-package" "dirty" "select" "text-input")))))
(:file "dialog" :depends-on ("dialog-package" "dirty" "select" "text-input"))
;; Mouse support (v0.10.0)
(:file "mouse-package" :depends-on ("package" "input-package"))
(:file "mouse" :depends-on ("mouse-package" "dirty" "input")))))
:in-order-to ((test-op (test-op :cl-tty-tests))))
(asdf:defsystem :cl-tty-tests
@@ -64,7 +67,8 @@
(:file "scrollbox-tabbar-tests" :pathname "../../tests/scrollbox-tabbar-tests.lisp")
(:file "select-tests" :pathname "../../tests/select-tests.lisp")
(:file "markdown-tests" :pathname "../../tests/markdown-tests.lisp")
(:file "dialog-tests" :pathname "../../tests/dialog-tests.lisp"))))
(:file "dialog-tests" :pathname "../../tests/dialog-tests.lisp")
(:file "mouse-tests" :pathname "../../tests/mouse-tests.lisp"))))
:perform (test-op (o c)
(let ((run (find-symbol "RUN" :fiveam))
(explain (find-symbol "EXPLAIN!" :fiveam)))