Index: latex.el =================================================================== RCS file: /cvsroot/auctex/auctex/latex.el,v retrieving revision 5.441 diff -u -r5.441 latex.el --- latex.el 3 Feb 2008 14:53:33 -0000 5.441 +++ latex.el 2 May 2008 21:00:10 -0000 @@ -612,12 +612,16 @@ marker)) (move-marker marker nil))))) +(defvar LaTeX-after-insert-env-hooks nil + "List of functions to be run at the end of `LaTeX-insert-environment'. +Each function is called with three arguments: the name of the +environment just inserted, the buffer position just before +\\begin and the position just before \\end.") + (defun LaTeX-insert-environment (environment &optional extra) "Insert LaTeX ENVIRONMENT with optional argument EXTRA." (let ((active-mark (and (TeX-active-mark) (not (eq (mark) (point))))) - (macrocode-p (and (eq major-mode 'doctex-mode) - (string-match "\\`macrocode\\*?\\'" environment))) - prefix content-start) + prefix content-start env-start env-end) (when (and active-mark (< (mark) (point))) (exchange-point-and-mark)) ;; Compute the prefix. (when (and LaTeX-insert-into-comments (TeX-in-commented-line)) @@ -663,7 +667,8 @@ (newline) (when prefix (insert prefix)))))) ;; Now insert the environment. - (if macrocode-p (insert "%") (when prefix (insert prefix))) + (when prefix (insert prefix)) + (setq env-start (point)) (insert TeX-esc "begin" TeX-grop environment TeX-grcl) (indent-according-to-mode) (when extra (insert extra)) @@ -673,7 +678,8 @@ (when prefix (insert prefix)) (newline)) (when active-mark (goto-char (mark))) - (if macrocode-p (insert "%") (when prefix (insert prefix))) + (when prefix (insert prefix)) + (setq env-end (point)) (insert TeX-esc "end" TeX-grop environment TeX-grcl) (end-of-line 0) (if active-mark @@ -682,8 +688,10 @@ (LaTeX-fill-region content-start (line-beginning-position 2))) (set-mark content-start)) (indent-according-to-mode)) - (save-excursion (beginning-of-line 2) (indent-according-to-mode))) - (TeX-math-input-method-off)) + (save-excursion (beginning-of-line 2) (indent-according-to-mode)) + (TeX-math-input-method-off) + (run-hook-with-args 'LaTeX-after-insert-env-hooks + environment env-start env-end))) (defun LaTeX-modify-environment (environment) "Modify current ENVIRONMENT." Index: style/beamer.el =================================================================== RCS file: /cvsroot/auctex/auctex/style/beamer.el,v retrieving revision 1.14 diff -u -r1.14 beamer.el --- style/beamer.el 3 Feb 2008 15:19:05 -0000 1.14 +++ style/beamer.el 2 May 2008 21:00:25 -0000 @@ -29,9 +29,31 @@ ;;; Code: +(defun LaTeX-beamer-after-insert-env (env start end) + "Do beamer-specific stuff after the insertion of an environment." + (when (and (TeX-member env LaTeX-verbatim-environments 'string-equal) + (save-excursion + (goto-char start) + (string-equal (LaTeX-current-environment) "frame"))) + (save-excursion + (when (re-search-backward "\\\\begin[ \t]*{frame}" nil t) + (let ((end-of-begin (match-end 0))) + (goto-char end-of-begin) + (while (forward-comment 1)) + (if (eq (char-after) (string-to-char LaTeX-optop)) + (progn + (forward-char) + (insert "fragile") + (unless (looking-at (concat "[ \t]*" LaTeX-optcl)) + (insert ","))) + (goto-char end-of-begin) + (insert "[fragile]"))))))) + (TeX-add-style-hook "beamer" (lambda () + (add-hook 'LaTeX-after-insert-env-hooks 'LaTeX-beamer-after-insert-env nil t) + (unless LaTeX-beamer-section-labels-flag (make-local-variable 'LaTeX-section-hook) (setq LaTeX-section-hook Index: style/doc.el =================================================================== RCS file: /cvsroot/auctex/auctex/style/doc.el,v retrieving revision 1.8 diff -u -r1.8 doc.el --- style/doc.el 3 Feb 2008 14:53:30 -0000 1.8 +++ style/doc.el 2 May 2008 21:00:25 -0000 @@ -40,6 +40,21 @@ (delete-region (line-beginning-position) (line-end-position)) (indent-according-to-mode)))) +(defun LaTeX-doc-after-insert-macrocode (env start end) + "Make sure the macrocode environment is properly formatted after insertion." + (when (TeX-member env '("macrocode" "macrocode*") 'string-equal) + (save-excursion + (goto-char end) + (skip-chars-backward " \t") + (when (bolp) + (insert "%") + (indent-according-to-mode)) + (goto-char start) + (skip-chars-backward " \t") + (when (bolp) + (insert "%") + (indent-according-to-mode))))) + (TeX-add-style-hook "doc" (function @@ -48,6 +63,8 @@ '("macrocode" current-indentation)) (add-to-list 'LaTeX-indent-environment-list '("macrocode*" current-indentation)) + (add-hook 'LaTeX-after-insert-env-hooks 'LaTeX-doc-after-insert-macrocode + nil t) (LaTeX-add-environments "theglossary" '("macrocode" LaTeX-env-no-comment)