Add method to copy whole text into editor buffer

This commit is contained in:
John Lorentzson 2025-07-29 20:23:54 +02:00
parent 4f096b9820
commit 8d4d462efc
3 changed files with 19 additions and 2 deletions

View file

@ -3,7 +3,7 @@
(asdf:defsystem #:editor (asdf:defsystem #:editor
:version "0.1.0" :version "0.1.0"
:serial t :serial t
:depends-on (#:user-side-compiler #:trivial-gray-streams) :depends-on (#:user-side-compiler #:trivial-gray-streams #:split-sequence)
:components ((:file "package") :components ((:file "package")
(:file "editor") (:file "editor")
(:file "binary-build"))) (:file "binary-build")))

View file

@ -414,6 +414,23 @@ serial connection the editor normally runs under.")
:do (write-string (line-content line) output) :do (write-string (line-content line) output)
(terpri output)))) (terpri output))))
(defmethod (setf buffer-string) (new-value (buffer buffer))
(declare (optimize (debug 3)))
(let ((lines (split-sequence #\Newline new-value)))
(setf (first-line buffer) (make-instance 'line))
(set-line-text (first-line buffer) (first lines))
(loop :for lines-left := (rest lines) :then (rest lines-left)
:until (null lines-left)
:for line := (first lines-left)
:for prev-line := (first-line buffer) :then line-obj
:for line-obj := (make-instance 'line :prev-line prev-line)
:do (setf (next-line prev-line) line-obj)
(set-line-text line-obj line))
(setf (top-line (buffer-view buffer)) (first-line buffer)
(bottom-line (buffer-view buffer)) nil
(cursor-line (cursor buffer)) (first-line buffer)
(cursor-column (cursor buffer)) 0)))
(defmethod update-buffer-cursor ((buffer buffer)) (defmethod update-buffer-cursor ((buffer buffer))
"Makes sure the screen cursor is the same as BUFFER's logical cursor. "Makes sure the screen cursor is the same as BUFFER's logical cursor.
Additionally ensures correct line numbers on the way, as a bonus." Additionally ensures correct line numbers on the way, as a bonus."

View file

@ -1,5 +1,5 @@
;;;; package.lisp ;;;; package.lisp
(defpackage #:editor (defpackage #:editor
(:use #:cl #:trivial-gray-streams) (:use #:cl #:trivial-gray-streams #:split-sequence)
(:export #:main)) (:export #:main))