diff options
Diffstat (limited to 'lisp/progmodes/xref.el')
-rw-r--r-- | lisp/progmodes/xref.el | 23 |
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 |