fix: software █ cursor blinking at 2Hz independently of typing
position-cursor runs every frame from main loop (after sleep 0.1), drawing █ when cursor-visible-p returns T, space when NIL. This creates a true 2Hz blink that toggles independently of keypresses. Terminal cursor also set to blinking block as fallback.
This commit is contained in:
@@ -327,9 +327,13 @@ Returns a list of strings, one per line."
|
|||||||
(cl-tty.backend:end-sync fb)
|
(cl-tty.backend:end-sync fb)
|
||||||
(setf (st :dirty) (list nil nil nil))))
|
(setf (st :dirty) (list nil nil nil))))
|
||||||
|
|
||||||
|
(defun cursor-visible-p ()
|
||||||
|
"Returns T if the software-cursor should be visible this frame (2Hz)."
|
||||||
|
(evenp (floor (get-internal-real-time)
|
||||||
|
(floor internal-time-units-per-second 2))))
|
||||||
|
|
||||||
(defun position-cursor (fb w h)
|
(defun position-cursor (fb w h)
|
||||||
"Position terminal cursor at the input insertion point.
|
"Position terminal cursor at input insertion point and draw █ software cursor."
|
||||||
Terminal handles the blinking — we just set position and style once per frame."
|
|
||||||
(let* ((sw (if (sidebar-visible-p w) (or (st :sidebar-width) 42) 0))
|
(let* ((sw (if (sidebar-visible-p w) (or (st :sidebar-width) 42) 0))
|
||||||
(cw (- w sw))
|
(cw (- w sw))
|
||||||
(hpad 2)
|
(hpad 2)
|
||||||
@@ -341,7 +345,8 @@ Terminal handles the blinking — we just set position and style once per frame.
|
|||||||
(cy (- h 6)))
|
(cy (- h 6)))
|
||||||
(cl-tty.backend:cursor-move fb cx cy)
|
(cl-tty.backend:cursor-move fb cx cy)
|
||||||
(cl-tty.backend:cursor-style fb :block :blink t)
|
(cl-tty.backend:cursor-style fb :block :blink t)
|
||||||
(cl-tty.backend:cursor-show fb)))
|
;; Software █ cursor — erase old position with space, draw new position
|
||||||
|
(cl-tty.backend:draw-text fb cx cy (if (cursor-visible-p) "█" " ") (theme-color :input-fg) nil)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
* Implementation — v0.7.0 additions
|
* Implementation — v0.7.0 additions
|
||||||
|
|||||||
Reference in New Issue
Block a user