[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/objed de241e3 048/216: Start to support mc
From: |
Stefan Monnier |
Subject: |
[elpa] externals/objed de241e3 048/216: Start to support mc |
Date: |
Tue, 8 Jan 2019 12:29:09 -0500 (EST) |
branch: externals/objed
commit de241e3e0248efd0bb27a4665b289d4d606816f0
Author: Clemera <address@hidden>
Commit: Clemera <address@hidden>
Start to support mc
---
objed-objects.el | 170 ++++++++++++++++++++++++++++++-------------------------
objed.el | 18 +++++-
2 files changed, 109 insertions(+), 79 deletions(-)
diff --git a/objed-objects.el b/objed-objects.el
index f1ec9a5..5e7cfe4 100644
--- a/objed-objects.el
+++ b/objed-objects.el
@@ -259,13 +259,6 @@ Either the symbol `whole' or `inner'.")
(defvar objed--marked-ovs nil
"List of overlays of marked objects.")
-(defun objed--copy-object (&optional obj)
- "Make a deep copy of object OBJ.
-
-OBJ defaults to `objed--current-obj'."
- (let ((obj (or obj objed--current-obj)))
- (list (copy-sequence (car obj))
- (copy-sequence (cadr obj)))))
;; * Get object positions
@@ -524,6 +517,14 @@ order depends on `objed--obj-state'."
nobj)))))
+(defun objed--copy-object (&optional obj)
+ "Make a deep copy of object OBJ.
+
+OBJ defaults to `objed--current-obj'."
+ (let ((obj (or obj objed--current-obj)))
+ (list (copy-sequence (car obj))
+ (copy-sequence (cadr obj)))))
+
(defun objed--get-object (o &optional s)
"Get object O with state S."
(let ((objed--object o)
@@ -656,35 +657,6 @@ calculate the data of the object at current position using
(setq objed--current-obj (or odata (objed--get))))
-(cl-defun objed--change-to (&key beg end ibeg iend)
- "Change position data of current object.
-
-BEG: the beginning position
-END: the end position
-IBEG: the beginning position of the inner part
-IEND: the end position of the inner part"
- (cond ((eq objed--obj-state 'whole)
- (when beg
- (setf (car (car objed--current-obj)) beg))
- (when end
- (setf (car (cdar objed--current-obj)) end))
- (when ibeg
- (setf (car (cadr objed--current-obj)) ibeg))
- (when iend
- (setf (cadr (cadr objed--current-obj)) iend)))
- ((eq objed--obj-state 'inner)
- (when ibeg
- (setf (car (car objed--current-obj)) ibeg))
- (when iend
- (setf (car (cdar objed--current-obj)) iend))
- (when beg
- (setf (car (cadr objed--current-obj)) beg))
- (when end
- (setf (cadr (cadr objed--current-obj)) end)))
- (t
- (error "No valid `objed--obj-state'"))))
-
-
(defun objed--distant-p (o)
"Determine if point is outside object O."
(and o
@@ -935,10 +907,11 @@ skipped to determine the inner positions."
(list (objed--skip-forward beg 'ws)
(objed--skip-backward end 'ws)))))
(if (<= beg (car inner) (cadr inner) end)
- inner
+ (list (objed--pos-or-marker (car inner))
+ (objed--pos-or-marker (cadr inner)))
;; fallback
- (list (point) (1+ (point))))))
-
+ (list (objed--pos-or-marker (point))
+ (objed--pos-or-marker (1+ (point)))))))
(cl-defun objed-make-object (&key obounds beg end ibounds ibeg iend)
"Helper to create internal used object format from positions.
@@ -955,59 +928,104 @@ a cons cell IBOUNDS. If inner positions are omitted
(integer-or-marker-p end)
(integer-or-marker-p ibeg)
(integer-or-marker-p iend))
- (list (list beg end)
- (list ibeg iend)))
+ (list (list (objed--pos-or-marker beg)
+ (objed--pos-or-marker end))
+ (list (objed--pos-or-marker ibeg)
+ (objed--pos-or-marker iend))))
((and (integer-or-marker-p beg)
(integer-or-marker-p end))
(cond ((consp ibounds)
- (objed-make-object :beg beg
- :end end
- :ibeg (car ibounds)
- :iend (cdr ibounds)))
+ (list (list (objed--pos-or-marker beg)
+ (objed--pos-or-marker end))
+ (list (objed--pos-or-marker (car ibounds))
+ (objed--pos-or-marker (cdr ibounds)))))
((or (functionp ibeg)
(functionp iend))
- (objed-make-object :beg beg
- :end end
- :ibeg (or (and (functionp ibeg)
- (funcall ibeg beg))
- ibeg)
- :iend (or (and (functionp iend)
- (funcall iend end))
- iend)))
-
+ (list (list (objed--pos-or-marker beg)
+ (objed--pos-or-marker end))
+ (list (objed--pos-or-marker
+ (or (and (functionp ibeg)
+ (funcall ibeg beg))
+ ibeg))
+ (objed--pos-or-marker
+ (or (and (functionp iend)
+ (funcall iend end))
+ iend)))))
(t
- (list (list beg end)
+ (list (list (objed--pos-or-marker beg)
+ (objed--pos-or-marker end))
(objed--inner-default beg end)))))
((consp obounds)
(cond ((consp ibounds)
- (objed-make-object :beg (car obounds)
- :end (cdr obounds)
- :ibeg (car ibounds)
- :iend (cdr ibounds)))
+ (list (list (objed--pos-or-marker (car obounds))
+ (objed--pos-or-marker (cdr obounds)))
+ (list (objed--pos-or-marker (car ibounds))
+ (objed--pos-or-marker (cdr ibounds)))))
((and (integer-or-marker-p ibeg)
(integer-or-marker-p iend))
- (objed-make-object :beg (car obounds)
- :end (cdr obounds)
- :ibeg ibeg
- :iend iend))
+ (list (list (objed--pos-or-marker (car obounds))
+ (objed--pos-or-marker (cdr obounds)))
+ (list (objed--pos-or-marker ibeg)
+ (objed--pos-or-marker iend))))
((or (functionp ibeg)
(functionp iend))
- (objed-make-object :beg (car obounds)
- :end (cdr obounds)
- :ibeg (or (and (functionp ibeg)
- (funcall ibeg beg))
- ibeg)
- :iend (or (and (functionp iend)
- (funcall iend end))
- iend)))
-
+ (list (list (objed--pos-or-marker (car obounds))
+ (objed--pos-or-marker (cdr obounds)))
+ (list (objed--pos-or-marker
+ (or (and (functionp ibeg)
+ (funcall ibeg beg))
+ ibeg))
+ (objed--pos-or-marker
+ (or (and (functionp iend)
+ (funcall iend end))
+ iend)))))
(t
- (list (list (car obounds)
- (cdr obounds))
- (objed--inner-default (car obounds)
- (cdr obounds))))))))
+ (list (list (objed--pos-or-marker (car obounds))
+ (objed--pos-or-marker (cdr obounds)))
+ (objed--inner-default (car obounds) (cdr obounds))))))))
+
+
+(cl-defun objed--change-to (&key beg end ibeg iend)
+ "Change position data of current object.
+
+BEG: the beginning position
+END: the end position
+IBEG: the beginning position of the inner part
+IEND: the end position of the inner part"
+ (let ((beg (and beg (objed--pos-or-marker beg)))
+ (end (and end (objed--pos-or-marker end)))
+ (ibeg (and ibeg (objed--pos-or-marker ibeg)))
+ (iend (and iend (objed--pos-or-marker iend))))
+ (cond ((eq objed--obj-state 'whole)
+ (when beg
+ (setf (car (car objed--current-obj)) beg))
+ (when end
+ (setf (car (cdar objed--current-obj)) end))
+ (when ibeg
+ (setf (car (cadr objed--current-obj)) ibeg))
+ (when iend
+ (setf (cadr (cadr objed--current-obj)) iend)))
+ ((eq objed--obj-state 'inner)
+ (when ibeg
+ (setf (car (car objed--current-obj)) ibeg))
+ (when iend
+ (setf (car (cdar objed--current-obj)) iend))
+ (when beg
+ (setf (car (cadr objed--current-obj)) beg))
+ (when end
+ (setf (cadr (cadr objed--current-obj)) end)))
+ (t
+ (error "No valid `objed--obj-state'")))))
+(defun objed--pos-or-marker (pos)
+ "Return marker or position POS.
+If `multiple-cursors-mode' is non-nil return marker for
+position POS, otherwise just return POS."
+ (if (and (bound-and-true-p multiple-cursors-mode)
+ (not (markerp pos)))
+ (set-marker (make-marker) pos)
+ pos))
;; * Object definition helpers
diff --git a/objed.el b/objed.el
index 8ba1de9..95de977 100644
--- a/objed.el
+++ b/objed.el
@@ -493,6 +493,18 @@ To avoid loading `avy' set this var before activating
`objed-mode.'"
(declare-function avy--style-fn "ext:avy")
(declare-function edit-indirect-region "ext:edit-indirect")
+
+;; * Support for other libs
+
+(with-eval-after-load 'multiple-cursors-core
+ (cl-pushnew 'objed--current-obj mc/cursor-specific-vars)
+ (cl-pushnew 'objed--obj-state mc/cursor-specific-vars)
+ (cl-pushnew 'objed--object mc/cursor-specific-vars)
+ (cl-pushnew 'objed--look-around mc/cursor-specific-vars)
+ (cl-pushnew 'objed--marked-ovs mc/cursor-specific-vars)
+ (cl-pushnew 'objed--last-states mc/cursor-specific-vars))
+
+
;; * Helper Macros
(defvar objed--exit-alist nil
@@ -2554,8 +2566,7 @@ Marked object sequences are merged to built a single text
object."
;; for possible repeats like default conf. (kill line...)
(unless (eq op 'ignore)
(objed--change-to :beg (point)
- :ibeg (point)))
- )))
+ :ibeg (point))))))
(defun objed--ov-sequence-p (ovs)
"Return non-nil if OVS build a sequence.
@@ -2604,7 +2615,8 @@ on."
;; (objed--update-current-object)
(cond (exitf
(funcall (cdr exitf) text))
- ((eq op 'ignore))
+ ((or (eq op 'ignore)
+ (bound-and-true-p multiple-cursors-mode)))
(t
(if (and text (objed--line-p text))
(objed--switch-to 'line)
- [elpa] externals/objed d5dd1d0 045/216: Fix function name, (continued)
- [elpa] externals/objed d5dd1d0 045/216: Fix function name, Stefan Monnier, 2019/01/08
- [elpa] externals/objed f33147d 043/216: Add syntax object adjusted from laishulu/evil-textobj-syntax, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 8c3ba86 040/216: Add note about changing bindings, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 95503ca 046/216: Fix syntax object, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 7ad08e2 052/216: Set C-h to work as usual, Stefan Monnier, 2019/01/08
- [elpa] externals/objed dc8c569 033/216: Improve surround op, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 1f09072 064/216: Improve file object, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 96c6b8f 065/216: Add DEL key for in buffer replacement, fixes #6, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 41be963 054/216: Adjust textblock and block object order, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 843d843 059/216: Remove textblock from context objects, Stefan Monnier, 2019/01/08
- [elpa] externals/objed de241e3 048/216: Start to support mc,
Stefan Monnier <=
- [elpa] externals/objed ebad1ac 061/216: Fix face object, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 042c3bb 051/216: Change some bindings, Stefan Monnier, 2019/01/08
- [elpa] externals/objed f605604 057/216: Rename syntax object to face object, Stefan Monnier, 2019/01/08
- [elpa] externals/objed e94dc45 049/216: Remove :get-inner, Stefan Monnier, 2019/01/08
- [elpa] externals/objed ad88f19 074/216: Fix markup!!!, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 37449f5 063/216: Update link, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 975a8f3 082/216: Rewording, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 4badbe8 047/216: Simplify object macro usage (allow to use bounds of thing etc.), Stefan Monnier, 2019/01/08
- [elpa] externals/objed fc0da6e 079/216: Don't produce messages for tests, Stefan Monnier, 2019/01/08
- [elpa] externals/objed 809c834 072/216: Fix markup, Stefan Monnier, 2019/01/08