[Haskell] Re: lhs2TeX-friendly emacs mode?

Nils Anders Danielsson nad at cs.chalmers.se
Tue Apr 18 07:23:18 EDT 2006


On Mon, 17 Apr 2006, "Conal Elliott" <conal at 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



More information about the Haskell mailing list