電子タバコ「DTターボ」シリーズ 販売館

[emacs] 今更mmm-modeをemacsに導入した。

このエントリーを含むはてなブックマークはてなブックマーク - [emacs] 今更mmm-modeをemacsに導入した。 Share on Tumblr Googleブックマークに追加 Bookmark this on Delicious このエントリをつぶやくこのWebページのtweets FriendFeedで共有

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の内容がおかしい事に気づき修正しました。。。
< とかが &lt; になっていなかった事が原因のようです。
大変申し訳ありません。

一個一個の内容はコメントに書いてある通り。
質問とかあればコメントしてくれれば返信しますよ。

Posted 木曜日, 2月 25th, 2010 under emacs.
  • > soichiさん
    すみません。僕の記述ミスで.emacsの設定部分がおかしくなっていました。
    修正しましたのでこちらで再度お試しくださいm(_ _)m
  • こんにちは。mmm-modeを導入を試みました。情報に感謝します。
    インストールと.emacs設定(コピペした)をしてもどうもmmm-modeが動作しているように見えません。

    Ubuntu8.04 Emacs23
    html-helper-mode + js2-mode
    で、html拡張子をもったファイルを開けばJavaScriptの部分が他とは独立して色が変わる、となるはずですよね?でも変わらない…

    考えられるのは元のフォントと背景色が干渉しているのでは、ということですが、なにかわかりますか?

    (set-face-background 'mmm-default-submode-face "gray15")
    この部分ですかね?

    関係ないですが、Emacsもまだまだ捨てたもんじゃないですね。ユーザーがたくさんいてうれしいですw
blog comments powered by Disqus