[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/objed 5ef921f 08/16: Rewrite objed-replace to work with
From: |
Clemens Radermacher |
Subject: |
[elpa] externals/objed 5ef921f 08/16: Rewrite objed-replace to work with multiple objects |
Date: |
Fri, 15 Mar 2019 12:57:41 -0400 (EDT) |
branch: externals/objed
commit 5ef921f458b9c9339fbc292059463a47425e9d56
Author: Clemens Radermacher <address@hidden>
Commit: Clemens Radermacher <address@hidden>
Rewrite objed-replace to work with multiple objects
---
objed.el | 61 ++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 32 insertions(+), 29 deletions(-)
diff --git a/objed.el b/objed.el
index 0b1d61e..d3b43f8 100644
--- a/objed.el
+++ b/objed.el
@@ -610,6 +610,7 @@ BEFORE and AFTER are forms to execute before/after calling
the command."
(define-key map (kbd "?") 'objed-show-top-level)
;; TODO: support repeated invokation
(define-key map (kbd "C-u") 'universal-argument)
+ ;; for quick access
(define-key map "0" 'universal-argument)
(define-key map (kbd "C-SPC") 'set-mark-command)
@@ -755,8 +756,8 @@ BEFORE and AFTER are forms to execute before/after calling
the command."
(define-key map (kbd "M-o") 'objed-occur)
;; TODO: start query replace in current object,
;; or for all
- (define-key map "%"
- (objed-define-op nil objed-replace current))
+ (define-key map "%" 'objed-replace)
+ ;; (objed-define-op nil objed-replace current))
(define-key map "&"
(objed-define-op nil objed-pipe-region))
@@ -770,9 +771,6 @@ BEFORE and AFTER are forms to execute before/after calling
the command."
'objed-insert-new-object)
;; TODO:
;; (define-key map "^" 'objed-raise-inner)
- (define-key map "!"
- (objed-define-op nil objed-replace-op))
-
map)
"Keymap for commands when `objed' is active.")
@@ -2737,20 +2735,6 @@ Comments empty line, too. BEG, END and ARG are passed to
(delete-char -1))
(comment-or-uncomment-region beg end arg)))
-(defun objed-replace-op (beg end str)
- "Replace region with string read from minibuffer.
-
-Use the region between BEG and END. STR is the string to use for
-replacement."
- (interactive
- (let ((beg (region-beginning))
- (end (region-end)))
- (list beg end
- (read-string "Replace with: "
- nil nil (buffer-substring beg end)))))
- (delete-region beg end)
- (insert str))
-
(defun objed-case-op (beg end case)
"Change case of region.
@@ -2789,18 +2773,37 @@ c: capitalize."
(undo '(4)))
-(defun objed-replace (beg end)
+(defun objed-replace ()
"Query replace narrowed to region BEG, END."
- (interactive "r")
+ (interactive)
+ (let ((beg (objed--beg))
+ (end (objed--end)))
+ (if (memq objed--object '(word symbol identifier))
+ (objed--replace-ident beg end)
+ (save-excursion
+ (save-restriction
+ (narrow-to-region beg end)
+ (goto-char (point-min))
+ (hl-line-unhighlight)
+ (deactivate-mark)
+ (if (fboundp 'anzu-query-replace-regexp)
+ (call-interactively 'anzu-query-replace-regexp)
+ (call-interactively 'query-replace-regexp)))))))
+
+(defun objed--replace-ident (beg end)
+ (let ((str (objed--with-allow-input
+ (read-string "Replace with: "
+ nil nil (buffer-substring beg end)))))
+ (if objed--marked-ovs
+ (objed--do-objects (apply-partially #'objed--replace-action str)
+ this-command)
+ (objed--replace-action str beg end))))
+
+(defun objed--replace-action (str beg end)
(save-excursion
- (save-restriction
- (narrow-to-region beg end)
- (goto-char (point-min))
- (hl-line-unhighlight)
- (deactivate-mark)
- (if (fboundp 'anzu-query-replace-regexp)
- (call-interactively 'anzu-query-replace-regexp)
- (call-interactively 'query-replace-regexp)))))
+ (goto-char beg)
+ (delete-region beg end)
+ (insert str)))
;; * Ipipe
- [elpa] externals/objed f14c906 03/16: Add page object, (continued)
- [elpa] externals/objed f14c906 03/16: Add page object, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 854dc3a 05/16: Add more bindings to op map, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 0e66e81 09/16: Add linting target, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed e852343 15/16: Version bump, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed aa8f32d 16/16: Add lint as phony target, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 3d98612 04/16: Don't bind uppercase keys to undefined by default, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 8fd55ba 06/16: Change objed-narrow semantics, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed c19dae3 07/16: Don't reset objed when input in minibuffer allowed, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 04b079e 11/16: Mark some vars which don't follow emacs naming conventions obsolete, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 98f12d3 13/16: Add lint target to test, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed 5ef921f 08/16: Rewrite objed-replace to work with multiple objects,
Clemens Radermacher <=
- [elpa] externals/objed 65f520c 14/16: Remove opsolete var suffixes, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed ea0be40 10/16: More work on lint tests, Clemens Radermacher, 2019/03/15
- [elpa] externals/objed d998d4d 12/16: Checkdoc fixes, Clemens Radermacher, 2019/03/15