1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-13 01:20:28 -08:00
Commit graph

289 commits

Author SHA1 Message Date
Mattias Engdegård
d8caa3d9fb Rename xref-pop-marker-stack to xref-go-back (bug#38797)
It is the natural name after the addition of `xref-go-forward`.
The old name is retained as an alias.

* lisp/progmodes/xref.el (xref-pop-marker-stack): Rename.
(xref-go-forward, xref-quit-and-pop-marker-stack)
(xref-find-definitions):
* lisp/menu-bar.el (menu-bar-goto-menu):
* lisp/progmodes/etags.el (find-tag-marker-ring, pop-tag-mark):
* lisp/progmodes/prog-mode.el (prog-context-menu):
* doc/emacs/maintaining.texi (Looking Up Identifiers):
* etc/NEWS:
Use the new name.
2021-10-25 20:45:18 +02:00
Mattias Engdegård
65b34f688c Add xref forward history (bug#38797)
Make it possible to go forward as well as back in the Xref history.
The new `xref-go-forward` is bound to `C-M-,`.

* lisp/progmodes/etags.el (find-tag-marker-ring-length): Update.
(tags-location-ring-length): New.
(find-tag-marker-ring): Keep as dummy.
(tags-location-ring, tags-reset-tags-tables):
Use `tags-location-ring-length` instead of `xref-marker-ring-length`.
* lisp/progmodes/xref.el (xref-marker-ring-length, xref-marker-ring)
(xref-set-marker-ring-length):
Make obsolete.
(xref--history, xref-go-forward, xref-forward-history-empty-p): New.
(xref-push-marker-stack, xref-pop-marker-stack)
(xref-clear-marker-stack, xref-marker-stack-empty-p):
Use `xref--history`.
* lisp/menu-bar.el (menu-bar-goto-menu): Add Forward entry.
* doc/emacs/maintaining.texi (Looking Up Identifiers): Document.
* etc/NEWS: Announce.
2021-10-25 17:34:37 +02:00
Dmitry Gutov
766108f48d xref.el: Better compatibility with outdated Emacs 28 builds
* lisp/progmodes/xref.el:
Ensure better compatibility with outdated Emacs 28 builds as well
(like the pgtk branch).  Bump the version.
2021-10-20 01:04:17 +03:00
Dmitry Gutov
41c262af32 * lisp/progmodes/xref.el: Bump version. 2021-10-19 17:42:25 +03:00
Dmitry Gutov
cd4bb98540 Fix Emacs 26 support in xref.el
* lisp/progmodes/xref.el (xref--defstruct): New macro.
(xref-item, xref-match-item): Use it in definitions.
2021-10-19 17:33:08 +03:00
Glenn Morris
cc202c713b Merge from origin/emacs-28
394209c1a0 (origin/emacs-28) ; Fix indentation in etc/NEWS
81f20e8b89 Fix thinko in ls-lisp--insert-directory
ec9f25bd35 Mention that RET means "yes" in y-or-n-p
00eb21c897 ; * src/dispextern.h (struct glyph_string): Comment on NCH...
20eb3644ba Rewrite Antinews for Emacs 28
3a9b881603 ; * etc/NEWS: Rearrange the "incompatible changes" sections.
ebb7e26013 ; * etc/NEWS: Fix a typo.
315fe20086 ; * src/Makefile.in (../native-lisp): Add comment.
47cbd103f5 * lisp/bindings.el (mode-line-position): Improve tooltip.
35a752863a * lisp/progmodes/xref.el: Bump the version.
bbcd8cc1a9 Slight simplificaiton
e139dd1b1e Fix doc strings of 2 categories
59782839cb (xref--collect-matches-1): Remove some intermediate alloca...
1c7d056f4d ; Fix two typos where em dash was written as en dash

# Conflicts:
#	etc/NEWS
2021-10-09 07:50:36 -07:00
Dmitry Gutov
35a752863a * lisp/progmodes/xref.el: Bump the version. 2021-10-09 04:38:11 +03:00
Dmitry Gutov
bbcd8cc1a9 Slight simplificaiton
* lisp/progmodes/xref.el (xref--insert-xrefs):
Compute log only once.  Use 'dolist'.
2021-10-09 04:33:02 +03:00
Dmitry Gutov
59782839cb (xref--collect-matches-1): Remove some intermediate allocations
* lisp/progmodes/xref.el: (xref--collect-matches-1):
Rewrite to remove some intermediate allocations.
Modest performance improvement.
2021-10-08 18:44:54 +03:00
Glenn Morris
2bc37c14db Merge from origin/emacs-28
af01b674ce (origin/emacs-28) ; Fix spacing in previous commit
915e044d60 Use the correct label in the warning
6e83a4100a ; * admin/make-tarball.txt: Should configure --with-native...
525602d682 ; * etc/TODO (display): Add entry about Default_Ignorables.
65de510c16 ; Fix 'restore-buffer-modified-p' doc string typo
9d8202b45e Add Emacs 27 compatibility hack
89d64fca75 Pacify GCC 10.3 -Wmaybe-uninitialized
bb8ef1aa30 * lisp/tab-bar.el (tab-detach, tab-window-detach): New ali...
7ae70054aa ; * src/composite.h (LGSTRING_FONT): Add comment about its...
1af00e67d6 Include the refcards in the release tarball
3c29fb705c ; * src/Makefile.in (../native-lisp): Make the long recipe...
2021-10-08 07:50:28 -07:00
Dmitry Gutov
9d8202b45e Add Emacs 27 compatibility hack
* lisp/progmodes/xref.el: Add Emacs 27 compatibility hack, for the
standalone version of this package.
2021-10-08 05:23:19 +03:00
Glenn Morris
1b11fcae92 Merge from origin/emacs-28
1ccd3eb721 (origin/emacs-28) ; Fix typo in etc/NEWS
0f28ee94ac * NEWS: Mention rcirc connects to #emacs by default
aacafbe267 Refactor mh-utils-tests macro 'with-mh-test-env'
ead5c5cc51 Avoid using variable before it has been initialized
b2c50d7cf3 Clarify docstring of blink-matching-paren
d2a34cabcf ; Very minor touch-up to a recent change
36a7ce4393 ; * doc/emacs/trouble.texi (After a Crash): Fix typo.
1cd1b2835b * doc/misc/gnus.texi (Loose Threads): Use regexp-opt in ex...
9f041cdfac Bump project.el version
ad2287e659 Retain compatibility with older project.el projects
d86b2e59c7 native-comp-available-p is the definitive test
1b383ac424 Minor fix of a recently installed documentation change
4d76765b6c Fix md5 issue in recent Gnulib merge
18308b739a Tweak recent 'configure' fix

# Conflicts:
#	etc/NEWS
2021-10-06 07:50:33 -07:00
Dmitry Gutov
ad2287e659 Retain compatibility with older project.el projects
* lisp/progmodes/xref.el (xref--analyze):
Retain compatibility with older project.el and its compatible
project definitions (for standalone Xref from ELPA).
2021-10-05 19:50:55 +03:00
Stefan Kangas
6640942221 Use format-prompt for many more prompts
* lisp/bookmark.el (bookmark-completing-read):
* lisp/calc/calc-prog.el (calc-user-define-formula):
* lisp/calc/calc-store.el (calc-permanent-variable):
* lisp/calc/calc-units.el (calc-convert-units)
(calc-convert-exact-units, calc-convert-temperature):
* lisp/cedet/semantic/complete.el
(semantic-complete-read-tag-engine):
* lisp/cus-edit.el (customize-read-group):
* lisp/dired-aux.el (dired-do-chxxx):
* lisp/dired-x.el (dired-mark-unmarked-files):
* lisp/emacs-lisp/debug.el (cancel-debug-on-entry)
(cancel-debug-on-variable-change):
* lisp/emacs-lisp/edebug.el (edebug-cancel-on-entry)
(edebug-remove-instrumentation):
* lisp/epa.el (epa-read-file-name, epa-export-keys):
* lisp/faces.el (read-face-name):
* lisp/format.el (format-decode-buffer, format-decode-region):
* lisp/gnus/gnus-art.el (gnus-read-save-file-name):
* lisp/gnus/gnus-util.el (gnus-completing-read):
* lisp/gnus/message.el (message-check-news-header-syntax):
* lisp/info.el (Info-follow-reference):
* lisp/international/mule-diag.el (describe-font)
(describe-fontset):
* lisp/international/quail.el (quail-show-keyboard-layout):
* lisp/language/cyril-util.el
(standard-display-cyrillic-translit):
* lisp/mail/rmailkwd.el (rmail-read-label):
* lisp/mail/rmailmm.el (rmail-mime-save):
* lisp/mail/rmailout.el (rmail-output-read-file-name):
* lisp/man.el (Man-goto-section, Man-follow-manual-reference):
* lisp/menu-bar.el (emacs-index--prompt):
* lisp/net/ange-ftp.el (ange-ftp-get-passwd):
* lisp/proced.el (proced-send-signal):
* lisp/progmodes/cpp.el (cpp-choose-face):
* lisp/progmodes/ebrowse.el (ebrowse-set-tree-indentation):
* lisp/progmodes/etags.el (visit-tags-table)
(visit-tags-table-buffer):
* lisp/progmodes/grep.el (grep-read-files):
* lisp/progmodes/hideif.el (hide-ifdef-define):
* lisp/progmodes/pascal.el (pascal-goto-defun):
* lisp/progmodes/prolog.el (prolog-read-predicate):
* lisp/progmodes/sql.el (sql-get-login-ext):
* lisp/ses.el (ses-define-local-printer):
* lisp/textmodes/artist.el (artist-figlet-choose-font):
* lisp/textmodes/tex-mode.el (tex-compile):
* lisp/vc/diff.el (diff):
* lisp/vc/ediff-ptch.el (ediff-prompt-for-patch-file):
* lisp/vc/ediff-util.el (ediff-read-file-name):
* lisp/vc/pcvs.el (cvs-mode-mark-on-state):
* lisp/vc/vc.el (vc-diff-build-argument-list-internal)
(vc-revision-other-window, vc-retrieve-tag):
* lisp/wid-edit.el: Prefer format-prompt unconditionally.

* lisp/org/org-capture.el (org-capture-fill-template):
* lisp/org/org-refile.el (org-refile-get-location):
* lisp/progmodes/python.el (python-eldoc-at-point):
* lisp/progmodes/verilog-mode.el (verilog-surelint-off)
(verilog-goto-defun):
* lisp/progmodes/xref.el (xref--read-identifier): Prefer format-prompt
when it is fboundp.
2021-10-05 03:44:56 +02:00
Dmitry Gutov
205eb7f801 ; s/class/type 2021-10-01 03:05:56 +03:00
Dmitry Gutov
86da812afb Migrate Xref off EIEIO
To improve performance and flexibility (bug#50777).

* lisp/progmodes/xref.el (xref-location): Remove.
(xref-file-location): Change to cl-struct.
(xref-buffer-location, xref-bogus-location): Ditto.
(xref-item, xref-match-item): Same.
And update all method definitions accordingly.
(xref--insert-xrefs): Don't use 'oref', use 'xref-item-location'.
(xref--insert-xrefs, xref-show-definitions-completing-read):
Insetad of 'with-slots', use 'xref-item-summary' and
'xref-item-location'.

* lisp/progmodes/etags.el (xref-etags-location):
Change from EIEIO class into a cl-struct.
(xref-etags-apropos-location): Ditto.
Update all method definitions.

* test/lisp/progmodes/elisp-mode-tests.el (xref-elisp-test-run):
Avoid using 'oref'.
2021-10-01 00:02:21 +03:00
Mattias Engdegård
32de11d8de ; Remove various duplicated words
* doc/lispref/searching.texi (Extending Rx):
* doc/lispref/strings.texi (Creating Strings):
* doc/misc/modus-themes.org (Measure color contrast (DIY)):
* etc/NEWS:
* lisp/find-file.el (ff-find-other-file):
* lisp/gnus/gnus-group.el (gnus-group-suspend):
* lisp/progmodes/cc-langs.el (c-ml-string-any-closer-re):
* lisp/progmodes/flymake.el (flymake-list-only-diagnostics):
* lisp/progmodes/xref.el (xref--group-name-for-display):
* lisp/transient.el (transient-child, transient-files)
(transient-infix-value):
* src/alloc.c:
* src/regex-emacs.c (regex_compile):

Remove duplicate words in comments, documentation etc.
2021-09-25 20:25:01 +02:00
Lars Ingebrigtsen
bcbae720d5 'xref-search-program'-related doc string fixes
* lisp/progmodes/xref.el (xref-search-program): Mention what this
variable controls.
(xref-matches-in-files): Mention the variables that controls it.
2021-09-25 11:54:13 +02:00
Dmitry Gutov
e646cb4e7a A bit less overhead when converting hits
* lisp/progmodes/xref.el (xref--collect-matches):
Move 'remote-id' and 'syntax-needed' definitions to the caller
function.  Bind 'inhibit-modification-hooks' to t (bug#50733).
2021-09-23 21:45:16 +03:00
Dmitry Gutov
90a7233199 More per-match overhead reduction
* lisp/progmodes/xref.el (xref--show-common-initialize)
(xref-revert-buffer): Inhibit modification hooks (bug#50733).
(xref--insert-xrefs): Cosmetics (no measurable difference here).
2021-09-23 20:37:11 +03:00
Dmitry Gutov
d0e9b88bf7 xref-matches-in-files: Decrease per match and per group overhead
* lisp/progmodes/xref.el (xref-search-program-alist):
Add '--null' argument for slightly faster parsing and probably
better behavior with weirder file names.
(xref--alistify): Don't accept TEST argument, use 'assoc' instead
of 'cl-assoc', use a tash table during sorting (bug#50733).
2021-09-23 20:37:10 +03:00
Stefan Kangas
aebba085cb ; More minor stylistic fixes found by checkdoc 2021-09-22 20:26:40 +02:00
Dmitry Gutov
9ca737c419 xref-matches-in-files: Move sorting to Lisp
For better compatibility with different systems.
Performance is unaffected, except in very pathological cases
(~100000 matches), and even then the overhead of 'sort' is comparable.

* lisp/progmodes/xref.el (xref-search-program-alist):
Drop the piping through 'sort'.
(xref-matches-in-files): Sort here instead.
Do that to both searchers' output as well now.
2021-09-17 15:39:36 +03:00
Stefan Kangas
63f419f133 ; Minor stylistic fixes found by checkdoc 2021-09-16 19:37:07 +02:00
Dmitry Gutov
d314951043 Extend xref-file-name-display to elisp and etags definitions
And all other types of locations (with a looks-like-file-name check).

* lisp/progmodes/xref.el (xref--group-name-for-display): Extract
from xref-buffer-location's implementation of xref-location-group.
(xref-file-location): Define trivial reader for the 'file' slot.
(xref-location-group): Update docstring.
(xref--analyze): Use the new function here, to be able to format
group names coming from any location type.
2021-09-13 01:37:32 +03:00
Eli Zaretskii
f94b915e2f Doc string followup to last change.
* lisp/progmodes/xref.el (xref-find-apropos): Mention
'tags-apropos-additional-actions' in the doc string.
* lisp/progmodes/etags.el (tags-apropos-additional-actions):
Mention 'xref-find-apropos' in the doc string.
2021-09-10 15:02:41 +03:00
Eli Zaretskii
11b56fa0b4 Fix a recent documentation change
* lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
(xref-auto-jump-to-first-xref):
* etc/NEWS: Fix wording and typos.
2021-09-07 18:44:26 +03:00
Eli Zaretskii
b02c9bcceb Improve documentation of new Xref options
* lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
(xref-auto-jump-to-first-xref): More accurate description in the
doc strings.

* doc/emacs/maintaining.texi (Looking Up Identifiers)
(Identifier Search, List Identifiers, Project File Commands): Fix
the documentation of 'xref-auto-jump-to-first-definition' and
'xref-auto-jump-to-first-xref' to be more accurate.

* etc/NEWS: More accurate wording of the entry about
'xref-auto-jump-to-first-definition' and
'xref-auto-jump-to-first-xref'.
2021-09-07 16:03:27 +03:00
Dmitry Gutov
ba6df55475 Fixup dired-do-find-regexp-and-replace
* lisp/dired-aux.el (dired-do-find-regexp-and-replace):
Disregard the customized value of xref-auto-jump-to-first-xref
(it breaks the xref-query-replace-in-results invocation).

* lisp/progmodes/xref.el (xref-auto-jump-to-first-xref):
Mention the caveat for users or xref distributed through ELPA.
2021-09-06 17:08:07 +03:00
Dmitry Gutov
71f8b55f46 project--files-in-directory: Fix handling of ignores
* lisp/progmodes/project.el (project--files-in-directory):
Pass "." as the DIR argument to 'find' because otherwise the ignore
expression can match the project root directory name, which we don't
want to happen (bug#50240).  Fixup the resulting file names at the end
with concatenation.
Originally I thought it could lead to worse performance, but the
results show equal or slightly better timings.

* lisp/progmodes/xref.el (xref-matches-in-directory):
Apply a similar fix.
(xref--find-ignores-arguments): Use file-name-as-directory, so
that when passed "." replace-match still had the expected effect.

* test/lisp/progmodes/project-tests.el (project-ignores-bug-50240):
New test.

* test/lisp/progmodes/xref-tests.el
(xref-matches-in-directory-filters-with-ignores): New test.
2021-09-06 05:01:07 +03:00
Dmitry Gutov
d864389c34 * lisp/progmodes/xref.el: Bump the version again. 2021-09-05 22:25:15 +03:00
Juri Linkov
0972cbe42f * lisp/progmodes/xref.el: Fix defcustoms (bug#50067)
* lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
(xref-auto-jump-to-first-xref, xref-search-program): Fix defcustoms.
2021-09-05 11:36:30 +03:00
Dmitry Gutov
94530e7ea9 Belated fix
* lisp/progmodes/xref.el: (xref--show-xref-buffer):
Fix support for xref-auto-jump-to-first-xref.
2021-09-05 03:52:29 +03:00
Dmitry Gutov
c298337505 * lisp/progmodes/xref.el: Bump version. 2021-09-05 03:36:30 +03:00
Dmitry Gutov
1be8bfae6b Xref: automatic jumping to the first definition or reference
* lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
(xref-auto-jump-to-first-xref): New user options.
Discussed in bug#50067.
(xref--show-xrefs, xref--show-defs): Use them here.
(xref--auto-jump-first): New function, handles different values.
(xref-show-definitions-buffer)
(xref-show-definitions-buffer-at-bottom): Use it.
2021-09-05 03:35:43 +03:00
Dmitry Gutov
88795df552 Rename xref-select-and-{goto,show}-xref
* lisp/progmodes/xref.el (xref-select-and-show-xref):
Rename from xref-select-and-goto-xref (bug#35376).
Update all references.
2021-09-05 01:45:46 +03:00
Lars Ingebrigtsen
03dcceeeee Rename xref--mouse-2 and adjust documentation
* doc/emacs/maintaining.texi (Xref Commands): `mouse-1' is bound
to `xref-goto-xref', not `mouse-2' (bug#35376).
(Xref Commands): Mention what `mouse-2' does.

* lisp/progmodes/xref.el (xref--button-map): Adjust.
(xref-select-and-goto-xref): Rename from xref--mouse-2 (bug#35376).
2021-08-31 04:50:18 +02:00
Mattias Engdegård
d6ad208b2c Use overlay arrow to indicate current *xref* selection
* lisp/progmodes/xref.el (xref--set-arrow): New function.
(xref-show-location-at-point, xref-goto-xref)
(xref--next-error-function): Call it.
(xref--show-common-initialize): Remove arrow.
2021-08-21 12:41:54 +02:00
Mattias Engdegård
6993d45e51 Add "Find References" to context menu (bug#50067)
The new entry appears next to "Find Definition" and like it only
appears when the context menu was invoked on an identifier.

* lisp/progmodes/prog-mode.el (prog-context-menu): New menu entry.
* lisp/progmodes/xref.el (xref-find-references-at-mouse): New
function, analogous to `xref-find-definitions-at-mouse`.
2021-08-21 12:41:54 +02:00
Mattias Engdegård
b4830907ed Indicate progress while searching for references in xref
* lisp/progmodes/xref.el (xref-backend-references): Add messages to
show the user that something is happening instead of silently freezing
during the frequently long synchronous searches for references.
2021-08-21 12:41:54 +02:00
Mattias Engdegård
4d6e770031 Re-type the :location slot in xref-match-item to xref-location
* lisp/progmodes/xref.el (xref-match-item): Change type for
:location from `xref-file-location`, which was likely a mistake,
to `xref-location`. This allows `xref-make-match` to take
arguments of any subtype of `xref-location` (bug#50067).
2021-08-21 12:41:54 +02:00
Eli Zaretskii
f658b955cc Improve doc string of 'M-.'
* lisp/progmodes/xref.el (xref-find-definitions): Mention 'M-,' in
the doc string.
2021-08-21 11:17:09 +03:00
Mattias Engdegård
e1ed0c3af1 Fix xref {prev,next}-error target buffer match highlighting extent
* lisp/progmodes/xref.el (xref--next-error-function):
Bind `xref--current-item` during the call to `xref--show-location` so
that `xref-pulse-momentarily` finds the match extent.
2021-08-20 12:34:34 +02:00
Juri Linkov
9b31ad3609 * lisp/progmodes/xref.el (xref--collect-matches): Widen temporarily. 2021-08-18 20:02:39 +03:00
Dmitry Gutov
f65958a94d Provide a default for xref-find-apropos pattern
* lisp/progmodes/xref.el (xref-find-apropos):
Provide a default for the pattern (bug#49731).
2021-08-06 03:02:13 +03:00
Dmitry Gutov
232be9bf87 Change the xref-goto-xref error message
* lisp/progmodes/xref.el (xref-goto-xref):
Change the error message (bug#49846).
2021-08-06 02:49:42 +03:00
Dmitry Gutov
69398a4da0 Fix printing of multiple items in one group without line numbers
* lisp/progmodes/xref.el (xref--insert-xrefs):
Fix printing of multiple items in one group without line numbers
(mentioned in bug#49731).
2021-07-29 04:57:36 +03:00
Dmitry Gutov
6ec3cf1ccb (xref--insert-xrefs): Fix printing of line numbers
* lisp/progmodes/xref.el (xref--insert-xrefs):
Fix printing of line numbers when we have multiple files with
(e.g.) single match on the same line.
2021-07-06 01:56:18 +03:00
Dmitry Gutov
45bdc37c81 Support old BSD find and "root dir symlink" better
* lisp/progmodes/grep.el (grep-compute-defaults):
Add '-H' to grep-find-template (bug#48471).

* lisp/cedet/semantic/symref/grep.el (semantic-symref-perform-search):
Pass the root directory name without the trailing slash.

* lisp/progmodes/xref.el (xref-matches-in-directory): Ditto.

* test/lisp/progmodes/xref-tests.el (xref--xref-file-name-display-is-abs)
(xref--xref-file-name-display-is-relative-to-project-root):
Make tests more strict again.
2021-06-07 04:52:30 +03:00
Daniel Mendler
443d9efc95 (completing-read): Add group-function to the completion metadata
A completion table can specify a `group-function` in its metadata.
The group function takes two arguments, a completion candidate and a
transform argument.  The group function is used to group the
candidates after sorting and to enhance the completion UI with group
titles.

If the transform argument is nil, the function must return the title
of the group to which the completion candidate belongs.  The function
may also return nil if the candidate does not belong to a group.

If the transform argument is non-nil, the function must return the
transformed candidate.  For example, the transformation allows to
remove a redundant part of the candidate, which is then displayed in
the title.

The grouping functionality is guarded by the customizable variable
`completions-group` and turned off by default for the *Completions*
buffer.

The specific form of the `group-function` has been chosen in order to
allow allocation-free grouping.  This is important for completion UIs,
which continously update the displayed set of candidates (Icomplete,
Vertico, Ivy, etc.).  Only when the transform argument is non-nil the
candidate transformation is performed, which may involve a string
allocation as done in the function `xref--completing-read-group`.

The function `xref-show-definitions-completing-read` makes use of the
`group-function`, by moving the file name prefix to the title.  If
grouping is enabled, the *Completions* are displayed as
"linenum:summary" instead of "file:linenum:summary".  This way the
*Completions* buffer resembles the *Occur* buffer.

* doc/lispref/minibuf.texi: Add documentation.

* lisp/minibuffer.el (completion-metadata): Describe the
`group-function` in the docstring.
(completions-group): Add guard variable, off by default.
(completions-group-format): Add variable defining the format string
for the group titles.
(completions-group-title): Add face used by `completions-group-format`
for the group titles.
(completions-group-separator): Add face used by
`completions-group-format` for the group separator lines.
(minibuffer--group-by): New grouping function.
(minibuffer-completion-help): Use it.
(display-completion-list): Add optional GROUP-FUN argument.
(completion--insert-strings): Add optional GROUP-FUN argument.  Insert
group titles if `completions-format` is `one-column`.  Transform each
candidate with the GROUP-FUN.  Attach the untransformed candidate to
the property `completion--string`.

* lisp/simple.el (choose-completion): Retrieve the untransformed
completion candidate from the property `completion--string`.

* lisp/progmodes/xref.el:
(xref--completing-read-group): New grouping function.
(xref-show-definitions-completing-read): Use it.
2021-05-20 20:50:23 +03:00