Skip to content

Commit 47bdcda

Browse files
committed
Make region selection functions behave more vi like in vi-mode
1 parent 4cd3e96 commit 47bdcda

File tree

5 files changed

+8
-3
lines changed

5 files changed

+8
-3
lines changed

extensions/vi-mode/states.lisp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,15 @@
127127
(setf (current-state) state)))
128128

129129
(defun vi-enable-hook ()
130+
(setf *region-end-offset* -1)
130131
(setf (current-state) (or (buffer-state (current-buffer)) (ensure-state 'normal)))
131132
(add-hook *switch-to-buffer-hook* 'vi-switch-to-buffer)
132133
(add-hook *switch-to-window-hook* 'vi-switch-to-window)
133134
(add-hook *prompt-after-activate-hook* 'enter-prompt)
134135
(add-hook *prompt-deactivate-hook* 'exit-prompt))
135136

136137
(defun vi-disable-hook ()
138+
(setf *region-end-offset* 0)
137139
(remove-hook *switch-to-buffer-hook* 'vi-switch-to-buffer)
138140
(remove-hook *switch-to-window-hook* 'vi-switch-to-window)
139141
(remove-hook *prompt-after-activate-hook* 'enter-prompt)

src/commands/s-expression.lisp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
(form-offset (mark-point (cursor-mark (current-point))) 1))
6767
(t
6868
(save-excursion
69-
(form-offset (current-point) 1)
69+
(character-offset (form-offset (current-point) 1) *region-end-offset*)
7070
(set-cursor-mark (current-point) (current-point))))))
7171

7272
(define-command (kill-sexp (:advice-classes editable-advice)) (&optional (n 1)) (:universal)

src/internal-packages.lisp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,7 @@
644644
:background-color)
645645
;; region.lisp
646646
(:export
647+
:*region-end-offset*
647648
:check-marked-using-global-mode
648649
:region-beginning-using-global-mode
649650
:region-end-using-global-mode

src/mouse.lisp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@
331331
(get-select-expression-points (current-point))
332332
(when start
333333
(set-current-mark start)
334-
(move-point (current-point) end))))
334+
(move-point (current-point) (character-offset end *region-end-offset*)))))
335335

336336
(defun select-form-at-current-point ()
337337
(with-point ((start (current-point))
@@ -341,7 +341,7 @@
341341
(move-point end start)
342342
(form-offset end 1)
343343
(set-current-mark start)
344-
(move-point (current-point) end))))
344+
(move-point (current-point) (character-offset end *region-end-offset*)))))
345345

346346

347347
(define-command <mouse-event> () ()

src/region.lisp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
(in-package :lem-core)
22

3+
(defvar *region-end-offset* 0)
4+
35
(defgeneric check-marked-using-global-mode (global-mode buffer))
46
(defgeneric region-beginning-using-global-mode (global-mode &optional buffer))
57
(defgeneric region-end-using-global-mode (global-mode &optional buffer))

0 commit comments

Comments
 (0)