auctex-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[AUCTeX-diffs] GNU AUCTeX branch, master, updated. dbc87df41c22a68d98629


From: Mosè Giordano
Subject: [AUCTeX-diffs] GNU AUCTeX branch, master, updated. dbc87df41c22a68d98629c65653afa07cfb5e398
Date: Mon, 31 Aug 2015 16:06:39 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU AUCTeX".

The branch, master has been updated
       via  dbc87df41c22a68d98629c65653afa07cfb5e398 (commit)
       via  a07f43647eb3ed649d47a14bc6e1db181cd18a7b (commit)
      from  a85d7c62dde35869f0e86786d9e9620f333a2527 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit dbc87df41c22a68d98629c65653afa07cfb5e398
Author: Mosè Giordano <address@hidden>
Date:   Mon Aug 31 18:02:50 2015 +0200

    Generate PDF via dvips+ps2pdf.
    
    * tex-buf.el (TeX-previous-error): Delete point in error message.
    (TeX-command-default)
    (TeX-run-set-command): Take care of `TeX-PDF-via-dvips-ps2pdf'.
    (TeX-run-dvips, TeX-run-ps2pdf): New functions.
    (TeX-TeX-sentinel, TeX-TeX-sentinel-check, TeX-LaTeX-sentinel):
    Take care of `TeX-PDF-via-dvips-ps2pdf'.
    (TeX-dvips-sentinel, TeX-ps2pdf-sentinel): New functions.
    (TeX-parse-command, TeX-output-revert-buffer): Delete point in
    error message.
    
    * tex.el (TeX-command-list): Add "Dvips" and "Ps2pdf" entries.
    (TeX-expand-list): Take care of `TeX-PDF-via-dvips-ps2pdf'.
    (TeX-PDF-via-dvips-ps2pdf): New customizable and safe-local
    variable.
    (TeX-toggle-PDF-via-dvips-ps2pdf): New function.
    (TeX-mode-specific-command-menu-entries): Add "PDF via dvips +
    ps2pdf" entry.
    
    * doc/auctex.texi (Processor Options): Document
    `TeX-PDF-via-dvips-ps2pdf' and fix a typo.
    
    * doc/changes.texi: Mention `TeX-PDF-via-dvips-ps2pdf'.
    
    * doc/quickstart.texi (Processing Facilities): Mention
    `TeX-PDF-via-dvips-ps2pdf'.

diff --git a/ChangeLog b/ChangeLog
index 4edd55f..5057a0a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,31 @@
 2015-08-31  Mosè Giordano  <address@hidden>
 
+       * tex-buf.el (TeX-previous-error): Delete point in error message.
+       (TeX-command-default)
+       (TeX-run-set-command): Take care of `TeX-PDF-via-dvips-ps2pdf'.
+       (TeX-run-dvips, TeX-run-ps2pdf): New functions.
+       (TeX-TeX-sentinel, TeX-TeX-sentinel-check, TeX-LaTeX-sentinel):
+       Take care of `TeX-PDF-via-dvips-ps2pdf'.
+       (TeX-dvips-sentinel, TeX-ps2pdf-sentinel): New functions.
+       (TeX-parse-command, TeX-output-revert-buffer): Delete point in
+       error message.
+
+       * tex.el (TeX-command-list): Add "Dvips" and "Ps2pdf" entries.
+       (TeX-expand-list): Take care of `TeX-PDF-via-dvips-ps2pdf'.
+       (TeX-PDF-via-dvips-ps2pdf): New customizable and safe-local
+       variable.
+       (TeX-toggle-PDF-via-dvips-ps2pdf): New function.
+       (TeX-mode-specific-command-menu-entries): Add "PDF via dvips +
+       ps2pdf" entry.
+
+       * doc/auctex.texi (Processor Options): Document
+       `TeX-PDF-via-dvips-ps2pdf' and fix a typo.
+
+       * doc/changes.texi: Mention `TeX-PDF-via-dvips-ps2pdf'.
+
+       * doc/quickstart.texi (Processing Facilities): Mention
+       `TeX-PDF-via-dvips-ps2pdf'.
+
        * tex-buf.el: Update copyright year.
        (TeX-command-sequence-max-runs-same-command)
        (TeX-command-sequence-max-runs): New customizable variables.
diff --git a/doc/auctex.texi b/doc/auctex.texi
index ad1e951..c60d755 100644
--- a/doc/auctex.texi
+++ b/doc/auctex.texi
@@ -2907,6 +2907,33 @@ In particular, fine-tuning the page breaks should be 
done with source
 specials switched off.
 @end deffn
 
