Function: TeX-master-file

TeX-master-file is an interactive and byte-compiled function defined in tex.el.

Signature

(TeX-master-file &optional EXTENSION NONDIRECTORY ASK)

Documentation

Set and return the name of the master file for the current document.

If optional argument EXTENSION is non-nil, add that file extension to the name. Special value t means use TeX-default-extension.

If optional second argument NONDIRECTORY is non-nil, do not include the directory.

If optional third argument ASK is non-nil, ask the user for the name of master file if it cannot be determined otherwise.

Key Bindings

Source Code

;; Defined in ~/.emacs.d/elpa/auctex-14.1.2/tex.el
(defun TeX-master-file (&optional extension nondirectory ask)
  "Set and return the name of the master file for the current document.

If optional argument EXTENSION is non-nil, add that file extension to
the name.  Special value t means use `TeX-default-extension'.

If optional second argument NONDIRECTORY is non-nil, do not include
the directory.

If optional third argument ASK is non-nil, ask the user for the
name of master file if it cannot be determined otherwise."
  (interactive)
  (if (eq extension t)
      (setq extension TeX-default-extension))
  (with-current-buffer
      ;; In case this is an indirect buffer:
      (or (buffer-base-buffer) (current-buffer))
    (let ((my-name (if (TeX-buffer-file-name)
                       (TeX-strip-extension nil (list TeX-default-extension) t)
                     "<none>")))
      (save-excursion
        (save-restriction
          (widen)
          (goto-char (point-min))
          (cond
           ((and TeX-transient-master
                 (or (not TeX-master) (eq TeX-master 'shared)))
            (setq TeX-master TeX-transient-master))

           ;; Special value 't means it is own master (a free file).
           ((equal TeX-master my-name)
            (setq TeX-master t))

           ;; For files shared between many documents.
           ((and (eq 'shared TeX-master) ask)
            (setq TeX-master
                  (let* ((default (TeX-dwim-master))
                         (name (read-file-name
                                (format-prompt "Master file"
                                               (or default "this file"))
                                nil default)))
                    (cond ((string= name default)
                           default)
                          ((or
                            ;; Default `read-file-name' proposes and
                            ;; buffer visits a file.
                            (string= (expand-file-name name)
                                     (TeX-buffer-file-name))
                            ;; Default of `read-file-name' and
                            ;; buffer does not visit a file.
                            (string= name default-directory)
                            ;; User typed <RET> in an empty minibuffer.
                            (string= name ""))
                           t)
                          (t
                           (TeX-strip-extension
                            name (list TeX-default-extension) 'path))))))

           ;; We might already know the name.
           ((or (eq TeX-master t) (stringp TeX-master)))

           ;; Ask the user (but add it as a local variable).
           (ask (TeX-master-file-ask)))))

      (let ((name (if (stringp TeX-master)
                      TeX-master
                    my-name)))

        (if (TeX-match-extension name)
            ;; If it already has an extension...
            (if (equal extension TeX-default-extension)
                ;; Use instead of the default extension
                (setq extension nil)
              ;; Otherwise drop it.
              (setq name (TeX-strip-extension name))))

        (let* ((reg (TeX--clean-extensions-regexp t))
               (is-output-ext (and reg
                                   (or (string-match-p reg (concat "." extension))
                                       (string= "prv" extension))))
               (output-dir (and is-output-ext
                                (TeX--master-output-dir
                                 (file-name-directory name)
                                 nondirectory))))
          (if output-dir
              (setq name (concat output-dir (file-name-nondirectory name)))
            ;; Remove directory if needed.
            (if nondirectory
                (setq name (file-name-nondirectory name)))))
        (if extension
            (concat name "." extension)
          name)))))