[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/auctex 6b3cbea 32/78: Suggest to run Index when appropr
From: |
Tassilo Horn |
Subject: |
[elpa] externals/auctex 6b3cbea 32/78: Suggest to run Index when appropriate. |
Date: |
Mon, 19 Oct 2015 09:10:50 +0000 |
branch: externals/auctex
commit 6b3cbea3d456fb556f90413fa26fa1e34f5cb2d4
Author: Mosè Giordano <address@hidden>
Commit: Mosè Giordano <address@hidden>
Suggest to run Index when appropriate.
* tex-buf.el (LaTeX-idx-md5-alist, LaTeX-idx-changed-alist): New
variables.
(TeX-command-sequence): Call file function without optional
arguments.
(TeX-command-default): Suggest "Index" when appropriate.
(TeX-run-TeX): Store value of `LaTeX-idx-md5-alist'.
(TeX-run-index): New function.
(TeX-LaTeX-sentinel): Set `LaTeX-idx-changed-alist'.
(TeX-index-sentinel): New function.
* tex.el (TeX-command-list): Mention "makeindex" in "Index" help.
Suggested by Arash Esbati.
* doc/changes.texi: Mention ability to suggest makeindex when
needed.
* doc/todo.texi (Wishlist): Remove reference to makeindex.
---
ChangeLog | 18 +++++++
doc/changes.texi | 5 ++-
doc/todo.texi | 3 -
tex-buf.el | 149 +++++++++++++++++++++++++++++++++++++++++++++---------
tex.el | 3 +-
5 files changed, 148 insertions(+), 30 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index c412871..e1fa98a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
2015-09-07 Mos� Giordano <address@hidden>
+ * tex-buf.el (LaTeX-idx-md5-alist, LaTeX-idx-changed-alist): New
+ variables.
+ (TeX-command-sequence): Call file function without optional
+ arguments.
+ (TeX-command-default): Suggest "Index" when appropriate.
+ (TeX-run-TeX): Store value of `LaTeX-idx-md5-alist'.
+ (TeX-run-index): New function.
+ (TeX-LaTeX-sentinel): Set `LaTeX-idx-changed-alist'.
+ (TeX-index-sentinel): New function.
+
+ * tex.el (TeX-command-list): Mention "makeindex" in "Index" help.
+ Suggested by Arash Esbati.
+
+ * doc/changes.texi: Mention ability to suggest makeindex when
+ needed.
+
+ * doc/todo.texi (Wishlist): Remove reference to makeindex.
+
* doc/tex-ref.tex: Update copyright years.
Mention C-c C-a key binding.
diff --git a/doc/changes.texi b/doc/changes.texi
index 0a90934..14fc510 100644
--- a/doc/changes.texi
+++ b/doc/changes.texi
@@ -22,7 +22,7 @@ current section (or part, chapter, subsection, etc). See
@code{LaTeX-command-section} and
@code{LaTeX-command-section-change-level}.
@ifclear rawfile
-Also see the documentation at @xref{Starting a Command}.
address@hidden a Command}, for details.
@end ifclear
@item
@@ -42,6 +42,9 @@ style for error messages.
Indent @samp{\[...\]} math mode as a regular environment by default.
@item
+Now @AUCTeX{} suggests to run @command{makeindex} when appropriate.
+
address@hidden
@code{TeX-view-program-list} can contain, as third optional element of
each item, the name of the executable(s) needed to open the viewer.
diff --git a/doc/todo.texi b/doc/todo.texi
index 59b0f29..8025351 100644
--- a/doc/todo.texi
+++ b/doc/todo.texi
@@ -138,9 +138,6 @@ This default value for TeX-master could then be controled
with mapping
based on the extension.
@item
-Suggest @samp{makeindex} when appropriate.
-
address@hidden
Use index files (when available) to speed up @kbd{C-c C-m include
@key{RET}}.
diff --git a/tex-buf.el b/tex-buf.el
index c13a87e..07e54ef 100644
--- a/tex-buf.el
+++ b/tex-buf.el
@@ -336,6 +336,17 @@ This works only with TeX commands and if the
(defconst TeX-error-overview-buffer-name "*TeX errors*"
"Name of the buffer in which to show error list.")
+(defvar LaTeX-idx-md5-alist nil
+ "Alist of MD5 hashes of idx file.
+
+Car is the idx file, cdr is its md5 hash.")
+
+(defvar LaTeX-idx-changed-alist nil
+ "Whether the idx files changed.
+
+Car is the idx file, cdr is whether idx changed after LaTeX
+run.")
+
(defcustom TeX-check-engine t
"Whether AUCTeX should check the correct engine has been set before running
LaTeX commands."
:group 'TeX-command
@@ -642,7 +653,10 @@ omitted) and `TeX-region-file'."
TeX-command-sequence-command command))
(t
(setq cmd (TeX-command-default
- (funcall TeX-command-sequence-file-function nil t))
+ ;; File function should be called with nil `nondirectory'
+ ;; argument, otherwise `TeX-command-sequence' won't work in
+ ;; included files not placed in `TeX-master-directory'.
+ (funcall TeX-command-sequence-file-function))
TeX-command-sequence-command t)))
(TeX-command cmd TeX-command-sequence-file-function 0)
(when reset
@@ -685,28 +699,44 @@ omitted) and `TeX-region-file'."
(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
- (if (and TeX-PDF-via-dvips-ps2pdf
TeX-PDF-mode)
- "Dvips"
- TeX-command-Show)))
- (TeX-command-Show)))
+ (let ((command-next nil))
+ (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))
+ ((and
+ ;; Rational: makeindex should be run when final document is almost
+ ;; complete (see
+ ;;
http://tex.blogoverflow.com/2012/09/dont-forget-to-run-makeindex/),
+ ;; otherwise, after following latex runs, index pages may change due
+ ;; to changes in final document, resulting in extra makeindex and
+ ;; latex runs.
+ (member
+ (setq command-next
+ (TeX-process-get-variable
+ name
+ 'TeX-command-next
+ (if (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)
+ "Dvips"
+ TeX-command-Show)))
+ (list "Dvips" TeX-command-Show))
+ (cdr (assoc (expand-file-name (concat name ".idx"))
+ LaTeX-idx-changed-alist)))
+ "Index")
+ (command-next)
+ (TeX-command-Show))))
(defun TeX-command-query (name)
"Query the user for what TeX command to use."
@@ -928,7 +958,8 @@ run of `TeX-run-TeX', use
;; Save information in TeX-error-report-switches
;; Initialize error to nil (no error) for current master.
;; Presence of error is reported inside `TeX-TeX-sentinel-check'
- (let ((current-master (TeX-master-file)))
+ (let ((current-master (TeX-master-file))
+ (idx-file nil) (element nil))
;; the current master file is saved because error routines are
;; parsed in other buffers;
(setq TeX-error-report-switches
@@ -937,7 +968,22 @@ run of `TeX-run-TeX', use
;; reset error to nil (no error)
(setq TeX-error-report-switches
(plist-put TeX-error-report-switches
- (intern current-master) nil)))
+ (intern current-master) nil))
+
+ ;; Store md5 hash of the index file before running LaTeX.
+ (and (memq major-mode '(doctex-mode latex-mode))
+ (prog1 (file-exists-p
+ (setq idx-file (expand-file-name (concat file ".idx"))))
+ ;; In order to avoid confusion and pollution of
+ ;; `LaTeX-idx-md5-alist', remove from this alist all md5 hashes of
+ ;; the current index file. Note `assq-delete-all' doesn't work with
+ ;; string keys and has problems with non-list elements in Emacs 21
+ ;; (see file tex-site.el).
+ (while (setq element (assoc idx-file LaTeX-idx-md5-alist))
+ (setq LaTeX-idx-md5-alist (delq element LaTeX-idx-md5-alist))))
+ (with-temp-buffer
+ (insert-file-contents idx-file)
+ (push (cons idx-file (md5 (current-buffer))) LaTeX-idx-md5-alist))))
;; can we assume that TeX-sentinel-function will not be changed
;; during (TeX-run-format ..)? --pg
@@ -989,6 +1035,25 @@ run of `TeX-run-TeX', use
process
(TeX-synchronous-sentinel name file process))))
+(defun TeX-run-index (name command file)
+ "Create a process for NAME using COMMAND to compile the index file."
+ (let ((process (TeX-run-command name command file))
+ (element nil))
+ (setq TeX-sentinel-function 'TeX-index-sentinel)
+ ;; Same cleaning as that for `LaTeX-idx-md5-alist' in `TeX-run-TeX'.
+ (while (setq element
+ ;; `file' has been determined in `TeX-command-buffer', while
+ ;; this function has `TeX-master-directory' as
+ ;; `default-directory', then we have to expand `file' file-name
+ ;; in the same directory of `TeX-command-buffer'.
+ (assoc (with-current-buffer TeX-command-buffer
+ (expand-file-name (concat file ".idx")))
+ LaTeX-idx-changed-alist))
+ (setq LaTeX-idx-changed-alist (delq element LaTeX-idx-changed-alist)))
+ (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)))
@@ -1375,6 +1440,27 @@ Rerun to get mark in right position\\." nil t)
(t
(message "%s%s%s" name ": problems after " (TeX-current-pages))
(setq TeX-command-next TeX-command-default)))
+
+ ;; Check whether the idx file changed.
+ (let ((idx-file nil) (master nil))
+ (and (file-exists-p
+ (setq idx-file
+ (concat
+ (setq master
+ (with-current-buffer TeX-command-buffer
+ (expand-file-name (TeX-active-master)))) ".idx")))
+ ;; imakeidx package automatically runs makeindex, thus, we need to be
+ ;; sure .ind file isn't newer than .idx.
+ (TeX-check-files (concat master ".ind")
+ (list (file-name-nondirectory master)) '("idx"))
+ (with-temp-buffer
+ (insert-file-contents idx-file)
+ (not (equal
+ ;; Compare old md5 hash of the idx file with the new one.
+ (cdr (assoc idx-file LaTeX-idx-md5-alist))
+ (md5 (current-buffer)))))
+ (push (cons idx-file t) LaTeX-idx-changed-alist)))
+
(unless TeX-error-list
(run-hook-with-args 'TeX-after-TeX-LaTeX-command-finished-hook
(with-current-buffer TeX-command-buffer
@@ -1456,6 +1542,19 @@ Rerun to get mark in right position\\." nil t)
TeX-output-extension "pdf"))
(message "ps2pdf finished successfully. "))))
+(defun TeX-index-sentinel (_process _name)
+ "Cleanup TeX output buffer after compiling index."
+ (goto-char (point-max))
+ (cond
+ ((search-backward "TeX Output exited abnormally" nil t)
+ (message "Index failed. Type `%s' to display output."
+ (substitute-command-keys
+ "\\<TeX-mode-map>\\[TeX-recenter-output-buffer]")))
+ (t
+ (setq TeX-command-next TeX-command-default)
+ (message (concat "Index finished successfully. "
+ "Run LaTeX again to get index right.")))))
+
(defun TeX-command-sequence-sentinel (process string)
"Call the appropriate sentinel for the current process.
diff --git a/tex.el b/tex.el
index fa2c475..1c9b95b 100644
--- a/tex.el
+++ b/tex.el
@@ -156,7 +156,8 @@ If nil, none is specified."
: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")
+ ("Index" "makeindex %s" TeX-run-index nil t
+ :help "Run makeindex to create index file")
("Xindy" "texindy %s" TeX-run-command nil t
:help "Run xindy to create index file")
("Check" "lacheck %s" TeX-run-compile nil (latex-mode)
- [elpa] externals/auctex 0ac0fa8 57/78: Avoid searching with kpathsea in duplicate directories., (continued)
- [elpa] externals/auctex 0ac0fa8 57/78: Avoid searching with kpathsea in duplicate directories., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 48093fa 58/78: Use LaTeX-add-lengths for LaTeX-lengths., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 2da69ab 11/78: Add fontification for `\newcolumntype'., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex f4c5af9 37/78: Fix loading of polyglossia language style files., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 8359f08 39/78: Fix in Italian language polyglossia style file., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 0377238 31/78: Add TeX-compile-run-all to AUCTeX reference card., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 5dd4f21 35/78: Style file for polyglossia package., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 4810753 41/78: Add new style Alegreya.el., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 2b648fe 38/78: Remove one TODO in style/polyglossia.el., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 22c7d9f 27/78: Implement "run-all" for regions and sections, Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 6b3cbea 32/78: Suggest to run Index when appropriate.,
Tassilo Horn <=
- [elpa] externals/auctex a76afdf 49/78: Add abstract env only to classes defining it., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex a864241 55/78: Fixup space-before-tab git warned about., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 9b5827c 44/78: Fix typo in error message., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 3bb1cbe 56/78: Add font-latex specific prettify-symbols-compose-predicate, Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 8a2bd0b 68/78: Fix previous commit., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex e85968c 66/78: Support caption.el and some other fixes., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex cac89e9 63/78: Start supporting ConTeXt Mark IV., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex ac8d479 69/78: Support newfloat.el., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 320de59 53/78: Apply some fixes to caption.el., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex ce8981a 64/78: Fontify math environment, Tassilo Horn, 2015/10/19