From 34f705aef8d829c741212c6f12d292ac97979fef Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Fri, 18 Jul 2025 21:07:06 +0200 Subject: [PATCH] Improve UPDATE-BUFFER-CURSOR's means of getting a line into view --- wip-duuqnd/editor/editor.lisp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/wip-duuqnd/editor/editor.lisp b/wip-duuqnd/editor/editor.lisp index acf2ef4..290d603 100644 --- a/wip-duuqnd/editor/editor.lisp +++ b/wip-duuqnd/editor/editor.lisp @@ -422,17 +422,8 @@ Additionally ensures correct line numbers on the way, as a bonus." :do (ensure-correct-line-number line)) (let ((line-number (view-line-number (buffer-view buffer) (cursor-line (cursor buffer))))) - ;; the ugly (of many, one) - (when (null line-number) ; line is off-screen - (if (and (not (null (bottom-line (buffer-view buffer)))) - (eql (next-line (bottom-line (buffer-view buffer))) - (cursor-line (cursor buffer)))) - (setf (top-line (buffer-view buffer)) - (next-line (top-line (buffer-view buffer))) - (bottom-line (buffer-view buffer)) nil) - (setf (top-line (buffer-view buffer)) (cursor-line (cursor buffer)) - (bottom-line (buffer-view buffer)) nil)) - (redisplay-view (buffer-view buffer)) + (when (null line-number) + (get-line-into-view (cursor-line (cursor buffer)) (buffer-view buffer)) (setf line-number (view-line-number (buffer-view buffer) (cursor-line (cursor buffer))))) (move-cursor line-number (cursor-column (cursor buffer))))) @@ -554,6 +545,18 @@ Additionally ensures correct line numbers on the way, as a bonus." (redisplay-line (top-line view)) (redisplay-status-line :completely-p t)) +(defmethod get-line-into-view ((line line) (view buffer-view)) + ;; Assuming it's not already. + (update-view-bottom view) + (cond ((eql line (prev-line (top-line view))) + (scroll-view-up view)) + ((eql line (next-line (bottom-line view))) + (scroll-view-down view)) + (t + (setf (top-line view) line) + (redisplay-view view))) + (redisplay-status-line :completely-p nil)) + (defmethod current-view ((obj editor)) (buffer-view (current-buffer obj)))