Search code examples
emacsauctex

Run TeX-command-master without querying in emacs


The key combination C-c C-c in Emacs/AucTeX runs the function TeX-command-masterwhich decides what command should be run (latex, bibtex, view, or others) and then asks the user for confirmation before running the command.

I would like to bind this to a key (say F9) except without asking for confirmation. This way I would just press F9 and the most appropriate command would be run. How can I do that?


Solution

  • I have this snippet (taken from Emacswiki link below), which does every thing with out bothering me what to do now. I bound to C-c C-a

    ;;; http://www.emacswiki.org/emacs/TN
    (require 'tex-buf)
    (defun TeX-command-default (name)
      "Next TeX command to use. Most of the code is stolen from `TeX-command-query'."
      (cond ((if (string-equal name TeX-region)
                 (TeX-check-files (concat name "." (TeX-output-extension))
                                  (list name)
                                  TeX-file-extensions)
               (TeX-save-document (TeX-master-file)))
             TeX-command-default)
            ((and (memq major-mode '(doctex-mode latex-mode))
                  (TeX-check-files (concat name ".bbl")
                                   (mapcar 'car
                                           (LaTeX-bibliography-list))
                                   BibTeX-file-extensions))
             ;; We should check for bst files here as well.
             TeX-command-BibTeX)
            ((TeX-process-get-variable name
                                       'TeX-command-next
                                       TeX-command-Show))
            (TeX-command-Show)))
    
    ;;;  from wiki
    (defcustom TeX-texify-Show t
      "Start view-command at end of TeX-texify?"
      :type 'boolean
      :group 'TeX-command)
    
    (defcustom TeX-texify-max-runs-same-command 5
      "Maximal run number of the same command"
      :type 'integer
      :group 'TeX-command)
    
    (defun TeX-texify-sentinel (&optional proc sentinel)
      "Non-interactive! Call the standard-sentinel of the current LaTeX-process.
    If there is still something left do do start the next latex-command."
      (set-buffer (process-buffer proc))
      (funcall TeX-texify-sentinel proc sentinel)
      (let ((case-fold-search nil))
        (when (string-match "\\(finished\\|exited\\)" sentinel)
          (set-buffer TeX-command-buffer)
          (unless (plist-get TeX-error-report-switches (intern (TeX-master-file)))
            (TeX-texify)))))
    
    (defun TeX-texify ()
      "Get everything done."
      (interactive)
      (let ((nextCmd (TeX-command-default (TeX-master-file)))
            proc)
        (if (and (null TeX-texify-Show)
                 (equal nextCmd TeX-command-Show))
            (when  (called-interactively-p 'any)
              (message "TeX-texify: Nothing to be done."))
          (TeX-command nextCmd 'TeX-master-file)
          (when (or (called-interactively-p 'any)
                    (null (boundp 'TeX-texify-count-same-command))
                    (null (boundp 'TeX-texify-last-command))
                    (null (equal nextCmd TeX-texify-last-command)))
            (mapc 'make-local-variable '(TeX-texify-sentinel TeX-texify-count-same-command TeX-texify-last-command))
            (setq TeX-texify-count-same-command 1))
          (if (>= TeX-texify-count-same-command TeX-texify-max-runs-same-command)
              (message "TeX-texify: Did %S already %d times. Don't want to do it anymore." TeX-texify-last-command TeX-texify-count-same-command)
            (setq TeX-texify-count-same-command (1+ TeX-texify-count-same-command))
            (setq TeX-texify-last-command nextCmd)
            (and (null (equal nextCmd TeX-command-Show))
                 (setq proc (get-buffer-process (current-buffer)))
                 (setq TeX-texify-sentinel (process-sentinel proc))
                 (set-process-sentinel proc 'TeX-texify-sentinel))))))
    
    (add-hook 'LaTeX-mode-hook
              '(lambda ()
                 (define-key LaTeX-mode-map (kbd "C-c C-a") 'TeX-texify)))
    

    I have few more AUCTeX/RefTeX settings here, copy if you like.