mikutterの最新の情報は、mikutter blogに引っ越しました。

2011年11月7日月曜日

プラグインが提供する設定項目とUI

プラグインを作っていると、設定を保存したいことが出てきます。ただの数字一つを保存するために、いちいちファイルに保存するのは非常にアレです。

設定値の保存と読み込み

そんなときは、UserConfigを使いましょう。以下のように使えば、mikutterの設定ファイルに設定を書き込めます。

UserConfig[:conftest_value] = 1

また、読み込みはこう書きます。

UserConfig[:conftest_value] # => 1

これは、全てのプラグインで共通なので、設定のキーの名前は、「プラグイン名_キー名」とするのが暗黙のルールみたいになってます。上の例の場合conftestプラグインですね。

手軽ですが、これをプラグイン間通信のために使わないでください。数少ない例外としては、表示の設定なんかは、設定用のプラグインが保存して、レンダリングするプラグインがその設定値を読みますが、そのあたりの裁量は空気を読みましょう。ベターな方法は、プラグインフィルタを使う方法ですが、まだ記事を書いてなかったので近いうちに書きます。すみません。

ユーザに設定させる

ユーザに設定してもらいたい項目が出てくることがあります。そんなとき、設定タブにプラグインの設定が追加できたら便利ですね。
mikutterでは、後から入れたプラグインが設定画面を新しく作ることができるようになっています。
以下は「表示設定」の設定画面を表示するプラグインです。先にいっておきますが、これが0.0.4ではちょっとマシになりました。ナウいやりかたは後述します。



なんかまーやりたいことはわからないでもないけど、ちょっと大きいですね。あとRubyらしくないと思う人も居ると思います。
0.0.4からは、プラグインの定義中で、settings do ... end の中に、設定項目を書くことができるようになりました。



ずいぶんすっきりしましたね。
この方法のメリットは、

  • ラベルと設定値と、最低限のUIの指定(候補から選択、キーボードで入力、ON/OFF等)だけになっている
  • RubyGtkを使わないので、実装が変わっても、RubyGTKを知らなくても簡単に書ける
とかがあります。

settings内で使えるメソッドの一覧は、core/addon/settings/builder.rbで定義されています。rdocあると思ったんだけど、プラグインなのでrdoc生成してません。コメント読んでください。

基本的には、第一引数がラベル名で、第二引数がUserConfigのキーです。ユーザが変更したら直ちに値がセットされます。

余談ですが、こういう適当にかいてることを、Wikiにまとめようと昨日あたりから動き出しました。だからもうちょっと丁寧な説明がまとめられるかもしれません。
そういうでかいマニュアルあまり書いたことが無いので、1分でわかるiPhoneアプリ開発みたいな本適当に読んでパクろうかなぁ