On Mon, 17 Apr 2006, "Conal Elliott" <conal@conal.net> wrote:
Does anyone on this list use mmm-mode for Haskell+LaTeX?
I do. The following code snippet (which should be cleaned up a little) from my .emacs makes the above combination work fairly well for me: ;;; mmm-mode (add-to-list 'load-path "~/install/usr/share/emacs/site-lisp/mmm-mode/" t) (require 'mmm-auto) ; The following expression was stolen from the Haskell Wiki, then ; modified extensively by me. (mmm-add-classes '((literate-haskell :classes (literate-haskell-bird literate-haskell-laTeX ) ) (literate-haskell-bird :submode literate-haskell-mode :front "^>" :include-front t :back "^[^>]\\|\\'" :include-back nil :insert ((?b insert-literate-haskell-bird-region nil @ ">" @ " " _ @ "\n" @ "\n")) ) (literate-haskell-laTeX :submode haskell-mode :front "^\\\\begin{code}\n" :include-front nil :back "^\\\\end{code}" :include-back nil :insert ((?l insert-literate-haskell-laTeX-region nil @ "\\begin{code}\n" @ _ @ "\\end{code}" @ "\n")) ) (literate-haskell-lhs2TeX :classes (literate-haskell-lhs2TeX-code literate-haskell-lhs2TeX-bird-code literate-haskell-lhs2TeX-bird-spec ; The following two modes cause mmm-parse-buffer to go ; into a loop for || and @@. ; literate-haskell-lhs2TeX-verb ; literate-haskell-lhs2TeX-inline ) ) (literate-haskell-lhs2TeX-code :submode haskell-mode :front "^\\\\begin{code}\\|^\\\\begin{spec}" :front-offset (end-of-line 1) :back "^\\\\end{code}\\|^\\\\end{spec}" :back-offset (beginning-of-line -1) ) (literate-haskell-lhs2TeX-bird-code :submode literate-haskell-mode :front "^> " :include-front true :back "^[^>]" :back-offset (beginning-of-line -1) ) ; literate-haskell-mode doesn't understand <... ; mmm-mode doesn't handle :back "$" :back-offset 0 very well. The ; keyboard bindings of the two modes aren't handled correctly. (literate-haskell-lhs2TeX-bird-spec :submode haskell-mode :front "^< " :back "^[^>]" :back-offset -1 ) (literate-haskell-lhs2TeX-verb :submode haskell-mode :front "@" :back "@" :back-offset -1 ) (literate-haskell-lhs2TeX-inline :submode haskell-mode :front "|" :back "|" :back-offset -1 ) ) ) (dolist (entry '((flyspell-prog-text-faces region) (flyspell-generic-check-word-p region) (haskell-literate region (haskell literate-haskell)) )) (add-to-list 'mmm-save-local-variables entry)) These variables are set by custom-set-variables: '(mmm-global-mode (quote maybe) nil (mmm-mode)) '(mmm-mode-ext-classes-alist (quote ((latex-mode "\\.lhs$" literate-haskell-lhs2TeX) (text-mode "\\.lhs$" literate-haskell))) nil (mmm-mode)) '(mmm-submode-decoration-level 2) -- /NAD