From: SAITO Shukaku Date: 2001-08-29T15:34:32+09:00 Subject: [ruby-list:31151] Re: xemacs21 の html-mode で <% ... %> を注釈する方法? kaduさん、ご助言をありがとうございます。 At Tue, 28 Aug 2001 17:47:08 +0900, kadu wrote: > > 複数の major mode をひとつのバッファに混在できる > MMM Mode http://mmm-mode.sourceforge.net/ > というものを使えば、 > html-mode で <% 〜 %> 内を ruby-mode で編集することが出来ます。 いやぁ、別のモードを部分的に使えるのって面白いですね。サブモードを適用し ている範囲に色が付くので、区別しやすくなりますし。既存の定義をまねて、 eRuby用とヒアドキュメント用のサブモードを定義してみました。.emacsの該当 部分を文末に引用してます。 ただ、注釈にしてしまうのと違ってサブモード内の文字列を無視はしないようで、 下記のような例ではそれ以降の編集に影響しますが、そんな例はあまりなさそう なので大丈夫かな? バッファ自体のモードからは、サブモード内の文字列を完全に読み飛ばすように できればいいんですが...。 # 便利さに頼ってないで、自力で編集せい!と言われそうな気もします。^^; ●ruby-mode内の文字列をタグとみなす場合。 <% if dummy != '
' then %> ←この行はruby-mode。 ←C-c C-eでタグを入力できません。これ以降の字下げも乱れて...。 <% end %> ●ヒアドキュメント内の文字列を予約語とみなす場合。 10.times do print <<-EOL do it 10 times! ←ここから2行はtext-mode。 EOL end ←文字列中のdoに反応して字下げが...。 ●.emacsの該当部分 ;;; MMM Modeを設定します。 (require 'mmm-auto) ; eRuby用に、html-mode内でruby-modeを使えるようにします。 (mmm-add-classes '((eruby :submode ruby-mode :front "<%" :back "%>" :insert ((?c eruby nil @ "<%" @ " " _ " " @ "%>" @) (?e eruby nil @ "<%=" @ " " _ " " @ "%>" @))))) (add-hook 'html-mode-hook (lambda () (setq mmm-classes '(eruby)) (mmm-mode-on))) ; ヒアドキュメント用に、ruby-mode内でtext-modeを使えるようにします。 (mmm-add-classes '((ruby-heredoc :front "<<-\\([a-zA-Z0-9_-]+\\)" :front-offset (end-of-line 1) :back "~1$" :save-matches 1 :submode text-mode :insert ((?d ruby-heredoc "Here-document Name: " @ "<<" str _ "\n" @ "\n" @ str "\n" @)) ))) (add-hook 'ruby-mode-hook (lambda () (setq mmm-classes '(ruby-heredoc)) (mmm-mode-on))) ///// ------------------------------------------------------------------ -O-O- 斉藤 秀格 (SAITO Shukaku) @ PUGH (Palm Users Group in Hokkaido) _ E-Mail: master@shukaku.nu (ぱふ) URL: http://i.am/PUGH