diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index fe64895725..897f105019 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -60,7 +60,8 @@ tags-case-fold-search :type '(choice (const :tag "Case-sensitive" nil) (const :tag "Case-insensitive" t) (other :tag "Use default" default)) - :version "21.1") + :version "21.1" + :safe 'symbolp) ;;;###autoload ;; Use `visit-tags-table-buffer' to cycle through tags tables in this list. @@ -819,9 +820,7 @@ tags-completion-at-point-function "Using tags, return a completion table for the text around point. If no tags table is loaded, do nothing and return nil." (when (or tags-table-list tags-file-name) - (let ((completion-ignore-case (if (memq tags-case-fold-search '(t nil)) - tags-case-fold-search - case-fold-search)) + (let ((completion-ignore-case (find-tag--completion-ignore-case)) (pattern (find-tag--default)) beg) (when pattern @@ -836,9 +835,7 @@ tags-completion-at-point-function (defun find-tag-tag (string) "Read a tag name, with defaulting and completion." - (let* ((completion-ignore-case (if (memq tags-case-fold-search '(t nil)) - tags-case-fold-search - case-fold-search)) + (let* ((completion-ignore-case (find-tag--completion-ignore-case)) (default (find-tag--default)) (spec (completing-read (if default (format "%s (default %s): " @@ -851,6 +848,11 @@ find-tag-tag (or default (user-error "There is no default tag")) spec))) +(defun find-tag--completion-ignore-case () + (if (memq tags-case-fold-search '(t nil)) + tags-case-fold-search + case-fold-search)) + (defun find-tag--default () (funcall (or find-tag-default-function (get major-mode 'find-tag-default-function) @@ -2072,6 +2074,9 @@ xref-backend-identifier-at-point (cl-defmethod xref-backend-identifier-completion-table ((_backend (eql etags))) (tags-lazy-completion-table)) +(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend (eql etags))) + (find-tag--completion-ignore-case)) + (cl-defmethod xref-backend-definitions ((_backend (eql etags)) symbol) (etags--xref-find-definitions symbol)) @@ -2086,9 +2091,7 @@ etags--xref-find-definitions (first-time t) (search-fun (if regexp? #'re-search-forward #'search-forward)) (marks (make-hash-table :test 'equal)) - (case-fold-search (if (memq tags-case-fold-search '(nil t)) - tags-case-fold-search - case-fold-search)) + (case-fold-search (find-tag--completion-ignore-case)) (cbuf (current-buffer))) (save-excursion (while (visit-tags-table-buffer (not first-time) cbuf) diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 4fbcd08506..1a34456340 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -287,6 +287,10 @@ xref-backend-identifier-at-point (cl-defgeneric xref-backend-identifier-completion-table (backend) "Return the completion table for identifiers.") +(cl-defgeneric xref-backend-identifier-completion-ignore-case (_backend) + "Return t if case is not significant in identifier completion." + completion-ignore-case) + ;;; misc utilities (defun xref--alistify (list key test) @@ -967,7 +971,9 @@ xref--prompt-p (defun xref--read-identifier (prompt) "Return the identifier at point or read it from the minibuffer." (let* ((backend (xref-find-backend)) - (def (xref-backend-identifier-at-point backend))) + (def (xref-backend-identifier-at-point backend)) + (completion-ignore-case + (xref-backend-identifier-completion-ignore-case backend))) (cond ((or current-prefix-arg (not def) (xref--prompt-p this-command))