Mercurial > emacs
changeset 16807:f8d567e52662
(tex-region): Correctly handle possible
overlap between first line, header, and region.
New local var ALREADY-OUTPUT makes this general.
Write tex-trailer directly as a string; get rid of temp-buffer.
Make tex-out-file include the .tex suffix.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 02 Jan 1997 01:30:36 +0000 |
parents | 9694822642a7 |
children | aac35896dd04 |
files | lisp/textmodes/tex-mode.el |
diffstat | 1 files changed, 36 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/textmodes/tex-mode.el Thu Jan 02 00:53:34 1997 +0000 +++ b/lisp/textmodes/tex-mode.el Thu Jan 02 01:30:36 1997 +0000 @@ -995,15 +995,14 @@ (tex-start-shell)) (or tex-zap-file (setq tex-zap-file (tex-generate-zap-file-name))) - (let* ((temp-buffer (get-buffer-create " TeX-Output-Buffer")) - ; Temp file will be written and TeX will be run in zap-directory. - ; If the TEXINPUTS file has relative directories or if the region has - ; \input of files, this must be the same directory as the file for - ; TeX to access the correct inputs. That's why it's safest if - ; tex-directory is ".". - (zap-directory + ;; Temp file will be written and TeX will be run in zap-directory. + ;; If the TEXINPUTS file has relative directories or if the region has + ;; \input of files, this must be the same directory as the file for + ;; TeX to access the correct inputs. That's why it's safest if + ;; tex-directory is ".". + (let* ((zap-directory (file-name-as-directory (expand-file-name tex-directory))) - (tex-out-file (concat zap-directory tex-zap-file))) + (tex-out-file (concat zap-directory tex-zap-file ".tex"))) ;; Don't delete temp files if we do the same buffer twice in a row. (or (eq (current-buffer) tex-last-buffer-texed) (tex-delete-last-temp-files t)) @@ -1014,38 +1013,46 @@ (goto-char (point-min)) (forward-line 100) (let ((search-end (point)) - (hbeg (point-min)) (hend (point-min)) - (default-directory zap-directory)) + (default-directory zap-directory) + (already-output 0)) (goto-char (point-min)) - + ;; Maybe copy first line, such as `\input texinfo', to temp file. (and tex-first-line-header-regexp (looking-at tex-first-line-header-regexp) (write-region (point) - (progn (forward-line 1) (point)) + (progn (forward-line 1) + (setq already-output (point))) tex-out-file nil nil)) - ;; Initialize the temp file with either the header or nothing + ;; Write out the header, if there is one, + ;; and any of the specified region which extends before it. + ;; But don't repeat anything already written. (if (re-search-forward tex-start-of-header search-end t) - (progn + (let (hbeg) (beginning-of-line) (setq hbeg (point)) ;mark beginning of header (if (re-search-forward tex-end-of-header nil t) - (progn (forward-line 1) - (setq hend (point))) ;mark end of header - (setq hbeg (point-min))))) ;no header - (write-region (min hbeg beg) hend - (concat tex-out-file ".tex") nil nil) - (write-region (max beg hend) end (concat tex-out-file ".tex") t nil)) - (let ((local-tex-trailer tex-trailer)) - (set-buffer temp-buffer) - (erase-buffer) - ;; make sure trailer isn't hidden by a comment - (insert-string "\n") - (if local-tex-trailer (insert-string local-tex-trailer)) - (tex-set-buffer-directory temp-buffer zap-directory) - (write-region (point-min) (point-max) - (concat tex-out-file ".tex") t nil)))) + (let (hend) + (forward-line 1) + (setq hend (point)) ;mark end of header + (write-region (max (min hbeg beg) already-output) + hend + tex-out-file + (not (zerop already-output)) nil) + (setq already-output hend))))) + + ;; Write out the specified region + ;; (but don't repeat anything already written). + (write-region (max beg already-output) end + tex-out-file + (not (zerop already-output)) nil)) + ;; Write the trailer, if any. + ;; Precede it with a newline to make sure it + ;; is not hidden in a comment. + (if tex-trailer + (write-region (concat "\n" tex-trailer) nil + tex-out-file t nil)))) ;; Record the file name to be deleted afterward. (setq tex-last-temp-file tex-out-file) (tex-send-command tex-shell-cd-command zap-directory)