+Sometimes you are requested, by journal rules or packages, to compile
+the document into @acronym{DVI} output.  Thus, if you want a
address@hidden document in the end you can either use address@hidden engine,
+see below for information about how to set engines, or compile the
+document with @command{tex} and then convert to @acronym{PDF} with
address@hidden@command{ps2pdf} before viewing it.  The latter can be
+done automatically in @AUCTeX{} by setting the
address@hidden variable to a non-nil value.
+
address@hidden TeX-PDF-via-dvips-ps2pdf
+With @code{TeX-PDF-mode} set to non-nil, if
address@hidden is non-nil too, the document is compiled
+with @command{tex} (or @command{latex}) instead of @command{pdftex} (or
address@hidden).  When the document is ready, @kbd{C-c C-c} will
+suggest to run @command{dvips} and then @command{ps2pdf} in order to
+convert the @acronym{DVI} file to @acronym{PDF}.  When the @acronym{PDF}
+file is finally ready, the next suggested command will be to open the
+viewer.
+
+This option can also be set as a file local variable, in order to use
+the sequence @address@hidden@command{ps2pdf} on a
+per-document basis.
+
+Recall the whole sequence of @kbd{C-c C-c} commands can be replace by
+the single @kbd{C-c C-u}.
address@hidden defopt
+
 @AUCTeX{} also allows you to easily select different @TeX{} engines for
 processing, either by using the entries in the @samp{TeXing Options}
 submenu below the @samp{Command} menu or by calling the function
@@ -2963,7 +2990,7 @@ means there is no command available.
 @end defopt
 
 Some @LaTeX{} packages requires the document to be compiled with a
-specific engine.  Notably examples are fontspec and polyglossia
+specific engine.  Notable examples are fontspec and polyglossia
 packages, which require address@hidden and address@hidden engines.  If you try 
to
 compile a document which loads one of such packages and the set engine
 is not one of those allowed you will be asked to select a different
diff --git a/doc/changes.texi b/doc/changes.texi
index c2c4140..06471e7 100644
--- a/doc/changes.texi
+++ b/doc/changes.texi
@@ -30,6 +30,11 @@ Forward and backward search with Evince now also work when 
only a region
 of the document is compiled/viewed.
 
 @item
+With new option @code{TeX-PDF-via-dvips-ps2pdf} it is possible to
+compile a document to @acronym{DVI} and then convert it to @acronym{PDF}
+using @address@hidden before viewing it.
+
address@hidden
 New option @code{TeX-file-line-error} allows to select file:line:error
 style for error messages.
 
diff --git a/doc/quickstart.texi b/doc/quickstart.texi
index 0f9beeb..b50b044 100644
--- a/doc/quickstart.texi
+++ b/doc/quickstart.texi
@@ -268,6 +268,14 @@ toggles usage of Omega/lambda.
 
 @end table
 
+There is also another possibility: compile the document with
address@hidden (or @command{latex}) and then convert the resulting
address@hidden file to @acronym{PDF} using
address@hidden@command{ps2pdf} sequence.  If you want to go by this
+route, when @code{TeX-PDF-via-dvips-ps2pdf} variable is non-nil,
address@hidden will suggest you to run the appropriate command when you type
address@hidden C-c}.  For details, see @ref{Processor Options}.
+
 @subsection Debugging @LaTeX{}
 
 When @AUCTeX{} runs a program, it creates an output buffer in which it
diff --git a/tex-buf.el b/tex-buf.el
index 1bf6b5d..a341727 100644
--- a/tex-buf.el
+++ b/tex-buf.el
@@ -322,7 +322,7 @@ This works only with TeX commands and if the
          (TeX-parse-TeX (- arg) nil)
        ;; XXX: moving backward in the errors hasn't yet been implemented for
        ;; other parsing functions.
-       (error "Jumping to previous error not supported.")))))
+       (error "Jumping to previous error not supported")))))
 
 ;;; Command Query
 
