From 3d6f7553319b38bbc9a93d66cf7879926a695da1 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Wed, 19 Apr 2023 01:29:20 +0300 Subject: [PATCH] xref-search-program-alist: Fix searching larger file lists on MS Windows * lisp/progmodes/xref.el (xref-search-program-alist): Add '-s 10000' to xargs' options when on Windows or DOS. Apparently the xargs port doesn't currently know how to obey the system-wide limits (https://debbugs.gnu.org/bug=61667#521). --- lisp/progmodes/xref.el | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 1ae60796601..0666b18cba1 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1820,16 +1820,22 @@ IGNORES is a list of glob patterns for files to ignore." ;; Ripgrep gets jumbled output, though, even with --line-buffered. ;; But Grep seems to be stable. Even without --line-buffered. (defcustom xref-search-program-alist - '((grep - . - ;; '-s' because 'git ls-files' can output broken symlinks. - "xargs -0 grep --null -snHE -e ") - (ripgrep - . - ;; '!*/' is there to filter out dirs (e.g. submodules). - "xargs -0 rg --null -nH --no-heading --no-messages -g '!*/' -e " - ) - (ugrep . "xargs -0 ugrep --null -ns -e ")) + (let ((xargs-max-chars + (and (memq system-type '(windows-nt ms-dos)) + "-s 10000 "))) + `((grep + . + ;; '-s' because 'git ls-files' can output broken symlinks. + ,(concat "xargs -0 " xargs-max-chars "grep --null -snHE -e ")) + (ripgrep + . + ;; '!*/' is there to filter out dirs (e.g. submodules). + ,(concat "xargs -0 " + xargs-max-chars + "rg --null -nH --no-heading --no-messages -g '!*/' -e ")) + (ugrep + . + ,(concat "xargs -0 " xargs-max-chars "ugrep --null -ns -e ")))) "Association list mapping program identifiers to command templates. Program identifier should be a symbol, named after the search program. @@ -1844,7 +1850,7 @@ The template should have the following fields: :type '(repeat (cons (symbol :tag "Program identifier") (string :tag "Command template"))) - :version "28.1" + :version "29.1" :package-version '(xref . "1.0.4")) (defcustom xref-search-program 'grep -- 2.39.2