For my job at Hulu this summer, I’ve been developing a RESTful web service and web based frontend using CherryPy and Mako Templates. Since Mako uses a mix of its own syntax, HTML and Python, syntax highlighting won’t work out of the box in Emacs. Enter MMM (Multiple Major Mode) Mode, which allows for multiple Emacs major modes within one buffer, and MMM-Mako Mode which provides support for Mako files using MMM. Getting these set up was somewhat problematic, so I’m going to document the process for anyone else trying to get these working.
(I assume python-mode is already working)
- Download and untar MMM Mode from http://sourceforge.net/projects/mmm-mode/files/. I’m using version 0.4.8.
- Make and install MMM Mode. You need to specify where your Emacs is installed. I use Gnu Emacs 23, which I have installed in the
/Applications
directory.EMACS='/Applications/Emacs.app/Contents/MacOS/Emacs' ./configure make sudo make install
The elisp files were installed to
/usr/local/share/emacs/site-lisp
in my case. You may need to add this directory to the Emacs load path. You will also need to tell Emacs to load the module. I added this to my .emacs:(add-to-list 'load-path "/usr/local/share/emacs/site-lisp") (require 'mmm-auto) (setq mmm-global-mode 'maybe)
Make sure it installed correctly by opening up Emacs and typing
M-x mmm-mode
to turn on MMM-Mode. - Now you’ll want to download MMM-Mako from https://bitbucket.org/pjenvey/mmm-mako/downloads. Follow instructions as in the README, pointing Emacs to the
mmm-mako.el
file. I added to my.emacs
:(add-to-list 'auto-mode-alist '("\\.mako\\'" . html-mode)) (mmm-add-mode-ext-class 'html-mode "\\.mako\\'" 'mako)
- At this point, everything is configured for MMM-Mako, and opening a
.mako
file should enable MMM-Mode. If you open a file with both Python and HTML, however, you will probably see an error:mmm-format-string: Wrong type argument: stringp, (sgml-xml-mode "XHTML" "HTML")
A bug report explains why this is happening in Emacs 23 and offers a fix. Find the
mmm-utils.el
file from your MMM-Mode installation and apply the patch from the bug report, or edit it by hand.sudo patch /usr/local/share/emacs/site-lisp/mmm-utils.el fix_mmm-format-string.diff
You’ll want to byte-compile the modified file, so open up Emacs again and type
M-x byte-compile-file
and provide it with the location of yourmmm-utils.el
file. You may need to do this with root privileges depending on where you installed the MMM-Mode files.
At this point you should have a fully functioning MMM-Mako Mode.
All the additions to my .emacs
file:
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp") (require 'mmm-auto) (setq mmm-global-mode 'maybe) (load "src/mmm-mako.el") (add-to-list 'auto-mode-alist '("\\.mako\\'" . html-mode)) (mmm-add-mode-ext-class 'html-mode "\\.mako\\'" 'mako)