MMM-mode 導入時のメモ
どうもいっす。
javascript の勉強はじめました。
初めて2日目にして,html の中にjavascriptを書くと,
そりゃ当然シンタクスハイライトしてくれないことに気付く。
なので,環境を整えましょうという狙い。
環境
- Windows XP SP3
- Meadow3
- cygwin
multi-mode を試すが,挫折。
mmmに比べて,更新日時が新しかったので,最初にこっちを入れてみた。
結果は惨敗。
サンプルのphp-htmlは半分くらいの完成度で動作しているが,
使えそうもない。
javascript用に設定してみたが,1割くらいの完成度で動作している。
つまり,使い物にならん。使い物にならんのは,ワタシのテクなしのせいでしょう。
おそらく。
なので,MMM-mode をチョイス
目標は,javascriptの所では,js2-mode。htmlのところでは,html-helper-mode。
cssとかxhtml?とかは必要になったら設定する予定。
注意。
Meadow の人は,MMM-mode は最初から付属しているので,
わざわざインストールする必要なっしんぐです。
なので,以下のダウンロードからインストールは無視するのがよろし。
ダウンロードして配置しましょう。
メインページ。
http://mmm-mode.sourceforge.net/
以下のぺージからダウンロード。
http://sourceforge.net/projects/mmm-mode/
適当なディレクトリで伸張。
% tar xzvf mmm-mode-0.4.8.tar.gz # ...いっぱい。 % cd mmm-mode-0.4.8 % EMACS=meadow ./configure # ...いっぱい。 % make # ...いっぱい # できあがり % ls --format=vertical AUTHORS acinclude.m4 mmm-auto.el mmm-mode.el mmm-utils.el COPYING aclocal.m4 mmm-auto.elc mmm-mode.elc mmm-utils.elc ChangeLog config.log mmm-class.el mmm-noweb.el mmm-vars.el FAQ config.status mmm-class.elc mmm-noweb.elc mmm-vars.elc INSTALL configure mmm-cmds.el mmm-region.el mmm.info Makefile configure.in mmm-cmds.elc mmm-region.elc mmm.info-1 Makefile.am elc-stamp mmm-compat.el mmm-rpm.el mmm.info-2 Makefile.in elisp-comp mmm-compat.elc mmm-rpm.elc mmm.texinfo NEWS install-sh mmm-cweb.el mmm-sample.el script README mdate-sh mmm-cweb.elc mmm-sample.elc stamp-vti README.Mason missing mmm-mason.el mmm-univ.el texinfo.tex TODO mkinstalldirs mmm-mason.elc mmm-univ.elc version.texi
- マニュアルをコピーしておきましょう。
info パスが通っている場所へinfoをコピーしておきます。
(てか,この3つのファイルだけでいいんだろうか?)
% cp mmm.*info* /usr/local/share/info # ちゃんと見られるかお試し。 % info mmm
Meadow 内からも確認しておくといいと思うよ。
- 本体を配置。
の前に,大変なことに気付いた。
Meadow には最初からmmm-modeが付いてきている!!
packages/lisp/mmm-mode にある!!
あわてない,あわてない。
おかしいとおもったんだよね。
info のエントリを追加していないのに見れるのは。
% mkdir ~/.emacs.d/mmm-mode % cp *.elc ~/.emacs.d/mmm-mode
というわけで,Meadow の人はここまでの手順は踏まないようにしましょう。
気付いた
どうもうまくいかんなぁと思って,ググっていたら,見つけた。
というか,js2.el に書いてあった。
対象部分を引用します。
;; Notes: ;;; 一部省略 ;; This mode does not yet work with "multi-mode" modes such as mmm-mode ;; and mumamo, although it could possibly be made to do so with some effort. ;; This means that js2-mode is currently only useful for editing JavaScript ;; files, and not for editing JavaScript within <script> tags or templates.
オレオレ翻訳をすると,
js2-mode は,まだ,mmm-mode や mumamo などの"マルチモード"と共存できません。 けど,頑張れば,動かんこともないかも。 つまり,js2-mode は,今のところ,JavaScript ファイル(要するに,.js ファイル)内で, javascriptを書くときのみに有用であって,scriptタグやらテンプレート内で javascriptを編集するのには,有用ではありませんよっと。
となります。
ガーン。
確かに動かそうとすると,失敗するし,syntax error というメッセージが
エコーエリアに表示されまくる。どこから来ているかはわからんが,
js2関係ということは確かだと思われます。
目標変更
mmm-mode を使って,scriptタグ内のjavascriptの編集には,
Karl Landstrom さん作の,javascript.el (javascript-mode) を使うことにします。
ダウンロード
下記URLから。
http://www.brgeight.se/downloads/emacs/javascript.el
ほいで,load-path が通っているところに配置しましょう。
ワタシは,~/.emacs.d です。
.emacs に設定を書きましょう。
まず,javascript-mode (javascript.el) 用。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; javascript-mode ;; javascript.el ;; http://www.brgeight.se/downloads/emacs/javascript.el ;; Just intended to be used in mmm-mode. (autoload 'javascript-mode "javascript" nil t) (defun my-javascript-mode-hook-func () (interactive) "Hook function for javascript-mode." (setq indent-tabs-mode nil) (setq javascript-indent-level 2) (local-set-key "\C-i" 'javascript-indent-line)) (add-hook 'javascript-mode-hook 'my-javascript-mode-hook-func)
まだまだ,\C-j の挙動とか,インデントの問題とか,スタイルの問題とか
あるけど,細かいところは後から足していく予定。
関数にしておくとこういう場合にも対応できるのでいいよね。
続いて,mmm-mode用。
これについては,マニュアルをささっと読んだけどもひとつ分からん。
実は,昔,phpのバイトをしていたときに使っていたのですが,
そんな時の記憶はとっくに消去されています。(oi
加えて,当時は,elisp についてまったくわかってなかったし。
ま,いいや。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; MMM-mode (require 'mmm-mode) ;; マニュアルによると,maybe が useful らしいけど ;; 頻繁に使わないので,手動でオンにすることにする。 ;; 手動でオンにするのは,M-x mmm-mode-on。 (setq mmm-global-mode nil) ;; 0, 1, or 2。詳細は,M-x describe-variable mmm-submode-decoration-level。 ;; 0 にしておけば,対象モードのバックグラウンドの色が変わらない。 (setq mmm-submode-decoration-level 0) ;; javascript embedded in html (mmm-add-classes '((html-javascript :submode javascript-mode :front "^<script.*javascript.*>$" :back "^</script>$"))) (mmm-add-mode-ext-class nil "\\.html$" 'html-javascript)
とりあえず,これだけで動くことを確認しました。
ひつこいようですが,細かいところはこれからon demandで追加していく予定。
試してみよう! スクリーンショットです
- 素の状態(html-helper-mode)
- mmm-mode をオンの状態。
- scriptタグに入って編集した状態。
シンタクスハイライトも効いているっぽいね。
モードラインにも,Javascriptとひょうじされているしね。
まとめ
- MMM-mode と js2-mode.el はそのままでは共存できない。
- htmlのsciprt内で,javascriptを書くのには,javascript-modeを使う。
お疲れ様でした。
お疲れちゃん!!
どうやら,js2-modeはインデントスタイルとか固定だよ,みたいなのを
見つけたので,もしかしたら,javascriptオンリの編集の際も,
javascript-modeを使用するかもね〜。