Subject: Re: bug#35964: TeX-strip-extension not doing what's documented, TeX-master-file always returning relative name

From: Ikumi Keita <[email-masked]>
Date: Thu, 20 Jun 2019 19:42:13 +0900

Hi Jan,

Please keep [email-masked] in Cc: when you reply.

>>>>> Jan Seeger <[email-masked]> writes:
> If there is a better way to get the absolute path of the master file,
> let me know!

How about "%a" defined in `TeX-expand-list-builtin' instead of your
"%(abs)"?
(Ah, but it seems to my eyes not to return the expected file name when
used with partical typeset like C-c C-r and so on...  If that is
problematic for you, please let us know.)

> To explain some backstory: I've added a custom viewer (Foxit) with an
> argument that allows automatic reloading on Windows. However, Foxit is
> a multi-document application, so the working directory of the current
> Foxit instance might not be the same as that of Emacs. So Foxit
> requires the absolute path to be able to open the file.

[ ... ]

> During this, I found out that `TeX-master-file` will not return
> absolute paths, even if the `nondirectory` argument is nil.

I have an impression that many part of of AUCTeX expects master file
name to be without directory part.  So I don't think that it is a good
idea to change `TeX-master-file' to return absolute path every time its
third argument is nil.

>> Sorry, I don't quite understand what you write here:
>> (1) The line 2332 in tex.el of the current git master branch is just
>> (defun TeX-master-file (&optional extension nondirectory ask)
>> .

> This might be a version difference, I'll paste the modified code here
> for convenience:
> -----
>   (let ((my-name (if (buffer-file-name)
> 		     (TeX-strip-extension nil (list
> TeX-default-extension) nondirectory)
> 		   "<none>")))
> -----
> The existing code left out the `nondirectory` argument, causing
> `TeX-strip-extension` to return a relative filename again.

Thanks, I see.

>> (2) Presuming that your NONDIR actually means NONDIRECTORY of
>> `TeX-master-file', that must be non-nil in order to make difference in
>> the behavior of `TeX-master-file' if NONDIRECTORY is forwarded to
>> `TeX-strip-extension'.  So the case that NONDIRECTORY is nil is not
>> relevant.

> The original line is this:
> -----
> (let ((my-name (if (buffer-file-name)
> 		     (TeX-strip-extension nil (list TeX-default-extension) t)
> 		   "<none>")))
> -----
> which means that `my-name` is always the non-directory name, which is
> not what the documentation of TeX-master-file states.

IMHO, the sentence "If optional second argument NONDIRECTORY is non-nil,
do not include the directory." in the doc string of `TeX-master-file'
does not gurantee that it returns absolute path if NONDIRECTORY is nil.
It just states the case when NONDIRECTORY is non-nil, and nothing when
NONDIRECTORY is nil.  I think `TeX-master-file' is designed so that
(TeX-master-file) returns "main" in the buffer of main.tex and
"../master" in the buffer of sub.tex with local variable specification
%%% TeX-master: "../master"
.

Regards,
Ikumi Keita