今までphp-modeでphpを書いていたのですが、最近になってhtmlタグとphpスクリプトが混在しているファイルを扱うようになりました。
そこでmmm-modeを導入したのですが、php-modeのインデント規則は引き継げるのですが、着色設定をどうしても引き継げません。
実現したいことは
htmlタグ->html-modeのインデント
phpスクリプト->php-modeのインデント+着色
です。
回答はできれば.emacsに書くEmacs Lispで書いていただけると助かります(が、必須ではありません)。
ちなみに設定の際に参考にしたURLは
http://bluestar.s32.xrea.com/text/php-mode.php
http://d.hatena.ne.jp/Tetsujin/20070430
です。
以上、よろしくお願いいたします。
着色設定というのは、おそらく font-lock によるハイライト表示機能のことをさしているのかと思いますが、mmm-mode にはその設定はありません。単にサブモード側の設定を呼び出しているだけですので、php-mode側の設定ができていない、もしくはどこかでエラーになっている可能性を疑ったほうがよいかと思います。
手元で簡単なPHPスクリプトを対象に試してみた限りでは、以下の設定だけであとは何も設定しなくとも、ハイライト表示できました(Emacs 21.3)。
(autoload 'php-mode "php-mode" "Mode for editing PHP files")
(require 'mmm-mode)
(require 'mmm-sample)
(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class nil "\\.php\\'" 'html-php)
いったん、mmm-modeをオフにしてみて、当該ファイルを php-mode として読み込んでみて、うまくハイライトされるか確認してみるとよいのではないかと思います。
また、M-x toggle-debug-on-error でエラー時にデバッグがかかるようにして、php-modeのサブモード設定時に途中でエラーになる箇所が出ていないか、確認してみるのもよいと思います。php-mode ではありませんが、mmm-modeでの呼び出し時に hook の実行エラーが出たことがあります。
これはColor-Mateですね。
使ったことはないのですが、これは全体的なカラーリング設定を決めるものだと解釈しております。
自分が実現したいことはhtmlタグはhtml-modeのインデント設定を"引継ぎ"、phpスクリプトはphp-modeのインデント設定と着色設定を"引き継ぐ"ことなのです。
着色設定というのは、おそらく font-lock によるハイライト表示機能のことをさしているのかと思いますが、mmm-mode にはその設定はありません。単にサブモード側の設定を呼び出しているだけですので、php-mode側の設定ができていない、もしくはどこかでエラーになっている可能性を疑ったほうがよいかと思います。
手元で簡単なPHPスクリプトを対象に試してみた限りでは、以下の設定だけであとは何も設定しなくとも、ハイライト表示できました(Emacs 21.3)。
(autoload 'php-mode "php-mode" "Mode for editing PHP files")
(require 'mmm-mode)
(require 'mmm-sample)
(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class nil "\\.php\\'" 'html-php)
いったん、mmm-modeをオフにしてみて、当該ファイルを php-mode として読み込んでみて、うまくハイライトされるか確認してみるとよいのではないかと思います。
また、M-x toggle-debug-on-error でエラー時にデバッグがかかるようにして、php-modeのサブモード設定時に途中でエラーになる箇所が出ていないか、確認してみるのもよいと思います。php-mode ではありませんが、mmm-modeでの呼び出し時に hook の実行エラーが出たことがあります。
確かにphp-modeのLispを見ればどのような着色設定なのかはわかると思います(自分が読みきるかはおいておいて)。
ただ、mmm-modeのsub modeにphp-modeの着色設定(もしくは近い設定)を書く方法がわかっていないというのが現状です。