From: "Felicián Németh" <felician.nemeth@gmail.com>
To: 34343@debbugs.gnu.org
Subject: bug#34343: [PATCH] Make project--find-regexp-in-files work with remote files
Date: Wed, 6 Feb 2019 09:18:02 +0100 [thread overview]
Message-ID: <CAGLaV2b-a4FFVuGZKAo1cqts_79iowDHgDvpMTj4=cqAA79VWg@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 306 bytes --]
Hi,
The attached patch enhances the remote file support of project.el. It also
has a new "require" statement, which might be problematic. Additionally,
project--collect-matches will look very similar to xref-collect-matches
creating a chance to unify the two functions later.
Thanks,
Felicián
[-- Attachment #1.2: Type: text/html, Size: 389 bytes --]
[-- Attachment #2: 0001-Make-project-find-regexp-in-files-work-with-remote-f.patch --]
[-- Type: text/x-patch, Size: 3382 bytes --]
From 6f65ec9462eebfd405768e1b2c730fc3f4e65b4a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felici=C3=A1n=20N=C3=A9meth?= <felician.nemeth@gmail.com>
Date: Wed, 6 Feb 2019 08:59:34 +0100
Subject: [PATCH] Make project--find-regexp-in-files work with remote files
* project.el: Require seq.
(project--collect-matches): New function extracted
from project--find-regexp-in-files; handle remote files.
(project--find-regexp-in-files): Group files based on their
remote-id, call the new function on the groups.
---
lisp/progmodes/project.el | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 815cc7cd3d..5833e6401b 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -88,6 +88,7 @@
;;; Code:
(require 'cl-generic)
+(require 'seq)
(defvar project-find-functions (list #'project-try-vc)
"Special hook to find the project containing a given directory.
@@ -374,12 +375,29 @@ project-or-external-find-regexp
(project--find-regexp-in-files regexp files)))
(defun project--find-regexp-in-files (regexp files)
+ (let* ((xref-groups
+ (mapcar
+ (lambda (group)
+ (let* ((files (cdr group))
+ (local-files (mapcar #'file-local-name files))
+ (dir (file-name-directory (car files))))
+ (project--collect-matches regexp local-files dir)))
+ (seq-group-by #'file-remote-p files)))
+ (xrefs (apply #'append xref-groups)))
+ (unless xrefs
+ (user-error "No matches for: %s" regexp))
+ (xref--show-xrefs xrefs nil)))
+
+(defun project--collect-matches (regexp files dir)
+ "Collect matches for REGEXP inside FILES in DIR.
+FILES is a list of file names."
+ ;; Cf. `xref-collect-matches'.
(pcase-let*
((output (get-buffer-create " *project grep output*"))
(`(,grep-re ,file-group ,line-group . ,_) (car grep-regexp-alist))
(status nil)
(hits nil)
- (xrefs nil)
+ (remote-id (file-remote-p dir))
(command (format "xargs -0 grep %s -nHe %s"
(if (and case-fold-search
(isearch-no-upper-case-p regexp t))
@@ -390,6 +408,7 @@ project--find-regexp-in-files
(erase-buffer)
(with-temp-buffer
(insert (mapconcat #'identity files "\0"))
+ (setq default-directory dir)
(setq status
(project--process-file-region (point-min)
(point-max)
@@ -407,13 +426,10 @@ project--find-regexp-in-files
(buffer-substring (point-min) (line-end-position))))
(while (re-search-forward grep-re nil t)
(push (list (string-to-number (match-string line-group))
- (match-string file-group)
+ (concat remote-id (match-string file-group))
(buffer-substring-no-properties (point) (line-end-position)))
hits)))
- (setq xrefs (xref--convert-hits (nreverse hits) regexp))
- (unless xrefs
- (user-error "No matches for: %s" regexp))
- (xref--show-xrefs xrefs nil)))
+ (xref--convert-hits (nreverse hits) regexp)))
(defun project--process-file-region (start end program
&optional buffer display
--
2.11.0
next reply other threads:[~2019-02-06 8:18 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-06 8:18 Felicián Németh [this message]
2019-02-14 1:17 ` bug#34343: [PATCH] Make project--find-regexp-in-files work with remote files Dmitry Gutov
2019-02-15 18:53 ` Felicián Németh
[not found] ` <a54e7498-4ead-dd6f-6a2e-3919ab035b23@yandex.ru>
2019-02-27 9:15 ` Michael Albinus
2019-03-06 7:47 ` Felicián Németh
2019-03-06 14:33 ` Dmitry Gutov
2019-03-06 14:44 ` Dmitry Gutov
2019-03-08 8:28 ` Felicián Németh
2019-12-26 14:04 ` Dmitry Gutov
2019-12-27 8:24 ` Michael Albinus
2019-12-27 14:18 ` Dmitry Gutov
2019-12-27 17:57 ` Michael Albinus
2019-12-28 10:21 ` Michael Albinus
2019-12-28 14:48 ` Dmitry Gutov
2019-12-28 18:56 ` Michael Albinus
2019-12-28 14:46 ` Dmitry Gutov
2019-12-28 18:46 ` Michael Albinus
2019-12-29 0:15 ` Dmitry Gutov
2019-12-29 12:34 ` Michael Albinus
2019-12-29 13:14 ` Dmitry Gutov
2020-01-01 12:29 ` Michael Albinus
2020-01-02 1:22 ` Dmitry Gutov
2020-01-02 10:48 ` Michael Albinus
2020-01-03 0:52 ` Dmitry Gutov
2020-01-03 9:28 ` Michael Albinus
2020-01-06 14:33 ` Dmitry Gutov
2020-01-06 18:48 ` Michael Albinus
2020-01-07 3:23 ` Dmitry Gutov
2020-01-07 9:19 ` Michael Albinus
2020-01-07 13:40 ` Dmitry Gutov
2020-01-07 14:29 ` Michael Albinus
2020-01-07 14:34 ` Dmitry Gutov
2021-07-22 13:00 ` Lars Ingebrigtsen
2021-07-24 19:42 ` Dmitry Gutov
2021-07-25 6:41 ` Lars Ingebrigtsen
2020-01-03 0:57 ` Dmitry Gutov
2020-01-06 17:29 ` Felician Nemeth
2020-01-07 3:23 ` Dmitry Gutov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAGLaV2b-a4FFVuGZKAo1cqts_79iowDHgDvpMTj4=cqAA79VWg@mail.gmail.com' \
--to=felician.nemeth@gmail.com \
--cc=34343@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).