branch: externals/auctex commit a07f43647eb3ed649d47a14bc6e1db181cd18a7b Author: Mosè Giordano <m...@gnu.org> Commit: Mosè Giordano <m...@gnu.org>
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'. --- ChangeLog | 32 ++++++++++ doc/auctex.texi | 14 ++++- doc/changes.texi | 7 ++- doc/quickstart.texi | 10 +++ doc/todo.texi | 13 +---- tex-buf.el | 171 ++++++++++++++++++++++++++++++++++++++++++++------- tex.el | 16 +++--- 7 files changed, 219 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index a5f6908..4edd55f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2015-08-31 Mos� Giordano <m...@gnu.org> + + * 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 <esb...@gmx.de> * 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}. + +@deffn Command TeX-update +@kindex 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. +@end 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. -@c Copyright (C) 1994-2002, 2004-2010, 2012-2014 Free Software +@c 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}. + +@item 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 +@AUCTeX{} 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. -@c Copyright (C) 2004-2006, 2008, 2009, 2013, 2014 Free Software +@c 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 Bib@TeX{}, MakeIndex and -(La)@TeX{}, until an error occurs or we are done. - -An alternative is to have an @samp{Update} command that ensures the -@samp{dvi} file is up to date. This could be called before printing and -previewing. - -@item 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: auctex-de...@gnu.org ;; 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