2012年5月27日日曜日

雪見酒版ruby-modeでxyzzyのバッファ単位にタブ幅を指定できるようにする方法

今年に入り、ついにGitHubで開発が進んでいたxyzzyのリリース(0.2.2.236以降)が始まりました。
個人的にはUnicode周りの認識精度向上と、マルチモニタ環境でのウィンドウ位置保存バグの修正が嬉しいです。
有志の皆さんに感謝。

Rubyでコードを書くことが多い(たまにですが)僕としては、標準のモジュールにruby-modeが含まれてくれるとうれしいのですが、現在最新のリリース(0.2.2.238)にはまだ含まれていないので、服部さんのruby-modeを元に雪見酒さんが作成したruby-modeを使わせていただいています。

僕はちょっとしたスクリプトを書く程度なのでruby-modeの機能を使いこなしてはいないのですが、雪見酒版のruby-modeで困ったのがタブのインデント設定。
ドキュメントにある通り、服部版にあった *ruby-indent-column* が廃止され、共通設定のタブ幅((tab-columns) が返す値)を使うようになったのは良いのですが、共通設定とバッファのローカル設定が異なる場合が考慮されていないので(xyzzy 本体の 0.2.0.133 でも同様の問題が修正された形跡が……)、共通設定は互換性のためタブ幅を8としておき、Rubyプログラムを編集するバッファだけ自動でタブ幅を2や4にするといったことができないのです。

何とかならないかとマジメに調べてみたら、意外と簡単でした。
(オリジナルは ruby-mode100704.lzh より。表示幅の関係でコードの右端が切れている場合はこちらからご覧ください)

$ diff ruby-mode.l.orig ruby-mode.l366c366<                                       (insert " " (* level (tab-columns)))--->                                       (insert " " (* level (tab-columns (selected-buffer))))

これでバッファごとのタブ幅がインデントに反映されるようになるので、あとは .xyzzy に以下のような設定を追加すればOK。

(add-hook '*ruby-mode-hook* #'(lambda () (set-tab-columns 4 (selected-buffer))))

バッファローカルな tab-columns の考慮漏れだと思うので、雪見酒版にマージしていただけるとありがたいのだけど……。

2012年5月26日土曜日

2012年6月のコミックス

  • 4日 - バクマン。(19)
  • 8日 - 惡の華(6)
  • 8日 - 7SEEDS(22)
  • 8日 - アオバ自転車店(20)
  • 13日 - ちはやふる(17)
    • OIK. 様
    • まもなく収納を調達して本の類を整理するので、借りている漫画を返せると思います。(^^;
  • 20日 - ボクを包む月の光 「ぼく地球」次世代編(11)
  • 22日 - おきく振りかぶって(19)
  • 22日 - げんしけん(12) 二代目の参
  • 22日 - 宇宙兄弟(18)
  • 22日 - BLOOD ALONE(8)
  • 25日 - 咲 -Saki-(10)

2012年5月6日日曜日

2012年5月のコミックス

  • 2日 - バクマン。(18)
  • 2日 - テガミバチ(14)
    • リマインド用
  • 17日 - capeta(28)
  • 18日 - 絶対可憐チルドレン(30)
    • OIK. 様
  • 18日 - 最上の明医 ~ザ・キング・オブ・ニート~(9)
    • リマインド用
  • 23日 - きのう何食べた?(6)
    • HIRON様
  • 23日 - にこたま(4)
  • 25日 - 放浪息子(13)