Subject: bug#70329: 29.3; etags-regen-mode fails in projects that have spaces in their root path elements

From: Magiel Bruntink <[email-masked]>
Date: Wed, 10 Apr 2024 21:32:57 +0200

Dear maintainers,

I wanted to try to the new etags-regen-mode and loaded its lisp manually.

There is an issue with how the new mode deals with paths containing spaces,
however.

Running the etags--xref-backend through eg. xref-find-definitions
within a file in a project that has spaces in its path elements,
eg. "c:/temp/test project/test.c" will cause an error.

Messages seen are:
Generating new tags table...
(Shell command failed with code 1 and some error output)
visit-tags-table-buffer: File c:/temp/test project/TAGS does not exist

Error message in the etags-regen-tags-errors* buffer:
c:/temp/test: Permission denied

Thank you,
Magiel Bruntink

------------------------------------------------------------------------------
In GNU Emacs 29.3 (build 2, x86_64-w64-mingw32) of 2024-03-26 built on
 fv-az653-233
Windowing system distributor 'Microsoft Corp.', version 10.0.22631
System Description: Microsoft Windows 10 Home (v10.0.2009.22631.3447)

Configured using:
 'configure --prefix=/ucrt64 --host=x86_64-w64-mingw32
 --build=x86_64-w64-mingw32 --with-modules --without-dbus
 --without-compress-install --with-tree-sitter --with-native-compilation=aot
 'CFLAGS=-march=nocona -msahf -mtune=generic -O2 -pipe -fstack-protector-strong
 -fno-optimize-sibling-calls' CPPFLAGS=-D__USE_MINGW_ANSI_STDIO=1 'LDFLAGS=-pipe
 -lpthread''

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LIBXML2 MODULES NATIVE_COMP NOTIFY
W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XPM ZLIB

Important settings:
  value of $LANG: NLD
  locale-coding-system: cp1252

Major mode: Helpful

Minor modes in effect:
  etags-regen-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  shell-dirtrack-mode: t
  server-mode: t
  doom-modeline-mode: t
  TeX-PDF-mode: t
  global-java-ide-mode: t
  global-treesit-auto-mode: t
  winner-mode: t
  global-so-long-mode: t
  recentf-mode: t
  nerd-icons-completion-mode: t
  marginalia-mode: t
  corfu-popupinfo-mode: t
  savehist-mode: t
  corfu-history-mode: t
  global-corfu-mode: t
  corfu-mode: t
  vertico-mode: t
  global-completion-preview-mode: t
  display-time-mode: t
  pixel-scroll-precision-mode: t
  override-global-mode: t
  auto-compile-on-load-mode: t
  auto-compile-on-save-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  buffer-read-only: t
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
c:/Users/Magiel Bruntink/.emacs.d/elpa/transient-20240311.1638/transient hides c:/Tools/MSYS2/ucrt64/share/emacs/29.3/lisp/transient
c:/Users/Magiel Bruntink/.emacs.d/elpa/modus-themes-20240317.1619/theme-loaddefs hides c:/Tools/MSYS2/ucrt64/share/emacs/29.3/lisp/theme-loaddefs
c:/Users/Magiel Bruntink/.emacs.d/site-lisp/loaddefs hides c:/Tools/MSYS2/ucrt64/share/emacs/29.3/lisp/loaddefs
c:/Users/Magiel Bruntink/.emacs.d/elpa/jsonrpc-1.0.25/jsonrpc hides c:/Tools/MSYS2/ucrt64/share/emacs/29.3/lisp/jsonrpc
c:/Users/Magiel Bruntink/.emacs.d/elpa/eglot-1.17/eglot hides c:/Tools/MSYS2/ucrt64/share/emacs/29.3/lisp/progmodes/eglot
c:/Users/Magiel Bruntink/.emacs.d/elpa/eldoc-1.15.0/eldoc hides c:/Tools/MSYS2/ucrt64/share/emacs/29.3/lisp/emacs-lisp/eldoc

