Select widget: list of options with keyboard navigation (up/down/enter/esc, ctrl+n/p), case-insensitive substring filter with character-set Jaccard fuzzy fallback, category headers, viewport culling, on-select callback. Fixed from subagent review: - Category filter return-from bug: categories kept in filtered set - Dead trigram code removed (string-trigrams, trigram-score) - Exports cleaned up (removed unused trigram exports) - Character-set Jaccard replaces trigrams (better for short strings) 25 select tests, 100% GREEN. 196 total (27 backend + 58 box + 60 input + 26 scrollbox/tabbar + 25 select)
71 lines
2.8 KiB
Common Lisp
71 lines
2.8 KiB
Common Lisp
;;; cl-tui.asd — Common Lisp Terminal UI Framework
|
|
(asdf:defsystem :cl-tui
|
|
:description "Reusable Common Lisp Terminal UI Framework"
|
|
:author "Amr Gharbeia"
|
|
:version "0.7.0"
|
|
:license "TBD"
|
|
:depends-on (:fiveam :sb-posix)
|
|
:components
|
|
((:module "backend"
|
|
:components
|
|
((:file "package")
|
|
(:file "classes" :depends-on ("package"))
|
|
(:file "simple" :depends-on ("package" "classes"))
|
|
(:file "modern" :depends-on ("package" "classes"))))
|
|
(:module "layout"
|
|
:components
|
|
((:file "layout")))
|
|
(:module "src/components"
|
|
:components
|
|
((:file "package")
|
|
(:file "dirty")
|
|
(:file "box" :depends-on ("package"))
|
|
(:file "text" :depends-on ("package" "box"))
|
|
(:file "render" :depends-on ("package" "box" "text"))
|
|
(:file "theme" :depends-on ("package"))
|
|
;; Input system (v0.5.0)
|
|
(:file "input-package" :depends-on ("package"))
|
|
(:file "input" :depends-on ("input-package" "dirty" "box"))
|
|
(:file "text-input" :depends-on ("input-package" "input" "box"))
|
|
(:file "textarea" :depends-on ("input-package" "input" "box"))
|
|
(:file "keybindings" :depends-on ("input-package" "input"))
|
|
;; Container components (v0.6.0)
|
|
(:file "container-package" :depends-on ("package" "input-package"))
|
|
(:file "scrollbox" :depends-on ("container-package" "dirty" "box"))
|
|
(:file "tabbar" :depends-on ("container-package" "dirty" "box"))
|
|
;; Select widget (v0.7.0)
|
|
(:file "select-package" :depends-on ("package" "input-package"))
|
|
(:file "select" :depends-on ("select-package" "dirty" "box"))))
|
|
:in-order-to ((test-op (test-op :cl-tui-tests))))
|
|
|
|
(asdf:defsystem :cl-tui-tests
|
|
:description "Test suite for cl-tui"
|
|
:depends-on (:cl-tui :fiveam)
|
|
:components
|
|
((:module "backend"
|
|
:components
|
|
((:file "tests")))
|
|
(:module "layout"
|
|
:components
|
|
((:file "tests")))
|
|
(:module "src/components"
|
|
:components
|
|
((:file "box-tests")
|
|
(:file "dirty-tests")
|
|
(:file "render-tests")
|
|
(:file "theme-tests")
|
|
(:file "input-tests")
|
|
(:file "scrollbox-tabbar-tests" :pathname "../../tests/scrollbox-tabbar-tests.lisp")
|
|
(:file "select-tests" :pathname "../../tests/select-tests.lisp"))))
|
|
:perform (test-op (o c)
|
|
(dolist (suite '((:cl-tui-backend-test "BACKEND-SUITE")
|
|
(:cl-tui-box-test "BOX-SUITE")
|
|
(:cl-tui-input-test "INPUT-SUITE")
|
|
(:cl-tui-scrollbox-test "SCROLLBOX-SUITE")
|
|
(:cl-tui-select-test "SELECT-SUITE")))
|
|
(let* ((pkg (find-package (first suite)))
|
|
(s (and pkg (find-symbol (second suite) pkg))))
|
|
(when s
|
|
(fiveam:explain! (fiveam:run s)))))
|
|
(uiop:quit 0)))
|