emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/objed 4de1520 008/166: Improve paren insertion and wrap


From: Clemens Radermacher
Subject: [elpa] externals/objed 4de1520 008/166: Improve paren insertion and wrapping in lisp modes
Date: Sun, 29 Dec 2019 08:20:51 -0500 (EST)

branch: externals/objed
commit 4de1520a104f3fb247c3534508c0437ea4186736
Author: Clemens Radermacher <address@hidden>
Commit: Clemens Radermacher <address@hidden>

    Improve paren insertion and wrapping in lisp modes
---
 objed.el | 50 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/objed.el b/objed.el
index 95cb723..6f8c404 100644
--- a/objed.el
+++ b/objed.el
@@ -1741,21 +1741,32 @@ Shrinks to inner objects on repeat if possible."
                      (t
                       (objed--end))))))
 
-(defun objed-backward-until-context ()
-  "Goto object inner beginning and activate part moved over."
-  (interactive)
-  (when (save-excursion (objed-context-object)
-                        (objed--toggle-state))
-    (objed--change-to :iend (point) :end (point))
-    (goto-char (objed--beg))))
+(defun objed-backward-until-context (arg)
+  "Goto object inner beginning and activate part moved over.
 
-(defun objed-forward-until-context ()
-  "Goto object inner end and activate part moved over."
-  (interactive)
-  (when (save-excursion (objed-context-object)
-                        (objed--toggle-state))
-    (objed--change-to :ibeg (point) :beg (point))
-    (goto-char (objed--end))))
+At bracket or string self insert ARG times."
+  (interactive "p")
+  (if (or (objed--at-object-p 'bracket)
+          (objed--at-object-p 'string))
+      (self-insert-command arg)
+    (when (save-excursion
+            (objed-context-object)
+            (objed--toggle-state))
+      (objed--change-to :iend (point) :end (point))
+      (goto-char (objed--beg)))))
+
+(defun objed-forward-until-context (arg)
+  "Goto object inner end and activate part moved over.
+
+At bracket or string self insert ARG times."
+  (interactive "p")
+  (if (or (objed--at-object-p 'bracket)
+          (objed--at-object-p 'string))
+      (self-insert-command arg)
+    (when (save-excursion (objed-context-object)
+                          (objed--toggle-state))
+      (objed--change-to :ibeg (point) :beg (point))
+      (goto-char (objed--end)))))
 
 (defun objed-current-or-previous-context (&optional arg)
   "Move to end of object at point and activate it.
@@ -2578,7 +2589,8 @@ else query for key event and use `electric'."
         (goto-char beg)
         (insert left))
   (let ((event (or objed--electric-event
-                   (setq objed--electric-event (read-event "Wrap with: ")))))
+                   (setq objed--electric-event
+                         (read-event "Wrap with: ")))))
     (objed-electric-event beg end event))))
 
 
@@ -2607,6 +2619,14 @@ to sourround region string representation of event."
        (goto-char rbeg)
        (objed--skip-ws)
        (insert last-command-event)
+       ;; add space after wrapping with paren in lispy modes
+       (when (and (or (derived-mode-p 'lisp-mode)
+                      (derived-mode-p 'emacs-lisp-mode))
+                  (eq (car (electric-pair-syntax-info last-command-event))
+                      ?\())
+         (save-excursion
+           (insert " ")
+           (objed--reset)))
        (setq epos (point))
        (electric-pair-post-self-insert-function))
       ;; leave point like electric would for region



reply via email to

[Prev in Thread] Current Thread [Next in Thread]