]> git.eshelyaron.com Git - emacs.git/commitdiff
xref-find-references-and-replace: New command
authorDmitry Gutov <dgutov@yandex.ru>
Fri, 14 Jan 2022 02:38:39 +0000 (04:38 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 14 Jan 2022 02:38:39 +0000 (04:38 +0200)
* lisp/progmodes/xref.el (xref-find-references-and-replace):
New command.

etc/NEWS
lisp/progmodes/xref.el

index 8fd717cfc8782046354e71ca778dab260ea055b2..83217a6a94760156e3d84364cf1614d051405309 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -598,6 +598,8 @@ It is bound to 'C-M-,' and jumps to the location where 'xref-go-back'
 without prefix argument, to make the most common case faster:
 replacing all matches entirely.
 
+*** New command 'xref-find-references-and-replace'.
+
 ** File notifications
 
 +++
index 06faf16a31aa49293c4b8868106282d33d2dbe34..a1e976cb1cc494254e0d3d86d4d27372922fd8b3 100644 (file)
@@ -1478,6 +1478,22 @@ is nil, prompt only if there's no usable symbol at point."
   (interactive (list (xref--read-identifier "Find references of: ")))
   (xref--find-xrefs identifier 'references identifier nil))
 
+(defun xref-find-references-and-replace (from to)
+  "Replace all references to identifier FROM with TO."
+  (interactive
+   (let ((common
+          (query-replace-read-args "Query replace identifier" nil)))
+     (list (nth 0 common) (nth 1 common))))
+  (require 'xref)
+  (with-current-buffer
+      (let ((xref-show-xrefs-function
+             ;; Some future-proofing (bug#44905).
+             (custom--standard-value 'xref-show-xrefs-function))
+            ;; Disable auto-jumping, it will mess up replacement logic.
+            xref-auto-jump-to-first-xref)
+        (xref-find-references from))
+    (xref-query-replace-in-results ".*" to)))
+
 ;;;###autoload
 (defun xref-find-definitions-at-mouse (event)
   "Find the definition of identifier at or around mouse click.