Subject: bug#36483: 12.1.2; 'lacheck' and 'chktex' results not recongnized by compilation mode when filename has spaces

From: Ikumi Keita <[email-masked]>
Date: Mon, 08 Jul 2019 16:20:02 +0900

Dear Emacs devlopers,

May I ask you to modify compilation-mode to accept file names with
spaces?  I'm contacting at [email-masked] because it is presented
as maintainer in the header of compile.el.

It was reported recently in bug-auctex mail list that file names with
space are not recognized in the output of "lacheck" and "chktex"
commands in AUCTeX:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36483

AUCTeX (an advanced major mode for TeX documents,
https://www.gnu.org/software/auctex/ ) entrust compilation-mode with all
the jobs with respect to those two commands.  It turned out that
compilation-mode is not ready for file names with spaces, at least for
the output of lacheck and chktex.  The relevant entry in
`compilation-error-regexp-alist-alist' is:

    (comma
     "^\"\\([^,\" \n\t]+\\)\", line \\([0-9]+\\)\
\\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?" 1 2 3 (4))

The regular expression in this entry excludes any space in the file name
explicitly, so it doesn't pick up the warnings for file names with
spaces, which look like:

"filename with spaces.tex", line 5.6:(#18) Use either `` or '' as an alternative to `"'.

After I changed the above entry to a form quoted below, compilation-mode
detected the warnings as expected for both lachack and chktex outputs:

    (comma
     "^\"\\([^,\"\n\t]+\\)\", line \\([0-9]+\\)\
\\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?" 1 2 3 (4))

I'm not sure whether this exclusion of spaces is mandatory for robust
operation of compilation-mode.  If not the case, is it acceptable to
modify compilation-mode in some way to work with file names with space?
The core feature of AUCTeX is designed to work with file names with
spaces, so it can work more coherently as a whole if compilation-mode is
aware of such file names as well.

Best regards,
Ikumi Keita

The original bug report follows below:

>>>>> Gustavo Barros <[email-masked]> writes:
> Currently 'lacheck' and 'chktex' results are not recognized as errors or
> warnings by compilation mode if the document’s filename has spaces.  This
> causes navigation through the errors with "C-x `" ('next-error'), as described
> in AUCTeX’s documentation not to work.

> Steps to reproduce:

> Run =emacs -Q=.

> For standard setup, eval:
> #+begin_src emacs-lisp
> (package-initialize)
> (setq TeX-auto-save t)
> (setq TeX-parse-self t)
> #+end_src

> Find file named "filename with spaces.tex" with following contents (just to
> generate some issues with the checkers):
> #+begin_export latex
> \documentclass{article}

> \begin{document}

> Some "sentence" with some WORDS.

> \begin{tabular}{
>   c
>   c
>   }
>   1 & 2 \\
>   3 & 4 \\
> \end{tabular}

> \end{document}
> #+end_export
> Then run "C-c C-c" Check and "C-c C-c" ChkTeX.

> In either case, compilation mode will not identify errors or warnings in the
> output, and "C-x `" and "M-g p" will echo, respectively, "Moved past last
> error" and "Moved back before first error".

> Emacs  : GNU Emacs 26.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
>  of 2019-04-19
> Package: 12.1.2

> current state:
> ==============
> (setq
>  AUCTeX-date "2019-02-08"
>  window-system 'x
>  LaTeX-version "2e"
>  TeX-style-path '("~/.emacs.d/auctex" 
>  "/home/gustavo/.emacs.d/elpa/auctex-12.1.2/style"
> 		  "/home/gustavo/.emacs.d/auctex/auto" 
> 		  "/home/gustavo/.emacs.d/auctex/style" "auto" "style")
>  TeX-auto-save t
>  TeX-parse-self t
>  TeX-master t
>  TeX-command-list '(("TeX" "%(PDF)%(tex) %(file-line-error) %`%(extraopts) 
>  %S%(PDFout)%(mode)%' %t" TeX-run-TeX
> 		     nil (plain-tex-mode ams-tex-mode texinfo-mode) :help "Run 
> 		     plain TeX")
> 		    ("LaTeX" "%`%l%(mode)%' %T" TeX-run-TeX nil (latex-mode 
> 		    doctex-mode) :help "Run LaTeX")
> 		    ("Makeinfo" "makeinfo %(extraopts) %t" TeX-run-compile nil 
> 		    (texinfo-mode) :help
> 		     "Run Makeinfo with Info output")
> 		    ("Makeinfo HTML" "makeinfo %(extraopts) --html %t" 
> 		    TeX-run-compile nil (texinfo-mode) :help
> 		     "Run Makeinfo with HTML output")
> 		    ("AmSTeX" "amstex %(PDFout) %`%(extraopts) %S%(mode)%' %t" 
> 		    TeX-run-TeX nil (ams-tex-mode)
> 		     :help "Run AMSTeX")
> 		    ("ConTeXt" "%(cntxcom) --once --texutil %(extraopts) 
> 		    %(execopts)%t" TeX-run-TeX nil
> 		     (context-mode) :help "Run ConTeXt once")
> 		    ("ConTeXt Full" "%(cntxcom) %(extraopts) %(execopts)%t" 
> 		    TeX-run-TeX nil (context-mode) :help
> 		     "Run ConTeXt until completion")
> 		    ("BibTeX" "bibtex %s" TeX-run-BibTeX nil t :help "Run 
> 		    BibTeX")
> 		    ("Biber" "biber %s" TeX-run-Biber nil t :help "Run Biber")
> 		    ("View" "%V" TeX-run-discard-or-function t t :help "Run 
> 		    Viewer")
> 		    ("Print" "%p" TeX-run-command t t :help "Print the file")
> 		    ("Queue" "%q" TeX-run-background nil t :help "View the 
> 		    printer queue" :visible
> 		     TeX-queue-command)
> 		    ("File" "%(o?)dvips %d -o %f " TeX-run-dvips t t :help 
> 		    "Generate PostScript file")
> 		    ("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil t :help 
> 		    "Convert DVI file to PostScript")
> 		    ("Dvipdfmx" "dvipdfmx %d" TeX-run-dvipdfmx nil t :help
> 		     "Convert DVI file to PDF with dvipdfmx")
> 		    ("Ps2pdf" "ps2pdf %f" TeX-run-ps2pdf nil t :help "Convert 
> 		    PostScript file to PDF")
> 		    ("Glossaries" "makeglossaries %s" TeX-run-command nil t 
> 		    :help
> 		     "Run makeglossaries to create glossary file")
> 		    ("Index" "makeindex %s" TeX-run-index nil t :help "Run 
> 		    makeindex to create index file")
> 		    ("upMendex" "upmendex %s" TeX-run-index t t :help "Run 
> 		    upmendex to create index file")
> 		    ("Xindy" "texindy %s" TeX-run-command nil t :help "Run 
> 		    xindy to create index file")
> 		    ("Check" "lacheck %s" TeX-run-compile nil (latex-mode) 
> 		    :help
> 		     "Check LaTeX file for correctness")
> 		    ("ChkTeX" "chktex -v6 %s" TeX-run-compile nil (latex-mode) 
> 		    :help
> 		     "Check LaTeX file for common mistakes")
> 		    ("Spell" "(TeX-ispell-document \"\")" TeX-run-function nil 
> 		    t :help "Spell-check the document")
> 		    ("Clean" "TeX-clean" TeX-run-function nil t :help "Delete 
> 		    generated intermediate files")
> 		    ("Clean All" "(TeX-clean t)" TeX-run-function nil t :help
> 		     "Delete generated intermediate and output files")
> 		    ("Other" "" TeX-run-command t t :help "Run an arbitrary 
> 		    command"))
>  )