@@ -522,8 +522,8 @@ without further expansion."
 (defun TeX-check-files (derived originals extensions)
   "Check if DERIVED is newer than any of the ORIGINALS.
 Try each original with each member of EXTENSIONS, in all directories
-in `TeX-check-path'. Returns true if any of the ORIGINALS with any of the
-EXTENSIONS are newer than DERIVED. Will prompt to save the buffer of any
+in `TeX-check-path'.  Returns true if any of the ORIGINALS with any of the
+EXTENSIONS are newer than DERIVED.  Will prompt to save the buffer of any
 ORIGINALS which are modified but not saved yet."
   (let (existingoriginals
         found
@@ -690,7 +690,9 @@ first run of the function and some variables need to be 
reset."
         (if LaTeX-using-Biber TeX-command-Biber TeX-command-BibTeX))
        ((TeX-process-get-variable name
                                   'TeX-command-next
-                                  TeX-command-Show))
+                                  (if (and TeX-PDF-via-dvips-ps2pdf 
TeX-PDF-mode)
+                                      "Dvips"
+                                    TeX-command-Show)))
        (TeX-command-Show)))
 
 (defun TeX-command-query (name)
@@ -873,7 +875,8 @@ Return the new process."
 (defun TeX-run-set-command (name command)
   "Remember TeX command to use to NAME and set corresponding output extension."
   (setq TeX-command-default name
-       TeX-output-extension (if TeX-PDF-mode "pdf" "dvi"))
+       TeX-output-extension
+       (if (and (null TeX-PDF-via-dvips-ps2pdf) TeX-PDF-mode) "pdf" "dvi"))
   (let ((case-fold-search t)
        (lst TeX-command-output-list))
     (while lst
@@ -957,6 +960,22 @@ run of `TeX-run-TeX', use
         process
       (TeX-synchronous-sentinel name file process))))
 
+(defun TeX-run-dvips (name command file)
+  "Create a process for NAME using COMMAND to convert FILE with dvips."
+  (let ((process (TeX-run-command name command file)))
+    (setq TeX-sentinel-function 'TeX-dvips-sentinel)
+    (if TeX-process-asynchronous
+        process
+      (TeX-synchronous-sentinel name file process))))
+
+(defun TeX-run-ps2pdf (name command file)
+  "Create a process for NAME using COMMAND to convert FILE with ps2pdf."
+  (let ((process (TeX-run-command name command file)))
+    (setq TeX-sentinel-function 'TeX-ps2pdf-sentinel)
+    (if TeX-process-asynchronous
+        process
+      (TeX-synchronous-sentinel name file process))))
+
 (defun TeX-run-compile (name command file)
   "Ignore first and third argument, start compile with second argument."
   (let ((default-directory (TeX-master-directory)))
@@ -1170,7 +1189,10 @@ errors or warnings to show."
        (TeX-parse-all-errors))
     (if (and TeX-error-overview-open-after-TeX-run TeX-error-list)
        (TeX-error-overview))
-    (setq TeX-command-next TeX-command-Show)))
+    (if (with-current-buffer TeX-command-buffer
+         (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+       (setq TeX-command-next "Dvips")
+      (setq TeX-command-next TeX-command-Show))))
 
 (defun TeX-current-pages ()
   "Return string indicating the number of pages formatted."
@@ -1211,7 +1233,10 @@ Return nil ifs no errors were found."
                                            'TeX-current-master))
                         t))
        t)
-    (setq TeX-command-next TeX-command-Show)
+    (if (with-current-buffer TeX-command-buffer
+         (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+       (setq TeX-command-next "Dvips")
+      (setq TeX-command-next TeX-command-Show))
     nil))
 
 (defun TeX-LaTeX-sentinel-has-warnings ()
@@ -1293,12 +1318,18 @@ Rerun to get outlines right" nil t)
        ((re-search-forward "^LaTeX Warning: Reference" nil t)
         (message "%s%s%s" name ": there were unresolved references, "
                  (TeX-current-pages))
-        (setq TeX-command-next TeX-command-Show))
+        (if (with-current-buffer TeX-command-buffer
+              (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+            (setq TeX-command-next "Dvips")
+          (setq TeX-command-next TeX-command-Show)))
        ((re-search-forward "^\\(?:LaTeX Warning: Citation\\|\
 Package natbib Warning:.*undefined citations\\)" nil t)
         (message "%s%s%s" name ": there were unresolved citations, "
                  (TeX-current-pages))
-        (setq TeX-command-next TeX-command-Show))
+        (if (with-current-buffer TeX-command-buffer
+              (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+            (setq TeX-command-next "Dvips")
+          (setq TeX-command-next TeX-command-Show)))
        ((re-search-forward "Package longtable Warning: Table widths have \
 changed\\. Rerun LaTeX\\." nil t)
         (message
@@ -1324,7 +1355,10 @@ Rerun to get mark in right position\\." nil t)
                                    ")"))))
           (message "%s" (concat name ": successfully formatted "
                                 (TeX-current-pages) add-info)))
-        (setq TeX-command-next TeX-command-Show))
+        (if (with-current-buffer TeX-command-buffer
+              (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+            (setq TeX-command-next "Dvips")
+          (setq TeX-command-next TeX-command-Show)))
        (t
         (message "%s%s%s" name ": problems after " (TeX-current-pages))
         (setq TeX-command-next TeX-command-default)))
@@ -1379,6 +1413,36 @@ Rerun to get mark in right position\\." nil t)
                      "Run LaTeX again to get citations right."))
     (setq TeX-command-next TeX-command-default))))
 
+(defun TeX-dvips-sentinel (_process _name)
+  "Cleanup TeX output buffer after running dvips."
+  (goto-char (point-max))
+  (cond
+   ((search-backward "TeX Output exited abnormally" nil t)
+    (message "Dvips failed.  Type `%s' to display output."
+            (substitute-command-keys
+              "\\<TeX-mode-map>\\[TeX-recenter-output-buffer]")))
+   (t
+    (if (with-current-buffer TeX-command-buffer
+         (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+       (setq TeX-output-extension "ps"
+             TeX-command-next "Ps2pdf"))
+    (message "Dvips finished successfully. "))))
+
+(defun TeX-ps2pdf-sentinel (_process _name)
+  "Cleanup TeX output buffer after running ps2pdf."
+  (goto-char (point-max))
+  (cond
+   ((search-backward "TeX Output exited abnormally" nil t)
+    (message "ps2pdf failed.  Type `%s' to display output."
+            (substitute-command-keys
+              "\\<TeX-mode-map>\\[TeX-recenter-output-buffer]")))
+   (t
+    (if (with-current-buffer TeX-command-buffer
+         (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode))
+       (setq TeX-command-next TeX-command-Show
+             TeX-output-extension "pdf"))
+    (message "ps2pdf finished successfully. "))))
+
 (defun TeX-command-sequence-sentinel (process string)
   "Call the appropriate sentinel for the current process.
 
@@ -1865,7 +1929,7 @@ If optional argument REPARSE is non-nil, reparse the 
output log."
 ;; be ignored, because `TeX-next-error' can call any of these functions.
 (defun TeX-parse-command (arg reparse)
   "We can't parse anything but TeX."
-  (error "I cannot parse %s output, sorry."
+  (error "I cannot parse %s output, sorry"
         (if (TeX-active-process)
             (process-name (TeX-active-process))
           "this")))
@@ -3135,7 +3199,7 @@ forward, if negative)."
           (TeX-command name (if (string-match "_region_" file)
                                 'TeX-region-file
                               'TeX-master-file))))
-    (error "Unable to find what command to run.")))
+    (error "Unable to find what command to run")))
 
 (provide 'tex-buf)
 
diff --git a/tex.el b/tex.el
index 630349c..0868d10 100644
--- a/tex.el
+++ b/tex.el
@@ -150,8 +150,12 @@ If nil, none is specified."
     ("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-command t t
+    ("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")
+    ("Ps2pdf" "ps2pdf %f" TeX-run-ps2pdf nil t
+     :help "Convert PostScript file to PDF")
     ("Index" "makeindex %s" TeX-run-command nil t :help "Create index file")
     ("Xindy" "texindy %s" TeX-run-command nil t
      :help "Run xindy to create index file")
@@ -445,8 +449,9 @@ string."
            (TeX-style-check LaTeX-command-style)))
     ("%(PDF)" (lambda ()
                (if (and (eq TeX-engine 'default)
-                        (or TeX-PDF-mode
-                            TeX-DVI-via-PDFTeX))
+                        (if TeX-PDF-mode
+                            (not TeX-PDF-via-dvips-ps2pdf)
+                          TeX-DVI-via-PDFTeX))
                    "pdf"
                  "")))
     ("%(PDFout)" (lambda ()
@@ -1923,6 +1928,20 @@ already established, don't do anything."
   :group 'TeX-command
   :type 'boolean)
 
+(defcustom TeX-PDF-via-dvips-ps2pdf nil
+  "Whether to produce PDF output through the (La)TeX - dvips - ps2pdf 
sequence."
+  :group 'TeX-command
+  :type 'boolean)
+(make-variable-buffer-local 'TeX-PDF-via-dvips-ps2pdf)
+(put 'TeX-PDF-via-dvips-ps2pdf 'safe-local-variable 'booleanp)
+
+(defun TeX-toggle-PDF-via-dvips-ps2pdf ()
+  "Toggle `TeX-PDF-via-dvips-ps2pdf'."
+  (interactive)
+  (setq TeX-PDF-via-dvips-ps2pdf (not TeX-PDF-via-dvips-ps2pdf))
+  (message (concat "TeX-PDF-via-dvips-ps2pdf: "
+                  (if TeX-PDF-via-dvips-ps2pdf "on" "off"))))
+
 (define-minor-mode TeX-interactive-mode
   "Minor mode for interactive runs of TeX."
   nil nil nil
@@ -4750,6 +4769,10 @@ Brace insertion is only done if point is in a math 
construct and
         :style toggle :selected TeX-PDF-mode
         :active (not (eq TeX-engine 'omega))
         :help "Use PDFTeX to generate PDF instead of DVI"]
+       [ "PDF via dvips + ps2pdf" TeX-toggle-PDF-via-dvips-ps2pdf
+        :style toggle :selected TeX-PDF-via-dvips-ps2pdf
+        :visible TeX-PDF-mode
+        :help "Compile with (La)TeX and convert to PDF with dvips + ps2pdf"]
        [ "Run Interactively" TeX-interactive-mode
         :style toggle :selected TeX-interactive-mode :keys "C-c C-t C-i"
         :help "Stop on errors in a TeX run"]

commit a07f43647eb3ed649d47a14bc6e1db181cd18a7b
Author: Mosè Giordano <address@hidden>
Date:   Mon Aug 31 16:11:15 2015 +0200

    Implement TeX-update.
    
    * tex-buf.el: Update copyright year.
    (TeX-command-sequence-max-runs-same-command)
    (TeX-command-sequence-max-runs): New customizable variables.
    (TeX-command-sequence-count-same-command)
    (TeX-command-sequence-count, TeX-command-sequence-last-command)
    (TeX-command-sequence-sentinel, TeX-command-sequence-command): New
    variables.
    (TeX-command-sequence): New function.
    (TeX-command-default): New function, stripped off from
    `TeX-command-query'.
    (TeX-command-query): Use `TeX-command-default'.
    (TeX-command-sequence-sentinel): New function.
    
    * tex.el (TeX-update): New function.
    (TeX-mode-map): Add key binding for `TeX-update'.
    (TeX-mode-specific-command-menu-entries): Add entry for
    `TeX-update'.
    
    * doc/auctex.texi: Update copyright year.
    (Starting a Command): Document `TeX-update'.
    
    * doc/changes.texi: Update copyright year.
    Mention `TeX-update'.
    
    * doc/quickstart.texi (Processing Facilities): Mention
    `TeX-update' and `TeX-error-overview'.
    
    * doc/todo.texi: Update copyright year.
    (Wishlist): Remove entry for `TeX-update'.

diff --git a/ChangeLog b/ChangeLog
index a5f6908..4edd55f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+2015-08-31  Mosè Giordano  <address@hidden>
+
+       * tex-buf.el: Update copyright year.
+       (TeX-command-sequence-max-runs-same-command)
+       (TeX-command-sequence-max-runs): New customizable variables.
+       (TeX-command-sequence-count-same-command)
+       (TeX-command-sequence-count, TeX-command-sequence-last-command)
+       (TeX-command-sequence-sentinel, TeX-command-sequence-command): New
+       variables.
+       (TeX-command-sequence): New function.
+       (TeX-command-default): New function, stripped off from
+       `TeX-command-query'.
+       (TeX-command-query): Use `TeX-command-default'.
+       (TeX-command-sequence-sentinel): New function.
+
+       * tex.el (TeX-update): New function.
+       (TeX-mode-map): Add key binding for `TeX-update'.
+       (TeX-mode-specific-command-menu-entries): Add entry for
+       `TeX-update'.
+
+       * doc/auctex.texi: Update copyright year.
+       (Starting a Command): Document `TeX-update'.
+
+       * doc/changes.texi: Update copyright year.
+       Mention `TeX-update'.
+
+       * doc/quickstart.texi (Processing Facilities): Mention
+       `TeX-update' and `TeX-error-overview'.
+
+       * doc/todo.texi: Update copyright year.
+       (Wishlist): Remove entry for `TeX-update'.
+
 2015-08-30  Arash Esbati  <address@hidden>
 
        * style/caption.el ("caption"): Add support for undocumented
diff --git a/doc/auctex.texi b/doc/auctex.texi
index 141afff..ad1e951 100644
--- a/doc/auctex.texi
+++ b/doc/auctex.texi
@@ -12,7 +12,7 @@ This manual is for @AUCTeX{}
 (version @value{VERSION} from @value{UPDATED}),
 a sophisticated TeX environment for Emacs.
 
-Copyright @copyright{} 1992-1995, 2001, 2002, 2004-2014
+Copyright @copyright{} 1992-1995, 2001, 2002, 2004-2015
 Free Software Foundation, Inc.
 
 @quotation
@@ -2700,6 +2700,18 @@ master file.  The command is then actually run on the 
region file.  See
 @code{TeX-command-region} for details.
 @end deffn
 
+It is also possible to compile automatically the whole document until it
+is ready with a single command: @code{TeX-update}.
+
address@hidden Command TeX-update
address@hidden C-c C-u
+(@kbd{C-c C-u}) Compile the current document until an error occurs or it
+is finished.  If compilation finishes successfully, run the viewer at
+the end.
address@hidden deffn
+
+Here are some relevant variables.
+
 @defopt TeX-region
 The name of the file for temporarily storing the text when formatting
 the current region.
diff --git a/doc/changes.texi b/doc/changes.texi
index 2178387..c2c4140 100644
--- a/doc/changes.texi
+++ b/doc/changes.texi
@@ -1,5 +1,5 @@
 @c This is part of the AUCTeX manual.
address@hidden Copyright (C) 1994-2002, 2004-2010, 2012-2014 Free Software
address@hidden Copyright (C) 1994-2002, 2004-2010, 2012-2015 Free Software
 @c Foundation, Inc.
 @c See file auctex.texi for copying conditions.
 @include macros.texi
@@ -12,6 +12,11 @@
 
 @itemize @bullet
 @item
+You can now run all commands needed to compile a document and then open
+the viewer with a single command: @code{TeX-update}, bound to @kbd{C-c
+C-u}.
+
address@hidden
 Commands such as LaTeX and View can now be executed conveniently on the
 current section (or part, chapter, subsection, etc).  See
 @code{LaTeX-command-section} and
diff --git a/doc/quickstart.texi b/doc/quickstart.texi
index 90076ce..0f9beeb 100644
--- a/doc/quickstart.texi
+++ b/doc/quickstart.texi
@@ -228,6 +228,12 @@ When no processor invocation is necessary anymore, 
@AUCTeX{} will
 suggest to run a viewer, or you can chose to create a PostScript file
 using @command{dvips}, or to directly print it.
 
+Actually, there is another command which comes in handy to compile
+documents: type @kbd{C-c C-u} (@code{TeX-update}) and @AUCTeX{} will
+compile the document for you until it is ready and then run the viewer.
+This is the same as issuing repeatedly @kbd{C-c C-c} and letting
address@hidden guess the next command to run.
+
 At this place, a warning needs to be given: First, although @AUCTeX{} is
 really good in detecting the standard situations when an additional
 @command{latex} run is necessary, it cannot detect it always.  Second,
@@ -278,6 +284,10 @@ may be repeated until all errors have been dealt with.  By 
pressing
 @AUCTeX{} should notify you of overfull and underfull boxes in addition
 to regular errors.
 
+If you have a recent version of GNU Emacs (24 or later), issue @kbd{M-x
+TeX-error-overview RET} to see a nicely formatted list of all errors and
+warnings reported by the compiler.
+
 If a command got stuck in a seemingly infinite loop, or you want to stop
 execution for other reasons, you can use @kbd{C-c C-k} (for ``kill'').
 Similar to @kbd{C-l}, which centers the buffer you are in around your
diff --git a/doc/todo.texi b/doc/todo.texi
index cd5b2de..59b0f29 100644
--- a/doc/todo.texi
+++ b/doc/todo.texi
@@ -1,5 +1,5 @@
 @c This is part of the AUCTeX Manual.
address@hidden Copyright (C) 2004-2006, 2008, 2009, 2013, 2014 Free Software
address@hidden Copyright (C) 2004-2006, 2008, 2009, 2013-2015 Free Software
 @c Foundation, Inc.
 @c See the file auctex.texi for copying conditions.
 @ifset rawfile
@@ -190,17 +190,6 @@ stuff.  Suggested by John Interrante
 @samp{<interran@@uluru.Stanford.EDU>}.
 
 @item
-Make features.
-
-A new command @code{TeX-update} (@kbd{C-c C-u}) could be used to create
-an up-to-date dvi file by repeatedly running address@hidden, MakeIndex and
-(La)@TeX{}, until an error occurs or we are done.
-
-An alternative is to have an @samp{Update} command that ensures the
address@hidden file is up to date.  This could be called before printing and
-previewing.
-
address@hidden
 Documentation of variables that can be set in a style hook.
 
 We need a list of what can safely be done in an ordinary style hook.
diff --git a/tex-buf.el b/tex-buf.el
index 3be47d7..1bf6b5d 100644
--- a/tex-buf.el
+++ b/tex-buf.el
@@ -1,6 +1,6 @@
 ;;; tex-buf.el --- External commands for AUCTeX.
 
-;; Copyright (C) 1991-1999, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: tex, wp
@@ -555,6 +555,114 @@ ORIGINALS which are modified but not saved yet."
           (setq found t)))
     found))
 
+(defcustom TeX-command-sequence-max-runs-same-command 4
+  "Maximum number of runs of the same command."
+  :type 'integer
+  :group 'TeX-command)
+
+(defcustom TeX-command-sequence-max-runs 12
+  "Maximum number of total runs."
+  :type 'integer
+  :group 'TeX-command)
+
+(defvar TeX-command-sequence-count-same-command 1
+  "Counter for the runs of the same command in `TeX-command-sequence'.")
+
+(defvar TeX-command-sequence-count 1
+  "Counter for the total runs of `TeX-command-sequence'.")
+
+(defvar TeX-command-sequence-last-command nil
+  "Last command run in `TeX-command-sequence'.")
+
+(defvar TeX-command-sequence-sentinel nil
+  "Sentinel for `TeX-command-sequence'.")
+
+(defvar TeX-command-sequence-command nil
+  "Command argument for `TeX-command-sequence'.
+
+It is set in `TeX-command-sequence' and used in
+`TeX-command-sequence-sentinel' to call again
+`TeX-command-sequence' with the appropriate command argument.")
+
+(defun TeX-command-sequence (command &optional reset)
+  "Run a sequence of TeX commands defined by COMMAND.
+
+The COMMAND argument may be
+
+  * nil: no command will be run in this case
+
+  * a string with a command from `TeX-command-list'
+
+  * a non-nil list of strings, which are commands from
+    `TeX-command-list'; the car of the list is used as command to
+    be executed in the first run of `TeX-command-sequence', the
+    cdr of the list will be passed to the function in the next
+    run, etc.
+
+  * a function name, returning a string which is command from
+    `TeX-command-list'; it will be funcall'd (without arguments!)
+    and used again in the next run of `TeX-command-sequence'.
+
+  * with any other value the function `TeX-command-default' is
+    used to determine the command to run, until a stopping
+    condition is met.
+
+This function runs at most
+`TeX-command-sequence-max-runs-same-command' times the same
+command in a row, and `TeX-command-sequence-max-runs' times in
+total in any case.  It ends when `TeX-command-Show' is the
+command to be run.
+
+A non-nil value for the optional argument RESET means this is the
+first run of the function and some variables need to be reset."
+  (if (null command)
+      (message "No command to run.")
+    (let (cmd process)
+      (cond
+       ((stringp command)
+       (setq cmd command
+             TeX-command-sequence-command nil))
+       ((listp command)
+       (setq cmd (pop command)
+             TeX-command-sequence-command command))
+       ((functionp command)
+       (setq cmd (funcall command)
+             TeX-command-sequence-command command))
+       (t
+       (setq cmd (TeX-command-default (TeX-master-file))
+             TeX-command-sequence-command t)))
+      (TeX-command cmd 'TeX-master-file 0)
+      (when reset
+       (setq TeX-command-sequence-count-same-command 1
+             TeX-command-sequence-count 1
+             TeX-command-sequence-last-command nil))
+      (cond
+       ;; Stop when the same command has been run
+       ;; `TeX-command-sequence-max-runs-same-command' times in a row.
+       ((>= TeX-command-sequence-count-same-command
+           TeX-command-sequence-max-runs-same-command)
+       (message "Stopping after running %S %d times in a row."
+                TeX-command-sequence-last-command
+                TeX-command-sequence-count-same-command))
+       ;; Stop when there have been `TeX-command-sequence-max-runs' total
+       ;; compilations.
+       ((>= TeX-command-sequence-count TeX-command-sequence-max-runs)
+       (message "Stopping after %d compilations." TeX-command-sequence-count))
+       ;; The command just run is `TeX-command-Show'.
+       ((equal command TeX-command-Show))
+       ;; In any other case continue: increase counters (when needed), update
+       ;; `TeX-command-sequence-last-command' and run the sentinel.
+       (t
+       (if (equal cmd TeX-command-sequence-last-command)
+           (setq TeX-command-sequence-count-same-command
+                 (1+ TeX-command-sequence-count-same-command))
+         (setq TeX-command-sequence-count-same-command 1))
+       (setq TeX-command-sequence-count (1+ TeX-command-sequence-count)
+             TeX-command-sequence-last-command cmd)
+       (and (setq process (get-buffer-process (current-buffer)))
+            (setq TeX-command-sequence-sentinel (process-sentinel process))
+            (set-process-sentinel process 'TeX-command-sequence-sentinel)))))))
+
 (defcustom TeX-save-query t
   "*If non-nil, ask user for permission to save files before starting TeX."
   :group 'TeX-command
@@ -562,29 +670,32 @@ ORIGINALS which are modified but not saved yet."
 
 (defvar TeX-command-history nil)
 
+(defun TeX-command-default (name)
+  "Guess the next command to be run on NAME."
+  (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))
+             ;; Want to know if bib file is newer than .bbl
+             ;; We don't care whether the bib files are open in emacs
+             (TeX-check-files (concat name ".bbl")
+                              (mapcar 'car
+                                      (LaTeX-bibliography-list))
+                              (append BibTeX-file-extensions
+                                      TeX-Biber-file-extensions)))
+        ;; We should check for bst files here as well.
+        (if LaTeX-using-Biber TeX-command-Biber TeX-command-BibTeX))
+       ((TeX-process-get-variable name
+                                  'TeX-command-next
+                                  TeX-command-Show))
+       (TeX-command-Show)))
+
 (defun TeX-command-query (name)
   "Query the user for what TeX command to use."
-  (let* ((default
-          (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))
-                      ;; Want to know if bib file is newer than .bbl
-                      ;; We don't care whether the bib files are open in emacs
-                      (TeX-check-files (concat name ".bbl")
-                                       (mapcar 'car
-                                               (LaTeX-bibliography-list))
-                                       (append BibTeX-file-extensions
-                                               TeX-Biber-file-extensions)))
-                 ;; We should check for bst files here as well.
-                 (if LaTeX-using-Biber TeX-command-Biber TeX-command-BibTeX))
-                ((TeX-process-get-variable name
-                                           'TeX-command-next
-                                           TeX-command-Show))
-                (TeX-command-Show)))
+  (let* ((default (TeX-command-default name))
          (completion-ignore-case t)
          (answer (or TeX-command-force
                      (completing-read
@@ -1268,6 +1379,22 @@ Rerun to get mark in right position\\." nil t)
                      "Run LaTeX again to get citations right."))
     (setq TeX-command-next TeX-command-default))))
 
+(defun TeX-command-sequence-sentinel (process string)
+  "Call the appropriate sentinel for the current process.
+
+If there are no errors, call back `TeX-command-sequence' using
+`TeX-command-sequence-command' as command argument, unless this
+variable is nil."
+  (with-current-buffer (process-buffer process)
+    (funcall TeX-command-sequence-sentinel process string)
+    (if (string-match "\\(finished\\|exited\\)" string)
+       (with-current-buffer TeX-command-buffer
+         (unless
+             (or
+              (plist-get TeX-error-report-switches (intern (TeX-master-file)))
+              (null TeX-command-sequence-command))
+           (TeX-command-sequence TeX-command-sequence-command))))))
+
 ;;; Process Control
 
 
diff --git a/tex.el b/tex.el
index 24971b8..630349c 100644
--- a/tex.el
+++ b/tex.el
@@ -1276,13 +1276,6 @@ restarting Emacs."
             (repeat :tag "List of executables" (string :tag "Name"))
             (const :tag "No executable" nil)))))
 
-;; XXX: Regarding a possibility to (manually) run an update command,
-;; one could support this through `TeX-view' by letting it temporarily
-;; set a variable which is checked with a predicate in the viewer
-;; selection.  If the check is positive, the update command is run
-;; instead of the normal viewer command.  Direct support through the
-;; View command would require a predicate which knows when an update
-;; has to be done.
 (defcustom TeX-view-program-selection
   (cond
    ((eq system-type 'windows-nt)
@@ -2050,6 +2043,10 @@ output files."
            (delete-file (concat master-dir file))))
       (message "No files to be deleted"))))
 
+(defun TeX-update ()
+  "Compile the current document until an error occurs or it is finished."
+  (interactive)
+  (TeX-command-sequence t t))
 
 ;;; Master File
 
@@ -4667,6 +4664,7 @@ Brace insertion is only done if point is in a math 
construct and
     (define-key map "\C-c\C-r" 'TeX-command-region)
     (define-key map "\C-c\C-b" 'TeX-command-buffer)
     (define-key map "\C-c\C-c" 'TeX-command-master)
+    (define-key map "\C-c\C-u" 'TeX-update)
     (define-key map "\C-c\C-k" 'TeX-kill-job)
     (define-key map "\C-c\C-l" 'TeX-recenter-output-buffer)
     (define-key map "\C-c^" 'TeX-home-buffer)
@@ -4763,7 +4761,9 @@ Brace insertion is only done if point is in a math 
construct and
        :help "Make \"Next Error\" show overfull and underfull boxes"]
        ["Debug Warnings" TeX-toggle-debug-warnings
        :style toggle :selected TeX-debug-warnings
-       :help "Make \"Next Error\" show warnings"])))
+       :help "Make \"Next Error\" show warnings"])
+      ["Compile and view" TeX-update
+       :help "Compile the document until it is ready and open the viewer"]))
    (let ((file 'TeX-command-on-current)) ;; is this actually needed?
      (TeX-maybe-remove-help
       (delq nil

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog           |   58 ++++++++++++
 doc/auctex.texi     |   43 ++++++++-
 doc/changes.texi    |   12 ++-
 doc/quickstart.texi |   18 ++++
 doc/todo.texi       |   13 +---
 tex-buf.el          |  257 ++++++++++++++++++++++++++++++++++++++++++++-------
 tex.el              |   45 +++++++--
 7 files changed, 387 insertions(+), 59 deletions(-)


hooks/post-receive
-- 
GNU AUCTeX



reply via email to

[Prev in Thread] Current Thread [Next in Thread]