Add COM-FORWARD-WORD and COM-BACKWARD-WORD
This commit is contained in:
parent
e717f49afc
commit
10e4cf8dc3
1 changed files with 49 additions and 1 deletions
|
@ -683,6 +683,52 @@ Additionally ensures correct line numbers on the way, as a bonus."
|
|||
(com-end-of-line))))
|
||||
(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 ()
|
||||
(setf (current-buffer *editor*)
|
||||
(make-instance 'buffer))
|
||||
|
@ -768,7 +814,9 @@ Additionally ensures correct line numbers on the way, as a bonus."
|
|||
((:c . #\d) com-forward-delete)
|
||||
((:c . #\j) com-newline)
|
||||
((: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)
|
||||
(when (numberp key)
|
||||
|
|
Loading…
Add table
Reference in a new issue