Commit graph

150 commits

Author SHA1 Message Date
Dmitry Gutov
d17ae7f5af xref--find-ignores-arguments: Return "" if IGNORES is nil 2019-05-03 02:48:44 +03:00
Dmitry Gutov
f2b395c4c5 (xref--mouse-2): Fix not to jump to the next line
* lisp/progmodes/xref.el (xref--mouse-2): Fix not to jump to the
next line.
2019-05-03 01:53:11 +03:00
Dmitry Gutov
5ff4bfaeec Fix an "empty identifier" problem
* lisp/progmodes/xref.el (xref--read-identifier): Abort on empty
input if there is no default
(https://lists.gnu.org/archive/html/help-gnu-emacs/2019-05/msg00012.html).
2019-05-03 01:53:11 +03:00
Juri Linkov
ed2b0bdfe2 New faces in xref (bug#23179)
* lisp/progmodes/xref.el (xref-file-header, xref-line-number)
(xref-match):  New faces.
(xref--insert-xrefs, xref--collect-matches-1): Use them.
2019-04-14 00:54:14 +03:00
Juri Linkov
36535caf96 * lisp/progmodes/xref.el (xref--show-xrefs): Push mark. (Bug#34908) 2019-03-24 23:19:55 +02:00
Felicián Németh
c7e4bc974b Jump to the current error in xref with zero prefix arg
* xref.el (xref--next-error-function): Handle the corner case of
n == 0.  (Bug#34462)
2019-02-23 11:34:34 +02:00
Juri Linkov
94b320849e Make window choice in xref commands configurable
Previously, it wasn't easy to tell xref.el commands like
xref-find-definitions or xref-find-definitions-other-window how to
choose a window for the *xref* buffer or how to find windows for
displaying the results after choosing a candidate.  This patch makes
that task easier, but keeps the current behaviour intact.

Co-authored-by: João Távora <joaotavora@gmail.com>

* lisp/progmodes/xref.el (xref--show-pos-in-buf): Simplify.
2019-02-06 22:50:02 +00:00
Paul Eggert
ba809612c0 Merge from origin/emacs-26
2fcf2df Fix copyright years by hand
26bed8b Update copyright year to 2019
2814292 Fix value of default frame height.  (Bug#33921)
2018-12-31 17:57:29 -08:00
Paul Eggert
26bed8ba10 Update copyright year to 2019
Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'.
2019-01-01 01:01:13 +00:00
Dmitry Gutov
fd244507c5 xref-goto-xref: Highlight the exact symbol after the jump
* lisp/progmodes/xref.el (xref-goto-xref): Bind
'xref--current-item' to highlight the exact symbol after the jump
and not the whole line.
2018-12-24 05:11:02 +02:00
Dmitry Gutov
d4c1518474 ; Don't require semantic/symref, it's unnecessary now 2018-12-24 04:37:24 +02:00
Allen Li
70c75167ed Add setter for 'xref-marker-ring-length'
* lisp/progmodes/xref.el (xref-marker-ring-length): Add setter.
* etc/NEWS: Document last change.  (Bug#32849)
2018-11-10 11:43:39 +02:00
Michael Albinus
b9c6020025 Fix Bug#33006
* lisp/cedet/semantic/symref/grep.el (semantic-symref-perform-search):
* lisp/progmodes/xref.el (xref-collect-matches)
(xref--collect-matches): Handle remote files.  (Bug#33006)
2018-10-29 14:09:52 +01:00
Glenn Morris
44c1ce3a37 Merge from origin/emacs-26
d28d54c (origin/emacs-26) More accurate docs for 'text-char-description'
b3baf99 Document synchronous behavior of eshell/make (Bug#32513)
98544ea Fix bs-show with wide characters (Bug#17822)
85af51b Improve Custom menu labels for 2 options
72a2a36 Improve wording of last change in dired-x.texi
d4fa83b Fix GnuTLS test suite with GnuTLS versions 3.4.x
b5bee6b Fix build with gnutls versions 3.0 to 3.2 (Bug#32446)
67eb80e ; * etc/enriched.txt (hanging-indents): Remove extra indent.
c71cfb7 Fix the Bubbles game on TTY frames
3bbf21b Add choice to reshow certificate information (Bug#31877)
6f2c471 * src/alloc.c (Fbool_vector, Flist, Fvector): Doc tweak.
39eecb3 * src/alloc.c (vector): Fix grammatical error in doc string: ...
2018-09-20 07:50:34 -07:00
Eli Zaretskii
85af51bab1 Improve Custom menu labels for 2 options
* lisp/dired.el (dired-use-ls-dired):
* lisp/progmodes/xref.el (xref-prompt-for-identifier): Improve
the doc string and the defcustom menu/tags text.  (Bug#32756)
2018-09-19 10:54:41 +03:00
Glenn Morris
caa4d9c4e7 Merge from origin/emacs-26
5afbf62 Fix emacsclient check for term.el buffer (Bug#21041)
5132a58 Improve documentation of 'set-fontset-font'
cd90325 Improve documentation of M-?
155a885 Reinterpret Esperanto characters in iso-transl as iso-8859-3.
a0ef733 Fix Flyspell mode when several languages are mixed in a buffer
2018-08-10 11:28:40 -07:00
Eli Zaretskii
cd9032532d Improve documentation of M-?
* doc/emacs/maintaining.texi (Identifier Search):
* lisp/progmodes/xref.el (xref-find-references): Improve
documentation of xref-find-references and
xref-prompt-for-identifier.  (Bug#32389)
2018-08-07 19:15:41 +03:00
Tobias Gerdin
455a236d41 New function 'xref-find-definitions-at-mouse'
* lisp/progmodes/xref.el (xref-find-definitions-at-mouse): New
function.  (Bug32029)

Copyright-paperwork-exempt: yes
2018-07-07 11:59:56 +03:00
Juri Linkov
0c9e3df3c2 Use next-error-found to set next-error-last-buffer.
https://lists.gnu.org/archive/html/emacs-devel/2018-04/msg00207.html

* lisp/simple.el (next-error-buffer): New buffer-local variable
instead of making buffer-local next-error-last-buffer.  (Bug#20489)
(next-error-found-function): New defcustom.
(next-error-buffer-on-selected-frame): Use t for avoid-current arg
of next-error-buffer-p.
(next-error-find-buffer): Add second rule for using the current
next-error-buffer if it's not visited by other navigation.
(next-error, next-error-internal): Call next-error-found.
(next-error-found): New function with body extracted mostly from
next-error.

* lisp/vc/add-log.el (change-log-goto-source-internal): New function
with body from change-log-goto-source.
(change-log-goto-source): Call change-log-goto-source-internal and
next-error-found.
(change-log-next-error): Call change-log-goto-source-internal
instead of change-log-goto-source.
(change-log-mode): Don't set next-error-last-buffer.  (Bug#28864)

* lisp/vc/diff-mode.el (diff-goto-source): Call next-error-found.

* lisp/progmodes/xref.el (xref-goto-xref): Call next-error-found.

* lisp/replace.el (occur-mode-goto-occurrence)
(occur-mode-goto-occurrence-other-window)
(occur-mode-display-occurrence): Call next-error-found.
(occur-next-error): Remove unnecessary with-current-buffer.
(Bug#27362, bug#30646)
2018-04-17 22:27:48 +03:00
Dmitry Gutov
6719f05ff7 Backport: xref--next-error-function: Move xref's window point
* lisp/progmodes/xref.el (xref--next-error-function): Move
xref's window point if it's visible.  When we don't do that,
navigation can start looping after a while.

(cherry picked from commit 108ce84432)
2018-03-03 02:46:50 +02:00
Dmitry Gutov
108ce84432 xref--next-error-function: Move xref's window point
* lisp/progmodes/xref.el (xref--next-error-function): Move
xref's window point if it's visible.  When we don't do that,
navigation can start looping after a while.
2018-02-28 04:04:29 +02:00
Dmitry Gutov
11c58c4fc4 Fix xref--next-error-function behavior WRT current buffer
* lisp/progmodes/xref.el (xref--show-location): Make sure to
make the target window selected at the end, and its buffer
current (bug#20489).
2018-02-28 04:04:29 +02:00
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