aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--evil-macros.el21
-rw-r--r--evil-types.el7
2 files changed, 15 insertions, 13 deletions
diff --git a/evil-macros.el b/evil-macros.el
index 5e57f61..4631a99 100644
--- a/evil-macros.el
+++ b/evil-macros.el
@@ -563,24 +563,26 @@ Optional keyword arguments are:
(setq evil-inhibit-operator-value nil)))))
;; this is used in the `interactive' specification of an operator command
-(defun evil-operator-range ()
- "Read a motion from the keyboard and return its buffer positions."
- (let* ((evil-ex-p (and (not (minibufferp)) (evil-ex-p)))
+(defun evil-operator-range (&optional return-type)
+ "Read a motion from the keyboard and return its buffer positions.
+The return value is a list (BEG END), or (BEG END TYPE) if
+RETURN-TYPE is non-nil."
+ (let* ((ex-p (and (not (minibufferp)) (evil-ex-p)))
(motion (or evil-operator-range-motion
- (when evil-ex-p 'evil-line)))
+ (when ex-p 'evil-line)))
(type evil-operator-range-type)
range count)
(setq evil-this-type-modified nil)
(evil-save-echo-area
(cond
;; Ex mode
- ((and evil-ex-p evil-ex-range)
+ ((and ex-p evil-ex-range)
(setq range evil-ex-range))
;; Visual selection
- ((and (not evil-ex-p) (evil-visual-state-p))
+ ((and (not ex-p) (evil-visual-state-p))
(setq range (evil-visual-range)))
;; active region
- ((and (not evil-ex-p) (region-active-p))
+ ((and (not ex-p) (region-active-p))
(setq range (evil-range (region-beginning)
(region-end)
(or evil-this-type 'exclusive))))
@@ -636,7 +638,10 @@ Optional keyword arguments are:
(setq evil-operator-range-beginning (evil-range-beginning range)
evil-operator-range-end (evil-range-end range)
evil-operator-range-type (evil-type range))
- range))
+ (if return-type
+ (list (car range) (cadr range) (evil-type range))
+ (setcdr (cdr range) nil)
+ range)))
(defmacro evil-define-type (type doc &rest body)
"Define type TYPE.
diff --git a/evil-types.el b/evil-types.el
index 47b064e..276cdbb 100644
--- a/evil-types.el
+++ b/evil-types.el
@@ -305,14 +305,11 @@ directly."
(evil-define-interactive-code "<r>"
"Untyped motion range (BEG END)."
- (let ((range (evil-operator-range)))
- (setcdr (cdr range) nil)
- range))
+ (evil-operator-range))
(evil-define-interactive-code "<R>"
"Typed motion range (BEG END TYPE)."
- (let ((range (evil-operator-range)))
- (list (car range) (cadr range) (evil-type range))))
+ (evil-operator-range t))
(evil-define-interactive-code "<v>"
"Typed motion range of visual range(BEG END TYPE).