Features:
(shadow sort mail-extr emacsbug magit-patch magit-subtree magit-gitignore
magit-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help
ediff-init ediff-util etags fileloop helpful cc-langs trace edebug info-look
elisp-refs consult-xref c++-ts-mode c-ts-mode c-ts-common smartparens-c cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
cl-print shortdoc help-fns embark-org embark-consult embark ffap etags-regen
loaddefs-gen lisp-mnt radix-tree autoconf autoconf-mode sh-script smie
executable magit-extras pcmpl-unix magit-bookmark magit-submodule magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch
magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree
magit-tag magit-merge magit-branch magit-reset magit-files magit-refs
magit-status magit magit-repos magit-apply magit-wip magit-log which-func
magit-diff smerge-mode git-commit log-edit add-log magit-core magit-autorevert
autorevert magit-margin magit-transient magit-process with-editor magit-mode
transient magit-git magit-base magit-section tramp-cmds em-unix em-term term
ehelp em-script em-prompt em-hist em-pred em-glob em-extpipe em-cmpl em-basic
em-banner em-alias eshell-prompt-extras tramp tramp-loaddefs trampver
tramp-integration tramp-compat shell em-dirs esh-var esh-mode em-ls eshell
esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util
ace-window avy org-modern org-indent image-file image-converter oc-basic ol-eww
eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art
mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-async nntp gnus-sum shr
pixel-fill kinsoku url-file gnus-group gnus-undo gnus-start gnus-dbus dbus
gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time gnus-spec gnus-int
gnus-range message sendmail yank-media puny rfc822 mml mml-sec epa derived
mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util mail-utils
range mm-util mail-prsvr ol-docview doc-view jka-compr image-mode exif ol-bibtex
bibtex iso8601 ol-bbdb ol-w3m ol-doi org-link-doi smartparens-org
org-calendar-smart-time-grid org-agenda org-element org-persist xdg org-id
avl-tree generator org-refile org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-src ob-comint org-pcomplete pcomplete org-list org-footnote
org-faces org-entities noutline outline ob-emacs-lisp ob-core ob-eval org-cycle
org-table ol org-fold org-fold-core org-keys oc org-loaddefs cal-menu calendar
cal-loaddefs org-version org-compat org-macs format-spec misearch multi-isearch
dired-aux vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs nerd-icons-dired
diff-hl-dired time-date mule-util cursor-sensor consult bookmark pulse color
visual-fill-column svg dom xml gtags-mode files-x server ligature diff-hl
log-view pcvs-util vc-dir vc cus-start doom-modeline doom-modeline-segments
doom-modeline-env doom-modeline-core shrink-path f preview-dvisvgm face-remap
preview auctex-latexmk smartparens-latex latex latex-flymake tex-ispell
tex-style tex crm texmathp java-ide eglot external-completion jsonrpc
flymake-proc flymake diff ert ewoc debug backtrace find-func filenotify compile
text-property-search comint ansi-osc imenu smartparens-config smartparens-text
smartparens advice loadhist thingatpt treesit-auto treesit ansi-color dumb-jump
popup dash s xref project winner ibuf-macs so-long recentf tree-widget dired
dired-loaddefs nerd-icons-completion marginalia cape corfu-popupinfo savehist
corfu-history nerd-icons-corfu corfu orderless vertico compat completion-preview
edmacro kmacro modus-vivendi-tritanopia-theme modus-operandi-tritanopia-theme
modus-vivendi-deuteranopia-theme modus-operandi-deuteranopia-theme
modus-vivendi-tinted-theme modus-operandi-tinted-theme modus-vivendi-theme
modus-operandi-theme modus-themes nerd-icons nerd-icons-faces nerd-icons-data
nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon time pixel-scroll cua-base ring
display-line-numbers auctex-latexmk-autoloads blamer-autoloads async-autoloads
cape-autoloads consult-eglot-autoloads copilot-autoloads corfu-autoloads
csv-mode-autoloads dape-autoloads diff-hl-autoloads dired-collapse-autoloads
dired-narrow-autoloads dired-ranger-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads disk-usage-autoloads docker-autoloads aio-autoloads
dockerfile-mode-autoloads doom-modeline-autoloads dumb-jump-autoloads
ebdb-autoloads editorconfig-autoloads eglot-autoloads eldoc-autoloads
embark-consult-autoloads consult-autoloads embark-autoloads
eshell-prompt-extras-autoloads ess-autoloads gnu-elpa-keyring-update-autoloads
epg rfc6068 epg-config gnu-elpa-keyring-update gptel-autoloads
gtags-mode-autoloads helpful-autoloads elisp-refs-autoloads
ibuffer-project-autoloads interaction-log-autoloads jsonrpc-autoloads
kotlin-ts-mode-autoloads kubernetes-autoloads ligature-autoloads
lua-mode-autoloads magit-autoloads pcase git-commit-autoloads
magit-popup-autoloads magit-section-autoloads marginalia-autoloads
modus-themes-autoloads nerd-icons-completion-autoloads
nerd-icons-corfu-autoloads nerd-icons-dired-autoloads
nerd-icons-ibuffer-autoloads orderless-autoloads org-modern-autoloads
osm-autoloads pdf-tools-autoloads poly-R-autoloads poly-noweb-autoloads
pomidor-autoloads alert-autoloads log4e-autoloads gntp-autoloads popup-autoloads
preview-dvisvgm-autoloads auctex-autoloads tex-site pytest-autoloads
pyvenv-autoloads qrencode-autoloads quarto-mode-autoloads
poly-markdown-autoloads markdown-mode-autoloads polymode-autoloads
rainbow-mode-autoloads request-autoloads rust-mode-autoloads
shrink-path-autoloads f-autoloads smartparens-autoloads tablist-autoloads
transient-autoloads treemacs-nerd-icons-autoloads treemacs-autoloads
cfrs-autoloads posframe-autoloads ht-autoloads hydra-autoloads lv-autoloads
pfuture-autoloads ace-window-autoloads avy-autoloads s-autoloads dash-autoloads
nerd-icons-autoloads treesit-auto-autoloads unfill-autoloads vertico-autoloads
visual-regexp-autoloads wgrep-autoloads with-editor-autoloads compat-autoloads
info writeroom-mode-autoloads visual-fill-column-autoloads yaml-mode-autoloads
vc-git diff-mode vc-dispatcher use-package use-package-ensure
use-package-delight use-package-diminish use-package-bind-key bind-key
easy-mmode use-package-core package browse-url url url-proxy url-privacy
url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf
url-util mailcap url-handlers url-parse auth-source eieio eieio-core
password-cache json map byte-opt url-vars auto-compile comp comp-cstr warnings
subr-x rx cl-macs gv cl-extra help-mode cl-seq bytecomp byte-compile cus-edit pp
cus-load icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian
philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet
lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop
case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded
button loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule custom widget
keymap hashtable-print-readable backquote threads w32notify w32 multi-tty
make-network-process native-compile emacs)

Memory information:
((conses 16 1066771 54399)
 (symbols 48 51400 0)
 (strings 32 230776 12295)
 (string-bytes 1 8110103)
 (vectors 16 107827)
 (vector-slots 8 2288876 93154)
 (floats 8 2132 451)
 (intervals 56 8437 1030)
 (buffers 984 40))