Add COM-FORWARD-WORD and COM-BACKWARD-WORD

This commit is contained in:
John Lorentzson 2025-07-21 21:49:04 +02:00
parent e717f49afc
commit 10e4cf8dc3

View file

@ -683,6 +683,52 @@ Additionally ensures correct line numbers on the way, as a bonus."
(com-end-of-line)))) (com-end-of-line))))
(update-buffer-cursor buffer))) (update-buffer-cursor buffer)))
(defun com-forward-word ()
(with-editor-accessors *editor* (:current-buffer buffer
:current-line line
:current-column column)
(loop :for char := (char (line-content line) column)
:do (incf column)
:when (>= column (line-length line))
:do (if (null (next-line line))
(progn
(feep)
(return))
(setf column 0
line (next-line line)))
:until (or (zerop column)
(null line)
(char= char #\Space)))
(update-buffer-cursor buffer)))
(defun com-backward-word ()
(with-editor-accessors *editor* (:current-buffer buffer
:current-line line
:current-column column)
(when (zerop column)
(if (null (prev-line line))
(progn
(feep)
(return-from com-backward-word))
(setf line (prev-line line)
column (line-length line))))
(loop :with donep := nil
:do (decf column)
:when (minusp column)
:do (if (null (prev-line line))
(progn
(feep)
(setf column 0)
(return))
(setf column (1- (line-length line))
line (prev-line line)
donep t))
:until (or donep
(zerop column)
(null line)
(char= (char (line-content line) (1- column)) #\Space)))
(update-buffer-cursor buffer)))
(defun com-new-buffer () (defun com-new-buffer ()
(setf (current-buffer *editor*) (setf (current-buffer *editor*)
(make-instance 'buffer)) (make-instance 'buffer))
@ -768,7 +814,9 @@ Additionally ensures correct line numbers on the way, as a bonus."
((:c . #\d) com-forward-delete) ((:c . #\d) com-forward-delete)
((:c . #\j) com-newline) ((:c . #\j) com-newline)
((:c . #\n) com-new-buffer) ((:c . #\n) com-new-buffer)
((:c . #\l) com-refresh-screen))) ((:c . #\l) com-refresh-screen)
((:m . #\f) com-forward-word)
((:m . #\b) com-backward-word)))
(defun key-command-dispatch (key) (defun key-command-dispatch (key)
(when (numberp key) (when (numberp key)