ruby-mode for xyzzy 改変版 040408 Yukimi Sake yukimi_sake@mbi.nifty.com http://homepage3.nifty.com/Yukimi_Sake/ 服部さんのオリジナルを改変したruby-modeです。 最初にお断りしておきますが、この版の責任は全て私、雪見酒にあります。 不具合等の報告は全て標記のメールアドレスまでお願いします。 くれぐれも服部さんに直接メールを送ってご迷惑のかかることがないように ご注意ください。 また、あなたがこのソフトウエアを使用したことによって蒙った不利益につ いて、私も服部さんも、その他誰も、いかなる補償もしくは、損害賠償、そ の他あらゆる賠償行為の責務を負わないことを表明しておきます。あくまで も自己責任でご使用ください。 さて、堅い話はこれくらいにしておいて、服部さんのを以下のような仕様に 改変してあります。 (オリジナルのURLはこちら http://www.mirai.ne.jp/~gyo/ ) ruby-mode.l単体で以下のことができます。 1.RDコメントにも対応したキーワードの色つけ、ボールド表示 キーワードの色つけだけはxyzzyの組み込み機能をを使用していますが、 rdや、コメント、文字列、正規表現などの色つけなどは自前でシンタッ クスを解析しています。で、予約語はボールドにしています。 ただし、ヒアドキュメントと%リテラルは解析していません。 これらの中でコメント文字(#)やクォーテーション文字("'`)を使用する 時はエスケープ(\)してください。 (これへの対応は速度とのトレードオフになり、また私が使うことはほ とんどありませんから当面対応の予定はありません。が、要望が寄せ られれば検討はします。) 2.ちょっぴり賢いオートインデント これも自前でシンタックスを解析していますので、修飾子や一行中に 複数のインデント対象構文があっても正しくインデントします。です ので[TAB]だけでなく[ENTER]でもオートインデントするようにしまし た。 ただし、これもヒアドキュメント、%リテラルには対応していませんか ら、これらの中に制御対象構文があった場合はインデントが崩れます。 3.F1でHTMLHelp版のRubyリファレンスマニュアルが開くようにした。 http://elbereth-hp.hp.infoseek.co.jp/ruby.htmlから rubymanjp.chmを取ってきて、xyzzy\etc\に置いてください。 (今のところ1.6.8が最新のようですが、実用上は問題ないでしょう) なお原作のスクリプトは、服部さんのlisp用reference.lです。 4.スクリプトの実行 服部さんのオリジナルでは別ファイルでしたが、ruby-mode.lに取り 込みました。 即時実行と、引数付の二種類で、実行時の標準出力はRDE同様リアル タイムにテンポラリバッファ(*cmd*という名前)に表示されます。 なお、保存したファイルが対象ですので、実行前に保存してくださ い。テンポラリファイルを使うか、自動保存して実行したほうが 良いかは思案中です。 5.オートコンプリージョン SHIFT+SPCでxyzzy/etc/にあるキーワードファイルRubyに登録されて いる単語は補完することができます。 (キーバインド以外は、服部さんのオリジナルのままです) 6.GATESキーマップの追加 Windows標準のキーバインドでなきゃやだ、という向きには (load-library "Gates") した場合は実行関係と関数一覧はファンクションキーに割り付けまし た。(xyzzyの機能が制限されるので、あまりお勧めしませんが) 7.関数一覧 定義の深さによってインデントするようにしました。 (RDEのように1行そっくり表示するのも簡単ですが・・・ その方がいい?) 8.ruby-interaction-mode irbを利用したインタラクション(対話)マイナーモードです。 M-x ruby-interaction-mode またはC-c i (GatesではC-F5)でirbが 起動−トグルします。 で、C-jでバッファ上のスクリプトをirbに送りつけ、結果を*Result* バッファに表示します。 送り方は、"end"のある行では、トップレベルの定義をそっくり送り つけようとします。トップレベルの"end"でない場合はその旨メッセ ージを出して、何もしません。 "end"でない行では、一行をirbに送り、irbが実行します。 この場合irbが継続していると判断した場合は、プロンプト"==>"が 帰って来ませんから、式が終了する行まで逐次C-jを送ってください。 高速なキーリピートで、C-jを送りつづけたり、変なスクリプトを送 れば、irbが死にます。(汗) この場合は、あわてずに、C-c i (C-F5)を2回押してください。 あ、実行系のコマンドやインタラクションモードのためには、予め ruby.exe へのパスを通しておいてください。 Windows9XならAUTOEXEC.BATに、NT,2000,XPなら環境変数へ直接ですね。 (Meは知らない) ざっとこんなところですが、肝心の速度はかなり遅いです。私の メインマシン(Athron750/W2K)では大体2000行が、まともに使える 限界ですが、解析範囲を限定して高速化することは困難ではないので いずれ行うつもりです。(そうすると5.6千行まではOKになりそう) さて、インストール方法ですが、rbmode040408.lzh を展開して、 ruby-mode.l,ruby-mode.lcとruby-hilite.lをxyzzy\site-lisp\に 置いてください。でruby-mode.lをバイトコンパイルします。 ただし、コンパイル済みのruby-mode.lcを同梱してありますので そのままお使いになる方は、以下の手順は必要ありません。 手順は [ESC-x] byte-compile-file [ENTER] /xyzzy/site-lisp/ruby-mode.l [ENTER] これでディレクトリにruby-mode.lcができます。 これをやらないと遅くて到底使い物になりません。 ruby-hilite.lは強調表示の設定ファイルですのでバイトコンパイルの 必要はありません。こちらをいじると文字列や、コメントや、RDなどの 色使いを変えることができますので、自分の好みに変更してください。 キーワードファイル"Ruby"はxyzzy\etc\に置いてください。服部さんの と違って、必要最低限のキーワードしか作っていませんので、必要に応 じて追加するか、服部さんのオリジナルを使ってください。 あとは.xyzzy かsite-init.lに以下のスクリプトを追加してください。 なお、オリジナルのruby.lとの共存はできません。先にオリジナルを インストールしてある場合は該当行をコメントアウトしてください。 また、ruby-debug.lやruby-lister.l,ruby-doc.lは (require "ruby")を (require "ruby-mode")に変更すれば動くかもしれませんが、確認して ません。動作報告などを頂けるとありがたいです。 ==以下サンプル== ;(load-library "Gates");Gates が好きならファイルの先頭に (load-library "ruby-mode") (push '("\\.rb$" . ruby-mode) *auto-mode-alist*) ; インデント量を変える。nilの時はタブを挿入 ;(setq *ruby-indent-column* 2) 謝辞 すばらしい、エディタのようなもの(笑)を開発、公開してくださった 亀井哲也さん、ruby-modeはじめ数々のスクリプト公開や、xyzzyの普及 に貢献してくださっている服部昌司さん、そしてxyzzyコミュニティの 皆さん、どうもありがとうございます。 2004/04/08 雪見酒 変更履歴 2004/04/08 replace系コマンドがおかしくなっていたのを修正。 ruby-refreshコマンドを追加。query-replaeをキャンセル した場合など、ruby-modeがリフレッシュをサボった場合 の手動リフレッシュ用。C-c r GatesではS-F12 2004/03/23 run-scriptで、"Program Files"のようにスペースを含む パスにスクリプトファイルがあると、エラーになったのを 修正。 2004/03/08 when 直後の正規表現を認識しなかったのを修正。 2004/02/15 変更行で複数のコメント文字があると、その間の色がコメ ント色にならなかったのを修正。 run-scriptで、カレントディレクトリをちゃんとセットし ていなかったのを修正。 2004/02/05 シンボルの正規表現がおかしかったのを修正(ruby-hilite) run-scriptで、VisualuRubyのようにプロセスが長時間走る 場合、xyzzyがプロセス終了を検出できず、ハングアップ状 態になってしまう場合があったのを修正したつもり。 同、*cmd*バッファが空の場合、閉じるようにした。 2004/01/27 式展開でない"}"が書き込み行で文字列色になっていたのを 修正 2004/01/25 正規表現、?リテラルに対応 2004/01/21 rby-interaction-mode で、irbの起動方法を変更 ActiveScriptRuby以外でも起動するようにした 同、irbのリザルトにプロンプト"==>"をつけた 2004/01/12 式展開に対応 2004/01/05 オートインデントでエスケープ付のクォーテーション文字 の扱いをミスっていたのを修正 2004/01/04 $' $" $` の判定をミスっていたのを修正 2004/01/03 ruby-interaction-mode を追加 ruby-mode以外でもpost-buffer-modified-hook が実行され ていたのを修正 "="の直後のキーワードの認識がおかしかったのを修正 2003/12/30 改変版リリース 残件(大体こんな順番) ・高速化 ・ヒアドキュメント(速度次第だが、欲しい人、いる?) ・%リテラル(自分が使わないので、多分やらない)