summaryrefslogtreecommitdiff
path: root/lisp/progmodes/xref.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/progmodes/xref.el')
-rw-r--r--lisp/progmodes/xref.el23
1 files changed, 23 insertions, 0 deletions
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 55405b63fe0..fe72b3f778c 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -628,6 +628,29 @@ The argument has the same meaning as in `apropos'."
;;;###autoload (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
+;;; 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))))
+
+
(provide 'xref)
;;; xref.el ends here