]> git.eshelyaron.com Git - emacs.git/commitdiff
Introduce `xref-etags-mode'
authorDmitry Gutov <dgutov@yandex.ru>
Mon, 23 Feb 2015 02:00:01 +0000 (04:00 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Mon, 23 Feb 2015 02:00:01 +0000 (04:00 +0200)
Fixes: debbugs:19466
* lisp/progmodes/xref.el (xref-etags-mode--saved): New variable.
(xref-etags-mode): New minor mode.

lisp/ChangeLog
lisp/progmodes/xref.el

index b4c6d0be8efaa087f3e0960f50bcb1f4f3870648..ced342baeb9813d4ce29fcf7e84a7f55a1e7f112 100644 (file)
@@ -1,3 +1,9 @@
+2015-02-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Introduce `xref-etags-mode'.
+       * progmodes/xref.el (xref-etags-mode--saved): New variable.
+       (xref-etags-mode): New minor mode.  (Bug#19466)
+
 2015-02-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * dom.el (dom-previous-sibling): New function.
index 55405b63fe0fbd18db2e35f640d735433cdb6e9b..fe72b3f778c87723b0c48dace512cdd088d5bc65 100644 (file)
@@ -627,6 +627,29 @@ The argument has the same meaning as in `apropos'."
 ;;;###autoload (define-key ctl-x-4-map "." #'xref-find-definitions-other-window)
 ;;;###autoload (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
 
+\f
+;;; Helper functions
+
+(defvar xref-etags-mode--saved nil)
+
+(define-minor-mode xref-etags-mode
+  "Minor mode to make xref use etags again.
+
+Certain major modes install their own mechanisms for listing
+identifiers and navigation.  Turn this on to undo those settings
+and just use etags."
+  :lighter ""
+  (if xref-etags-mode
+      (progn
+        (setq xref-etags-mode--saved
+              (cons xref-find-function
+                    xref-identifier-completion-table-function))
+        (kill-local-variable 'xref-find-function)
+        (kill-local-variable 'xref-identifier-completion-table-function))
+    (setq-local xref-find-function (car xref-etags-mode--saved))
+    (setq-local xref-identifier-completion-table-function
+                (cdr xref-etags-mode--saved))))
+
 \f
 (provide 'xref)