Commit graph

128 commits

Author SHA1 Message Date
Paul Eggert
5c7dd8a783 Update copyright year to 2018
Run admin/update-copyright.
2018-01-01 00:57:59 -08:00
João Távora
e950f329c0 New xref-quit-and-goto-xref command bound to TAB (bug#28814)
This is like xref-goto-xref, but quits the *xref* window just before
the user jump to ref.

* lisp/progmodes/xref.el (xref--show-location): Handle 'quit
value for SELECT.
(xref-goto-xref): Take optional QUIT arg.
(xref-quit-and-goto-xref): New command.
(xref--xref-buffer-mode-map): Bind "Q" and "TAB" to
xref-quit-and-goto-xref.

* doc/emacs/maintaining.texi (Xref Commands): Describe new bindings in
*xref*.

* etc/NEWS (Xref): Describe new binding.
2017-11-03 16:13:39 +00:00
João Távora
2a973edeac Honor window-switching intents in xref-find-definitions (bug#28814)
When there is more than one xref to jump to, and an *xref* window
appears to help the user choose, the original intent to open a
definition in another window or frame is remembered when the choice to
go to or show a reference is finally made.

* lisp/progmodes/xref.el (xref--show-pos-in-buf): Rewrite.
(xref--original-window-intent): New variable.
(xref--original-window): Rename from xref--window and move up
here for clarity.
(xref--show-pos-in-buf): Rewrite.  Don't take SELECT arg here.
(xref--show-location): Handle window selection decision here.
(xref--window): Rename to xref--original-window.
(xref-show-location-at-point): Don't attempt window management here.
(xref--show-xrefs): Ensure display-action intent is saved.
2017-11-03 16:13:35 +00:00
Charles A. Roelli
460fe4a1bc ; Doc fixes
* lisp/progmodes/xref.el (xref-file-location)
(xref-backend-apropos):
* etc/NEWS (Lisp Changes in Emacs 26.1):
* doc/emacs/msdos.texi (Windows Keyboard):
* lisp/vc/vc.el (vc-print-branch-log):
* src/buffer.c (word-wrap): Doc additions and fixes.
2017-10-31 22:01:34 +01:00
Dmitry Gutov
5a41dd0a1f Reset default-directory inside *xref-grep* buffer
* lisp/progmodes/xref.el (xref-collect-matches):
Reset default-directory, too. (Bug#28575)
2017-09-26 01:47:23 +03:00
Paul Eggert
bc511a64f6 Prefer HTTPS to FTP and HTTP in documentation
Most of this change is to boilerplate commentary such as license URLs.
This change was prompted by ftp://ftp.gnu.org's going-away party,
planned for November.  Change these FTP URLs to https://ftp.gnu.org
instead.  Make similar changes for URLs to other organizations moving
away from FTP.  Also, change HTTP to HTTPS for URLs to gnu.org and
fsf.org when this works, as this will further help defend against
man-in-the-middle attacks (for this part I omitted the MS-DOS and
MS-Windows sources and the test tarballs to keep the workload down).
HTTPS is not fully working to lists.gnu.org so I left those URLs alone
for now.
2017-09-13 15:54:37 -07:00
Noam Postavsky
c2f1830d69 Merge null and without-null regexp alists (Bug#27840, Bug#27873)
* lisp/progmodes/grep.el (grep-mode-font-lock-keywords): Allow for NUL
characters following filename in grep context lines.
(grep--regexp-alist-column, grep--regexp-alist-bin-matcher)
(grep-with-null-regexp-alist, grep-fallback-regexp-alist): Remove.
(grep-regexp-alist): Recombine their contents here.
(grep-mode):
* lisp/cedet/semantic/symref/grep.el
(semantic-symref-parse-tool-output-one-line):
* lisp/progmodes/xref.el (xref-collect-matches): Use the variable
`grep-regexp-alist' rather than the function.
2017-08-06 20:25:11 -04:00
Noam Postavsky
644cdd1aa0 Use grep's --null option (Bug#6843)
* lisp/progmodes/grep.el (grep-use-null-filename-separator): New option.
(grep--regexp-alist-column, grep--regexp-alist-bin-matcher)
(grep-with-null-regexp-alist, grep-fallback-regexp-alist): New
constants, replacing `grep-regexp-alist'.
(grep-regex-alist): Mark the variable obsolete, add a new function of
the same name to replace it.
(grep-compute-defaults): Compute default for
`grep-use-null-filename-separator'.
(grep-mode): Set compilation-error-regexp-alist (buffer locally) to the
value of `grep-with-null-regexp-alist' or `grep-fallback-regexp-alist'
according to `grep-use-null-filename-separator'.
* lisp/progmodes/xref.el (xref-collect-matches): Call
`grep-regex-alist' instead of the obsolete variable.  Don't hardcode
grep-regexp-alist match groups.
* etc/NEWS: Announce new use of --null.  Move 'grep-save-buffers'
item under "Grep" heading as well.
2017-07-19 20:03:00 -04:00
Dmitry Gutov
4886b2ed52 Use regexp matching instead of checking exit status
* lisp/progmodes/xref.el (xref-collect-matches):
See if the output buffer contents look like Grep output
instead of checking exit status (bug#23451).
2017-05-30 00:59:03 +03:00
Dmitry Gutov
3bc3dc4063 Signal error if find-grep returns a nonzero status
* lisp/progmodes/xref.el (xref-collect-matches): Signal error
if find-grep returns a nonzero status (bug#23451).  Remove the
comment: even if some output is present, a non-zero status
means something went wrong and it can't be relied upon.
2017-05-29 02:55:58 +03:00
Dmitry Gutov
f5ca518b92 ; xref-collect-matches: Add a TODO 2017-05-04 18:27:15 +03:00
Dmitry Gutov
09f566eeda ; Fix the comment back 2017-05-02 01:51:36 +03:00
Dmitry Gutov
c99a3b90a0 Speed up project-find-regexp for simple regexps
* lisp/progmodes/xref.el (xref--regexp-syntax-dependent-p):
New function.
(xref--collect-matches): Use it.  Don't try to enable the
appropriate major mode and file-local variables if the regexp
does not depend on the buffer's syntax (bug#26710).
(xref--collect-matches-1): Don't syntax-propertize in that
case either.
2017-05-02 00:09:30 +03:00
Glenn Morris
992e2019d3 Remove some explicit runtime loads of pcase
Pcase is macros, so these should have used eval-when-compile.
Anyway, pcase entry points are autoloaded, so the compiler handles it.
* lisp/profiler.el, lisp/emacs-lisp/eieio-core.el:
* lisp/emacs-lisp/generator.el, lisp/emacs-lisp/subr-x.el:
* lisp/progmodes/xref.el: No need to require pcase.
2017-04-19 16:32:04 -04:00
Paul Eggert
e6750596ef ; Spelling and minor wording fixes 2017-04-14 12:42:31 -07:00
Dmitry Gutov
0fb52dcc45 ; Add a FIXME about handing a missing find or grep program 2017-04-10 06:22:55 +03:00
Dmitry Gutov
604724e49d (xref-collect-matches): Use '-E' together with '-e'
* lisp/progmodes/xref.el (xref-collect-matches): Use '-E'
together with '-e', as suggested by Noam Postavsky
(http://lists.gnu.org/archive/html/emacs-devel/2017-01/msg00780.html).
2017-02-03 03:12:05 +02:00
Dmitry Gutov
8ba236e772 Escape dash in xref rgrep regexp
* lisp/progmodes/xref.el (xref-collect-matches): Escape dash
in REGEXP if it's the first character.
2017-01-29 23:01:42 +02:00
Paul Eggert
5badc81c1c Update copyright year to 2017
Run admin/update-copyright.
2016-12-31 19:42:26 -08:00
Dmitry Gutov
cd27f7396b Say 'All results processed' at the end
* lisp/progmodes/xref.el (xref--query-replace-1):
Say 'All results processed' at the end if the user hadn't
cancelled the process (bug#23284).
2016-05-08 00:29:44 +03:00
Dmitry Gutov
3347a733e0 `nreverse' the marker pairs list
* lisp/progmodes/xref.el (xref--buf-pairs-iterator): `nreverse'
the marker pairs list for each buffer before returning.
2016-05-05 16:01:52 +03:00
Dmitry Gutov
ab3ba912fc shell-quote-argument DIR when appropriate
* lisp/progmodes/project.el (project-file-completion-table):
`shell-quote-argument' DIR as well.

* lisp/progmodes/xref.el (xref--rgrep-command): Pass DIR through
`shell-quote-argument' (bug#23453).  Thanks for Kaushal Modi for
pointing out the problem.  Assert that DIR doesn't start with `~'.
2016-05-05 04:15:23 +03:00
Dmitry Gutov
922c7a3e48 Rework xref-query-replace-in-results
* lisp/progmodes/xref.el (xref-query-replace-in-results): Collect
all xrefs from the buffer first, then delegate most of the
processing to the value returned by xref--buf-pairs-iterator.
(xref--buf-pairs-iterator): New function.  Return an "iterator"
which partitions returned markers into buffers, and only processes
markers from one buffer at a time.  When an xref is out of date,
skip it with a message instead of signaling error (bug#23284).
(xref--outdated-p): Extract from xref--buf-pairs-iterator.  Trim
CR from both strings before comparing.
(xref--query-replace-1): Remove the variable current-buf, no need
to track it anymore.  Simplify the filter-predicate and search
functions accordingly.  Iterate over buffer-markers pairs returned
by the iterator, and call `perform-replace' for each of them.  Use
multi-query-replace-map (bug#23284).  Use `switch-to-buffer' every
time after the first, in order not to jump between windows.

* test/automated/xref-tests.el
(xref--buf-pairs-iterator-groups-markers-by-buffers-1)
(xref--buf-pairs-iterator-groups-markers-by-buffers-2)
(xref--buf-pairs-iterator-cleans-up-markers): New tests.
2016-05-05 03:26:04 +03:00
Dmitry Gutov
4d8fd9cf33 Handle "empty line" regexp in xref searches
* lisp/progmodes/xref.el (xref--collect-matches-1): Stop after one
match if re-search-forward doesn't move point (bug#23426).

* test/automated/xref-tests.el
(xref-collect-matches-finds-an-empty-line-regexp-match):
Uncomment test.
2016-05-04 01:59:29 +03:00
Dmitry Gutov
6f82d8ef7d Clear buffer-undo-list when showing xrefs
* lisp/progmodes/xref.el (xref--show-xref-buffer): Clear
buffer-undo-list and temporarily bind it to t while rendering the
buffer contents.
2016-05-04 00:42:43 +03:00
Dmitry Gutov
fd7b430afd `nreverse' Grep hits before passing them to xref--convert-hits
* lisp/progmodes/xref.el (xref-collect-matches): `nreverse' hits
before passing them to xref--convert-hits.  Fixes a regression
from cc0b7132.
2016-05-02 12:21:26 +03:00
Dmitry Gutov
cc0b713210 Perform xref searches without visiting unopened files
* lisp/progmodes/xref.el (xref-collect-references): Instead of
calling `semantic-symref-find-references-by-name', use
`semantic-symref-instantiate' and `semantic-symref-perform-search'
directly.  Ask for `line-and-text' results (bug#23223).
(xref-collect-matches): Include the line text in the "hit"
structure.
(xref--convert-hits): New function, split off from
`xref-collect-references' and `xref-collect-matches', to convert
"hits" to xref instance list.  Create a temporary buffer here, to
use it for post-processing all hit lines.
(xref--collect-matches): Use a different approach for non-visited
files.  Insert the line text into the temp buffer, apply the
file's major mode the best we can without reading its whole
contents, syntax-propertize, and search in the result.
(xref--collect-matches-1): Extract, to handle the common logic
between two cases.
(xref--find-buffer-visiting): New function, a wrapper around
`find-buffer-visiting' to amortize its cost.

* lisp/cedet/semantic/symref/idutils.el
(semantic-symref-idutils--line-re): New constant.
(semantic-symref-parse-tool-output-one-line): Support result type
`line-and-text'.

* lisp/cedet/semantic/symref/grep.el
(semantic-symref-grep--line-re)
(semantic-symref-parse-tool-output-one-line): Same.

* lisp/cedet/semantic/symref/cscope.el
(semantic-symref-cscope--line-re)
(semantic-symref-parse-tool-output-one-line): Same.

* lisp/cedet/semantic/symref/global.el
(semantic-symref-global--line-re)
(semantic-symref-parse-tool-output-one-line): Same.
2016-04-12 21:08:56 +03:00
Glenn Morris
9094304a9c * lisp/progmodes/xref.el (xref-buffer-name, xref--window):
Move definitions before use.
2016-03-17 12:55:09 -04:00
Dmitry Gutov
dbb02bfadc Make sure to use case-sensitive search
* lisp/progmodes/xref.el (xref-collect-references): Make sure to
use case-sensitive search.
2016-03-03 02:36:27 +02:00
Dmitry Gutov
aae436e2d8 Uncomment the next-error-function integration in xref
* lisp/progmodes/xref.el (xref--xref-buffer-mode):
Uncomment the next-error-function integration
(http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20489#110).
2016-02-29 05:16:41 +02:00
Dmitry Gutov
e19c1c3017 Kill off xref--display-history
Now that the core workflow keeps the xref window visible, there's
less value in storing this history.  And it never was
comprehensive enough to undo scrolling changes.
* lisp/progmodes/xref.el (xref--display-history)
(xref--save-to-history, xref-quit): Remove.
(xref--show-pos-in-buf): Update accordingly.
(xref--xref-buffer-mode-map): Remove xref-quit binding.
2016-02-22 00:57:41 +02:00
Dmitry Gutov
5698947ff9 Keep the xref buffer visible until the user quits it explicitly
* lisp/progmodes/xref.el (xref--pop-to-location):
Rename WINDOW argument to ACTION.
(xref--with-dedicated-window): New macro.
(xref--show-pos-in-buf): Rename from `xref--display-position'.
Add and handle new argument, SELECTED.  Use the above macro.
(xref--show-location): Add SELECTED argument.
(xref-show-location-at-point): Make an effort to avoid the
original window when showing the location.
(xref-goto-xref): Don't quit the xref window (bug#20487 and
http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01133.html).
(xref--query-replace-1): Use xref--with-dedicated-window as well.
(xref--next-error-function): Call xref--show-location instead of
xref--pop-to-location.
(xref--show-xrefs): Rename WINDOW argument to DISPLAY-ACTION.
Only pass that value to xref--pop-to-location.  Pass the current
selected window to xref-show-xrefs-function as the `window'
property.
(xref--find-xrefs, xref--find-definitions): Rename WINDOW argument
to DISPLAY-ACTION as well.
2016-02-22 00:57:40 +02:00
Stephen Leake
7deeab6ff0 Improve project-find-file
* lisp/progmodes/project.el (project-file-completion-table): New.
(project-find-file, project-or-external-find-file): Default to filename
at point.
(project-file-completion-table): New, split out from
project--find-file-in.
(project-find-file-in): Renamed from project--find-file-in, use
project-file-completion-table.

* lisp/progmodes/xref.el (ede-minor-mode): New declaration.
(xref--find-ignores-arguments): Add doc string.
2016-01-29 17:46:18 -06:00
Dmitry Gutov
3f481ad007 Rename xref-query-replace to xref-query-replace-in-results
* lisp/progmodes/xref.el(xref-query-replace):
Rename to xref-query-replace-in-results.
(http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01240.html)

* lisp/progmodes/xref.el (xref--xref-buffer-mode-map):
* lisp/dired-aux.el (dired-do-find-regexp-and-replace):
* doc/emacs/dired.texi (Operating on Files):
* doc/emacs/maintaining.texi (Xref Commands)
(Identifier Search, Identifier Search): Update accordingly.
2016-01-24 05:17:52 +03:00
Dmitry Gutov
2111e0eeb5 Comment out next-error-function integration in xref
* lisp/progmodes/xref.el (xref--xref-buffer-mode):
Comment out next-error-function integration
(http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01286.html).
2016-01-23 23:11:31 +03:00
Stephen Leake
44c7b49d9a In xref-collect-references, force backends to respect the 'dir' arg
* lisp/progmodes/xref.el (xref-collect-references): Force symref backends
to use `default-directory'.
2016-01-22 01:57:18 -06:00
Dmitry Gutov
36b0729ce7 Add xref-based replacements for Dired search commands
* lisp/dired-aux.el (dired-do-find-regexp)
(dired-do-find-regexp-and-replace): New commands.
http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00864.html

* lisp/dired.el (dired-mode-map): Change bindings for `A' and
`Q' to the new commands.

* lisp/progmodes/xref.el (xref-query-replace)
(xref-collect-matches): Add progress reporters.
(xref--find-ignores-arguments): Return nil for zero ignores.
(xref--show-xrefs): Add an optional argument.
(xref-collect-matches): Drop the assert.  'find' accepts a
regular file in place of directory argument, too.
2016-01-18 22:14:17 +03:00
Glenn Morris
e85e0d5951 Add some missing version tags.
* lisp/electric.el (electric-quote-comment)
(electric-quote-string, electric-quote-paragraph):
* lisp/epg-config.el (epg-gpgconf-program):
* lisp/rect.el (rectangle-preview):
* lisp/emacs-lisp/check-declare.el (check-declare-ext-errors):
* lisp/emacs-lisp/package.el (package-selected-packages)
(package-hidden-regexps):
* lisp/erc/erc.el (erc-network-hide-list, erc-channel-hide-list):
* lisp/eshell/em-term.el (eshell-destroy-buffer-when-process-dies):
* lisp/gnus/mml-sec.el (mml1991-signers, mml2015-signers)
(mml-smime-signers, mml1991-encrypt-to-self, mml2015-encrypt-to-self)
(mml-smime-encrypt-to-self, mml2015-sign-with-sender)
(mml-smime-sign-with-sender, mml2015-always-trust)
(mml-secure-fail-when-key-problem, mml-secure-key-preferences):
* lisp/net/browse-url.el (browse-url-conkeror-new-window-is-buffer)
(browse-url-conkeror-arguments):
* lisp/net/newst-reader.el (newsticker-download-logos):
* lisp/progmodes/gud.el (gud-guiler-command-name):
* lisp/progmodes/prog-mode.el (prettify-symbols-unprettify-at-point):
* lisp/progmodes/project.el (project-vc):
* lisp/progmodes/python.el (python-indent-guess-indent-offset-verbose)
(python-shell-remote-exec-path, python-shell-first-prompt-hook)
(python-shell-completion-native-disabled-interpreters)
(python-shell-completion-native-enable)
(python-shell-completion-native-output-timeout)
(python-shell-completion-native-try-output-timeout):
* lisp/progmodes/xref.el (xref):
* lisp/term/screen.el (xterm-screen-extra-capabilities):
* lisp/term/xterm.el (xterm-max-cut-length):
Add missing version tags.
2016-01-12 20:06:49 -05:00
Eli Zaretskii
db3c2a8daa Improve doc strings and prompts in xref.el
* lisp/progmodes/xref.el (xref-backend-functions)
(xref-find-definitions): Doc fixes.
(xref-query-replace): Doc fix.  Improve prompts for arguments.
2016-01-09 19:06:52 +02:00
Dmitry Gutov
ed41d117a4 Add project-find-file and project-or-external-find-file
* lisp/minibuffer.el (completion-category-defaults):
Add `project-file' category.

* lisp/progmodes/project.el (project-find-file)
(project-or-external-find-file): New commands.
(project--find-file-in): New private function.

* lisp/progmodes/xref.el (xref-collect-matches): Use
`expand-file-name' on DIR, to expand the tildes.
(xref--find-ignores-arguments): Extract from
`xref--rgrep-command'.
2016-01-07 20:56:09 +03:00
Paul Eggert
4bc5e0222b Spelling fix 2016-01-03 23:52:01 -08:00
Dmitry Gutov
43662a240b ; Clarify that xref is still experimental 2016-01-03 02:04:09 +02:00
Paul Eggert
0e963201d0 Update copyright year to 2016
Run admin/update-copyright.
2016-01-01 01:34:24 -08:00
Dmitry Gutov
ce106f3de6 Undo ill-advised change
* lisp/progmodes/xref.el (xref-collect-matches): Undo
ill-advised change.  The hits come in the order that `find'
produces them in, which isn't alphabetical.
2015-12-30 06:25:48 +02:00
Dmitry Gutov
17ab0d10e1 Rename project-library-roots to project-external-roots
* lisp/progmodes/project.el (project-library-roots): Rename to
project-external-roots.
(project-library-roots-function): Rename to
project-vc-external-roots-function.  Only use it in the VC
backend, for now.  Update project-external-roots accordingly.
(project-vc-library-roots): Remove.
(project-or-libraries-find-regexp):
Rename to project-or-external-find-regexp.

* lisp/progmodes/elisp-mode.el (elisp-library-roots):
Rename to elisp-load-path-roots.

* lisp/progmodes/etags.el (etags-library-roots): Remove.  Use
an anonymous function for the default value of
project-vc-external-roots-function.
2015-12-28 06:17:37 +02:00
Dmitry Gutov
f651cd1199 APPEND etags--xref-backend to xref-backend-functions
* lisp/progmodes/xref.el (xref-backend-functions):
Use APPEND when adding the default element
(http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00061.html).
2015-12-02 04:12:19 +02:00
Dmitry Gutov
a521310f9e Autoload etags when using its xref backend
* lisp/progmodes/xref.el (xref--etags-backend):
Rename to etags--xref-backend.  Move to etags.el.  Autoload.
(Bug#22026)
2015-11-27 15:22:36 +02:00
Dmitry Gutov
a5fd38c3a6 Add xref--etags-backend to xref-backing-functions using add-hook
* lisp/progmodes/xref.el (xref-backend-functions): Move the
default value into a separate `add-hook' call (bug#21964).

* lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
Don't declare the xref-backend-functions variable.
It doesn't make any difference.
2015-11-21 01:57:15 +02:00
Stephen Leake
ce4eeca8d4 Improve doc string
* lisp/progmodes/xref.el (xref-backend-references): Improve doc string.
2015-11-17 07:49:29 -06:00
Dmitry Gutov
a4c6f55b9a Unify the absolutely equal xref-backend-references implementations
* lisp/progmodes/elisp-mode.el (xref-backend-references):
Remove.

* lisp/progmodes/etags.el (xref-backend-references):
Remove.

* lisp/progmodes/xref.el (xref-backend-references):
Define the default implementation.
2015-11-15 07:00:45 +02:00