branch: externals/objed commit 7e25c5029695a03539525fc7daff4a6cca5e24f0 Author: Clemens Radermacher <clem...@posteo.net> Commit: Clemens Radermacher <clem...@posteo.net>
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."