menu-example-01.lisp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. (in-package :lilu-dmenu-example)
  2. (defun test-dmenu-number (&optional (n 20))
  3. (let ((seqs (loop for i from 0 to n
  4. collect (list i (format nil "~r" i)))))
  5. (multiple-value-bind (sel match-p)
  6. (dmenu "number? " seqs :item-fn #'car)
  7. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))
  8. (multiple-value-bind (sel match-p)
  9. (dmenu "number? " seqs :item-fn #'cadr)
  10. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))))
  11. (defun test-rofi-number (&optional (n 20))
  12. (let ((seqs (loop for i from 0 to n
  13. collect (list i (format nil "~r" i)))))
  14. (multiple-value-bind (sel match-p)
  15. (rofi "number? " seqs :item-fn #'car)
  16. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))
  17. (multiple-value-bind (sel match-p)
  18. (rofi "number? " seqs :item-fn #'cadr :only-match-p t)
  19. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))))
  20. (defun test-dynamic-menu-number (&optional (n 20))
  21. (let ((seqs (loop for i from 0 to n
  22. collect (list i (format nil "~r" i)))))
  23. (multiple-value-bind (sel match-p)
  24. (dynamic-menu "number? " seqs :item-fn #'car)
  25. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))
  26. (multiple-value-bind (sel match-p)
  27. (dynamic-menu "number? " seqs :item-fn #'cadr)
  28. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))))
  29. (defun test-rofi-number-with-themes (&optional (n 20))
  30. (let ((seqs (loop for i from 0 to n
  31. collect (list i (format nil "~r" i)))))
  32. (flet ((test ()
  33. (format *debug-io* "~A~%" (assoc :fg *rofi-theme*))
  34. (multiple-value-bind (sel match-p)
  35. (rofi "number? " seqs :item-fn #'car)
  36. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))))
  37. (test)
  38. (let ((*rofi-theme* '()))
  39. (test))
  40. (let ((my-theme '((:font . "DejaVu 15") (:lines . "4") (:theme . "DarkBlue"))))
  41. (let ((*rofi-theme* (append my-theme *rofi-theme*)))
  42. (test))))))
  43. (defun test-dmenu-number-with-themes (&optional (n 20))
  44. (let ((seqs (loop for i from 0 to n
  45. collect (list i (format nil "~r" i)))))
  46. (flet ((test ()
  47. (multiple-value-bind (sel match-p)
  48. (dmenu "number? " seqs :item-fn #'car)
  49. (format t "Selection: ~A (~A) ~%" sel (if match-p "matched" "unmatched")))))
  50. (test)
  51. (let ((*dmenu-theme* '()))
  52. (test))
  53. (let ((my-theme '((:bg . "#ff0033") (:lines . "3") (:fg . "#0011aa"))))
  54. (let ((*dmenu-theme* (append my-theme *dmenu-theme*)))
  55. (test))))))
  56. (defun test-select-a-files (&optional (dir "~/"))
  57. (let ((current-dir dir))
  58. (flet ((gen-seqs (d)
  59. (append
  60. '("..")
  61. (uiop/filesystem:subdirectories d)
  62. (uiop/filesystem:directory-files d)))
  63. (get-action (sel match-p)
  64. (if match-p
  65. (if (uiop:directory-pathname-p sel)
  66. (values :go sel)
  67. (if (equal sel "..")
  68. (values :go (uiop/pathname:pathname-parent-directory-pathname current-dir))
  69. (values :select sel)))
  70. (values :create sel))))
  71. (do ((act :go)
  72. (act-val dir)
  73. (i 0 (+ 1 i)))
  74. ((or (> i 10) (not (eql act :go))) (when act-val
  75. (values act-val act)))
  76. (setf (values act act-val)
  77. (multiple-value-call #'get-action
  78. (dynamic-menu (format nil "~A> file? " (pathname current-dir))
  79. (gen-seqs current-dir) :item-fn #'pathname)))
  80. (when (eql act :go)
  81. (setf current-dir act-val))))))