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

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

[elpa] externals/objed 7e25c50 061/166: Add forward slurp/barf sexp comm


From: Clemens Radermacher
Subject: [elpa] externals/objed 7e25c50 061/166: Add forward slurp/barf sexp commands
Date: Sun, 29 Dec 2019 08:21:01 -0500 (EST)

branch: externals/objed
commit 7e25c5029695a03539525fc7daff4a6cca5e24f0
Author: Clemens Radermacher <address@hidden>
Commit: Clemens Radermacher <address@hidden>

    Add forward slurp/barf sexp commands
---
 objed-objects.el | 15 +++++++++++++++
 objed.el         | 34 +++++++++++++++++++++++++++++++++-
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/objed-objects.el b/objed-objects.el
index dfd5090..51e89c3 100644
--- a/objed-objects.el
+++ b/objed-objects.el
@@ -1007,6 +1007,21 @@ current object position data."
          (setq objed--current-obj range))))
 
 
+(defun objed--markify-current-object ()
+  "Convert current object into marker object."
+  (unless (markerp (objed--beg))
+    (objed--update-current-object
+     (objed-make-object
+      :ibeg (set-marker (make-marker)
+                        (objed--ibeg))
+      :beg (set-marker (make-marker)
+                       (objed--obeg))
+      :iend (set-marker (make-marker)
+                        (objed--iend))
+      :end (set-marker (make-marker)
+                       (objed--oend))))))
+
+
 (defun objed--switch-to (o &optional state odata)
   "Switch to object O.
 
diff --git a/objed.el b/objed.el
index 0d918dd..a620617 100644
--- a/objed.el
+++ b/objed.el
@@ -731,7 +731,6 @@ selected one."
     (define-key map (kbd "<end>") 'objed-bottom-object)
     (define-key map "<" 'objed-top-object)
     (define-key map ">" 'objed-bottom-object)
-
     ;; block expansions
     (define-key map "h" 'objed-expand-block)
     (define-key map "a" 'objed-beg-of-block)
@@ -822,7 +821,11 @@ selected one."
       (objed-define-op nil objed-duplicate-down))
     (define-key map (kbd "<C-M-return>")
       'objed-insert-new-object)
+    ;; sp functionality
     (define-key map "^" 'objed-raise)
+    (define-key map (kbd "<C-left>") 'objed-forward-barf-sexp)
+    (define-key map (kbd "<C-right>") 'objed-forward-slurp-sexp)
+
     (define-key map "!" 'objed-execute)
 
     map)
@@ -3492,6 +3495,35 @@ If nil ‘eval-region’ is used instead.")
                         :end (save-excursion (insert istring)
                                              (point))))))
 
+(defun objed-forward-slurp-sexp ()
+  "Slurp following sexp into current object."
+  (interactive)
+  (objed--markify-current-object)
+  (let ((iend (objed--iend))
+        (oend (objed--oend)))
+    (goto-char oend)
+    (let ((sexp (delete-and-extract-region
+                 (point)
+                 (scan-sexps (point) 1))))
+      (goto-char iend)
+      (insert sexp)
+      (set-marker iend (point))
+      (goto-char oend))))
+
+(defun objed-forward-barf-sexp ()
+  "Barf last sexp out of current object."
+  (interactive)
+  (objed--markify-current-object)
+  (let ((iend (objed--iend))
+        (oend (objed--oend)))
+    (goto-char iend)
+    (let ((sexp (delete-and-extract-region
+                 (point)
+                 (scan-sexps (point) -1))))
+      (goto-char oend)
+      (save-excursion
+        (insert sexp)))))
+
 
 (defun objed-execute ()
   "Execute object contents as shell commands."



reply via email to

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