Skip to content

Commit

Permalink
Merge branch 'add-vi-mode-comment-region-support' of https://github.c…
Browse files Browse the repository at this point in the history
…om/Sasanidas/lem into Sasanidas-add-vi-mode-comment-region-support
  • Loading branch information
cxxxr committed Jan 13, 2024
2 parents 90d0927 + ac6dea8 commit e769293
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 11 deletions.
27 changes: 27 additions & 0 deletions extensions/vi-mode/visual.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
:normal)
(:import-from :lem-vi-mode/modeline
:state-modeline-orange)
(:import-from :lem/language-mode
:set-region-point-global)
(:import-from :lem-generics
:global-mode-region-beginning
:global-mode-region-end)
(:import-from :lem-base
:alive-point-p)
(:import-from :alexandria
Expand Down Expand Up @@ -245,3 +250,25 @@
(move-to-column *start-point* end-col)
(move-to-column (current-point) start-col))
(vi-visual-swap-points)))

(defmethod set-region-point-global ((start point) (end point)
(global-mode vi-mode))
(declare (ignore global-mode))
(when (visual-p)
(let ((v-range (visual-range)))
(move-point start (car v-range))
(move-point end (cadr v-range)))))

(defmethod global-mode-region-beginning ((global-mode vi-mode)
&optional (buffer (current-buffer)))
(declare (ignore buffer))
(if (visual-p)
(car (visual-range))
(editor-error "Not in visual mode")))

(defmethod global-mode-region-end ((global-mode vi-mode)
&optional (buffer (current-buffer)))
(declare (ignore buffer))
(if (visual-p)
(cadr (visual-range))
(editor-error "Not in visual mode")))
5 changes: 3 additions & 2 deletions lem.asd
Original file line number Diff line number Diff line change
Expand Up @@ -70,17 +70,18 @@
(:file "popup")
(:file "modeline")
(:file "command")
(:file "defcommand")
(:file "mode")
(:file "keymap")
(:file "defcommand")
(:file "fundamental-mode")
(:file "export-generics")
(:file "event-queue")
(:file "interp")
(:file "mouse")
(:file "context-menu")
(:file "input")
(:file "overlay")
(:file "streams")
(:file "fundamental-mode")
(:file "completion")
(:file "typeout")
(:file "cursors")
Expand Down
1 change: 1 addition & 0 deletions src/base/basic.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ The thrid argument PROP is a property to remove."
(count-characters (buffer-start-point buffer)
(buffer-end-point buffer))))


(defun region-beginning (&optional (buffer (current-buffer)))
"Return the integer value of point or mark, whichever is smaller."
(point-min (buffer-point buffer)
Expand Down
11 changes: 7 additions & 4 deletions src/defcommand.lisp
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
(in-package :lem-core)

(defun maybe-marked ()
(when (string= (mode-name (current-global-mode)) "emacs")
(check-marked)))

(eval-when (:compile-toplevel :load-toplevel)
(defun parse-arg-descriptors (arg-descriptors universal-argument)
"Parse arg descriptors given to define-command.
Expand Down Expand Up @@ -50,10 +54,9 @@
:default nil
:existing nil)))
(#\r
(push '(check-marked) pre-forms)
'(list
(region-beginning)
(region-end)))))
(push '(maybe-marked) pre-forms)
'(list (lem-generics:global-mode-region-beginning (current-global-mode))
(lem-generics:global-mode-region-end (current-global-mode))))))
((and (consp arg-descriptor)
(eq :splice (first arg-descriptor)))
(assert (alexandria:length= arg-descriptor 2))
Expand Down
14 changes: 14 additions & 0 deletions src/export-generics.lisp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
(in-package :lem-generics)

(defgeneric global-mode-region-beginning (global-mode &optional buffer))

(defmethod global-mode-region-beginning ((global-mode lem-core::emacs-mode)
&optional (buffer (current-buffer)))
(region-beginning buffer))


(defgeneric global-mode-region-end (global-mode &optional buffer))

(defmethod global-mode-region-end ((global-mode lem-core::emacs-mode)
&optional (buffer (current-buffer)))
(region-end buffer))
15 changes: 10 additions & 5 deletions src/ext/language-mode.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
:display-xref-locations
:display-xref-references
:find-root-directory
:buffer-root-directory)
:buffer-root-directory
:set-region-point-global)
#+sbcl
(:lock t))
(in-package :lem/language-mode)
Expand Down Expand Up @@ -153,7 +154,11 @@
(uncomment-region)
(comment-region)))

(defun set-region-point (start end)
(defgeneric set-region-point-global (start end global-mode))

(defmethod set-region-point-global ((start point) (end point)
(global-mode lem-core::emacs-mode))
(declare (ignore global-mode))
(cond
((buffer-mark-p (current-buffer))
(move-point start (cursor-region-beginning (current-point)))
Expand All @@ -166,7 +171,7 @@
(alexandria:when-let ((line-comment (variable-value 'line-comment :buffer)))
(with-point ((start (current-point))
(end (current-point)))
(set-region-point start end)
(set-region-point-global start end (lem-core::current-global-mode))
(loop
(skip-whitespace-forward start)
(when (point>= start end)
Expand All @@ -183,7 +188,7 @@
(when line-comment
(with-point ((start (current-point) :right-inserting)
(end (current-point) :left-inserting))
(set-region-point start end)
(set-region-point-global start end (lem-core::current-global-mode))
(skip-whitespace-forward start)
(when (point>= start end)
(insert-string (current-point) line-comment)
Expand All @@ -210,7 +215,7 @@
(when line-comment
(with-point ((start (current-point) :right-inserting)
(end (current-point) :right-inserting))
(set-region-point start end)
(set-region-point-global start end (lem-core::current-global-mode))
(let ((p start))
(loop
(parse-partial-sexp p end nil t)
Expand Down
6 changes: 6 additions & 0 deletions src/internal-packages.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
:void-object
:text-object))

(defpackage :lem-generics
(:use :cl :lem-base)
(:export
:global-mode-region-beginning
:global-mode-region-end))

(uiop:define-package :lem-core
(:use :cl
:lem/common/killring
Expand Down

0 comments on commit e769293

Please sign in to comment.