emacsで複数のメジャーモードを使いたい時がある。
HTML中のJavascriptとかHTML中のPHPとかHTML中のcssとか。
HTML自体はhtml-helper-modeでいじりたい。
だけど、HTML内のJavascriptはjs2-modeで書きたい。
HTML内のPHPなんて特にphp-modeで書きたい。
そんな時のためのmmm-mode(multiple major modesの略らしい)。
導入方法や設定は続きを。
導入方法
mmm-modeをダウンロード、展開
mmm-modeからtar.gzをダウンロード
そして展開
$ tar zxvf mmm-mode-0.4.8.tar.gz
$ cd mmm-mode-0.4.8/
mmm-modeをインストール
とりあえずconfigure
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for xemacs... emacs
checking for emacs... (cached) emacs
checking where .elc files should go... ${datadir}/emacs/site-lisp
checking for emacs version... 23.0
configure: creating ./config.status
config.status: creating Makefile
そんでmake
$ make
WARNING: Warnings can be ignored. :-)
if test emacs != no; then \
set x; \
list='mmm-auto.el mmm-class.el mmm-cmds.el mmm-compat.el mmm-cweb.el mmm-mason.el mmm-mode.el mmm-noweb.el mmm-region.el mmm-rpm.el mmm-sample.el mmm-univ.el mmm-utils.el mmm-vars.el'; for p in $list; do \
if test -f "$p"; then d=; else d="./"; fi; \
set x "$@" "$d$p"; shift; \
done; \
shift; \
EMACS=emacs /bin/bash ./elisp-comp "$@" || exit 1; \
else : ; fi
Loading 00debian-vars...
No /etc/mailname. Reverting to default...
Loading /etc/emacs/site-start.d/20apel.el (source)...
Loading /etc/emacs/site-start.d/50css-mode.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Skipping dictionaries-common setup for emacs-snapshot
Loading /etc/emacs/site-start.d/50elscreen.el (source)...
Loading /etc/emacs/site-start.d/50html-helper-mode.el (source)...
Loading /etc/emacs/site-start.d/50php-mode.el (source)...
Loading /etc/emacs/site-start.d/50psvn.el (source)...
Loading `mmm-compat': old-style backquotes detected!
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-auto.elc
In mmm-match-region:
mmm-class.el:223:26:Warning: reference to free variable `front-delim'
mmm-class.el:257:54:Warning: reference to free variable `back-delim'
In mmm-match->point:
mmm-class.el:273:37:Warning: reference to free variable `front-match'
mmm-class.el:274:29:Warning: reference to free variable `back-match'
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-class.elc
In mmm-ify-by-class:
mmm-cmds.el:51:33:Warning: Function `remove-if' from cl package called at
runtime
mmm-cmds.el:52:41:Warning: Function `remove-if' from cl package called at
runtime
mmm-cmds.el:53:21:Warning: Function `remove-duplicates' from cl package called
at runtime
In mmm-insert-region:
mmm-cmds.el:254:34:Warning: Function `subsetp' from cl package called at
runtime
mmm-cmds.el:254:39:Warning: Function `set-difference' from cl package called
at runtime
In mmm-get-all-insertion-keys:
mmm-cmds.el:412:4:Warning: Function `remove-duplicates' from cl package called
at runtime
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-cmds.elc
In toplevel form:
mmm-compat.el:63:1:Warning: !! The file uses old-style backquotes !!
This functionality has been obsolete for more than 10 years already
and will be removed soon. See (elisp)Backquote in the manual.
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-compat.elc
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-cweb.elc
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-mason.elc
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-mode.elc
In mmm-noweb-regions:
mmm-noweb.el:157:21:Warning: mmm-submode-changes-in called with 4 arguments,
but accepts only 2
mmm-noweb.el:157:57:Warning: Function `maplist' from cl package called at
runtime
In end of data:
mmm-noweb.el:410:27:Warning: the following functions are not known to be
defined: mmm-name-at, mmm-names-alist, mmm-syntax-region
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-noweb.elc
In mmm-clear-overlays:
mmm-region.el:473:4:Warning: `mapcar' called for effect; use `mapc' or
`dolist' instead
In mmm-update-mode-info:
mmm-region.el:526:47:Warning: `font-lock-defaults-alist' is an obsolete
variable (as of Emacs 21.1); use `font-lock-defaults' instead.
In mmm-add-hooks:
mmm-region.el:589:4:Warning: `make-local-hook' is an obsolete function (as of
Emacs 21.1); not necessary any more.
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-region.elc
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-rpm.elc
In mmm-here-doc-get-mode:
mmm-sample.el:100:14:Warning: Function `some' from cl package called at
runtime
mmm-sample.el:112:19:Warning: Function `ldiff' from cl package called at
runtime
mmm-sample.el:117:19:Warning: Function `some' from cl package called at
runtime
mmm-sample.el:119:36:Warning: Function `some' from cl package called at
runtime
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-sample.elc
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-univ.elc
In mmm-format-matches:
mmm-utils.el:96:25:Warning: `string-to-int' is an obsolete function (as of
Emacs 22.1); use `string-to-number' instead.
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-utils.elc
In mmm-modename->function:
mmm-vars.el:571:27:Warning: Function `remove-if-not' from cl package called at
runtime
In mmm-get-mode-ext-classes:
mmm-vars.el:1017:36:Warning: Function `remove-if-not' from cl package called
at runtime
Wrote /home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8/mmm-vars.elc
touch elc-stamp
なんかwarningとか出てるけど「Warnings can be ignored. :-)」とか言ってるので無視しますw
という事でsudo権限でmake install
$ sudo make install
make[1]: ディレクトリ `/home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8' に入ります
make[1]: `install-exec-am' に対して行うべき事はありません.
/bin/bash ./mkinstalldirs /usr/local/info
/usr/bin/install -c -m 644 ./mmm.info /usr/local/info/mmm.info
/usr/bin/install -c -m 644 ./mmm.info-1 /usr/local/info/mmm.info-1
/usr/bin/install -c -m 644 ./mmm.info-2 /usr/local/info/mmm.info-2
/usr/bin/install -c -m 644 mmm-compat.el /usr/local/share/emacs/site-lisp/mmm-compat.el
/usr/bin/install -c -m 644 mmm-compat.elc /usr/local/share/emacs/site-lisp/mmm-compat.elc
/usr/bin/install -c -m 644 mmm-vars.el /usr/local/share/emacs/site-lisp/mmm-vars.el
/usr/bin/install -c -m 644 mmm-vars.elc /usr/local/share/emacs/site-lisp/mmm-vars.elc
/usr/bin/install -c -m 644 mmm-utils.el /usr/local/share/emacs/site-lisp/mmm-utils.el
/usr/bin/install -c -m 644 mmm-utils.elc /usr/local/share/emacs/site-lisp/mmm-utils.elc
/usr/bin/install -c -m 644 mmm-auto.el /usr/local/share/emacs/site-lisp/mmm-auto.el
/usr/bin/install -c -m 644 mmm-auto.elc /usr/local/share/emacs/site-lisp/mmm-auto.elc
/usr/bin/install -c -m 644 mmm-region.el /usr/local/share/emacs/site-lisp/mmm-region.el
/usr/bin/install -c -m 644 mmm-region.elc /usr/local/share/emacs/site-lisp/mmm-region.elc
/usr/bin/install -c -m 644 mmm-class.el /usr/local/share/emacs/site-lisp/mmm-class.el
/usr/bin/install -c -m 644 mmm-class.elc /usr/local/share/emacs/site-lisp/mmm-class.elc
/usr/bin/install -c -m 644 mmm-cmds.el /usr/local/share/emacs/site-lisp/mmm-cmds.el
/usr/bin/install -c -m 644 mmm-cmds.elc /usr/local/share/emacs/site-lisp/mmm-cmds.elc
/usr/bin/install -c -m 644 mmm-mode.el /usr/local/share/emacs/site-lisp/mmm-mode.el
/usr/bin/install -c -m 644 mmm-mode.elc /usr/local/share/emacs/site-lisp/mmm-mode.elc
/usr/bin/install -c -m 644 mmm-sample.el /usr/local/share/emacs/site-lisp/mmm-sample.el
/usr/bin/install -c -m 644 mmm-sample.elc /usr/local/share/emacs/site-lisp/mmm-sample.elc
/usr/bin/install -c -m 644 mmm-mason.el /usr/local/share/emacs/site-lisp/mmm-mason.el
/usr/bin/install -c -m 644 mmm-mason.elc /usr/local/share/emacs/site-lisp/mmm-mason.elc
/usr/bin/install -c -m 644 mmm-univ.el /usr/local/share/emacs/site-lisp/mmm-univ.el
/usr/bin/install -c -m 644 mmm-univ.elc /usr/local/share/emacs/site-lisp/mmm-univ.elc
/usr/bin/install -c -m 644 mmm-rpm.el /usr/local/share/emacs/site-lisp/mmm-rpm.el
/usr/bin/install -c -m 644 mmm-rpm.elc /usr/local/share/emacs/site-lisp/mmm-rpm.elc
/usr/bin/install -c -m 644 mmm-cweb.el /usr/local/share/emacs/site-lisp/mmm-cweb.el
/usr/bin/install -c -m 644 mmm-cweb.elc /usr/local/share/emacs/site-lisp/mmm-cweb.elc
/usr/bin/install -c -m 644 mmm-noweb.el /usr/local/share/emacs/site-lisp/mmm-noweb.el
/usr/bin/install -c -m 644 mmm-noweb.elc /usr/local/share/emacs/site-lisp/mmm-noweb.elc
make[1]: ディレクトリ `/home/pubuntu/svn/dotfiles/ubuntu/elisp/mmm-mode-0.4.8' から出ます
上記のスクリプト達をload-pathの通った所に置けばmake installしなくてもいいかも(未検証)。
emacsの設定
(require 'mmm-mode)
(require 'mmm-auto)
(require 'mmm-vars)
(require 'mmm-compat)
(setq mmm-global-mode 'maybe)
(setq mmm-submode-decoration-level 2)
;; mmm-mode の色設定
(set-face-background 'mmm-default-submode-face "gray15")
;; この辺りはめんどくさいので設定してない。
;; (set-face-background 'mmm-output-submode-face "LightBlue")
;; (set-face-background 'mmm-code-submode-face "LightGray")
;; (set-face-background 'mmm-comment-submode-face "LightYellow")
;; (set-face-background 'mmm-special-submode-face "Yellow")
;; HTML + PHP
(mmm-add-classes
'((html-php
:submode php-mode
:front "<\\?\\(php\\)?"
:back "\\?>")))
;; HTML + CSS
(mmm-add-classes
'((html-css
:submode css-mode
:front "<style [^>]*>?"
:back "</style>?")))
;; HTML + JavaScript
(mmm-add-classes
'((html-js
:submode js2-mode
:front "<script [^>]*>?"
:back "</script>?")))
;; mmm-mode を使うファイルたち
(mmm-add-mode-ext-class 'html-helper-mode "\\.s?html?\\'" 'html-js)
(mmm-add-mode-ext-class 'html-helper-mode "\\.s?html?\\'" 'html-css)
(mmm-add-mode-ext-class 'html-helper-mode "\\.ctp?\\'" 'html-php)
(mmm-add-mode-ext-class 'html-helper-mode "\\.ctp?\\'" 'html-css)
(mmm-add-mode-ext-class 'html-helper-mode "\\.ctp?\\'" 'html-js)
;; 開いてるバッファをmmm-modeでパースしなおし
(global-set-key [f8] 'mmm-parse-buffer)
[2010/03/07]
soichi氏のコメントで、.emacsの内容がおかしい事に気づき修正しました。。。
< とかが < になっていなかった事が原因のようです。
大変申し訳ありません。
一個一個の内容はコメントに書いてある通り。
質問とかあればコメントしてくれれば返信しますよ。


