Done:0%プラグイン名:skinDescriptionTLで言っていた件です。下記仕様のユーザスキンの仕組みを提案します。(1)ユーザースキンディレクトリユーザースキンは~/.mikutter/skin/のサブディレクトリに格納する事にします。ユーザースキンディレクトリはUserConfig[:skin_dir]に相対パスで指定する事とします。設定画面はプラグインとして実装します。肝は前述のUserConfig[:skin_dir]の設定です。設定画面は複数インストールされたスキンから1つを選ぶI/Fを持ちます。現状は*.pngのあるディレクトリをユーザースキンディレクトリ候補としています。これは最近出てきたスキン「miq」をそのまま展開して使える様にと言うポリシーです。(miq/darkgray/64/*.pngとかそんな階層になってるので)でも、これだとWebでのプレビュー用pngを置いているディレクトリもピックアップされるのでイマイチです。ディレクトリ構成を決めてしまってもいいかも知れません。ユーザースキンの変更は再起動にて反映される様にします。(3)画像ファイルの優先度ユーザースキンは全画像を用意する必要は無く、存在しない画像はデフォルトのスキンが適用されます。それでもダメならデフォルトの画像(後述)を表示します。(4)プラグインへのSkinの解放miqでは一部のプラグインのアイコンも提供してくれています。プラグインもスキンの恩恵を受けられる様にしたいです。具体的にはSkin::get()にデフォルト画像を渡せる様にします。プラグインからはこんな感じに使います。第二引数がデフォルトの画像のパスです。"プラグイン自前のhoge.png”))ユーザースキンもしくはデフォルトスキンに該当する名前の画像があればそれを採用し、無ければプラグイン内蔵の画像を返す様にしたいなと。Skin.getの第二引数を省略した場合、従来通り、デフォルトスキンのnotfound.pngが適用されます。こんな感じで実働する物を作ってみましたので添付します。一度揉んで頂ければと思います。skinありがとうございます。実際に検証して、topicブランチを作成してみました。バグがあったので修正しています。(12/25リリース予定)にしましょう。コードと実際の挙動を見せてもらったうえで、簡単に思いを書いておきます。一行で言うと、(4)だけもう少しクオリティを高めたいと思いました。(1)ユーザースキンディレクトリ現状のスキン構造は外部提供を想定できていないので、別のディレクトリを作ることには賛成です。概ね賛成ですが、なんとか再起動無しに反映させたいなぁと思っています。策は一応あって、Gdk::Pixbufを書き換えてから、それを表示しているウィジェット(Gtk::Image等)に再描画イベントを送ってやると、表示されている画像が変わります。タイムラインに表示されるものは、上記の方法では更新できません。レンダリングが自前だからです。故にこれに関しては特に難しいことはありません。ダイナミックにスキンを変更するのは、まだ技術的な検証が不足しているけれど是非やりたいところです。この点に関しては俺がやりたいことなのでちょっとやってみます。もぐのさんもよかったら検証してみてもらえると有難いです(これに限りませんが、3.1リリース作業を優先しているので...)。ディレクトリ構造については、miqのあれは若干都合が悪いですね。この構造が良いと思った理由は(4)を参照してください。スキンはまだ恐らく1例しか作成されていないので、こちらが決めて従ってもらうというスタンスで良いかと思います。(image.png)標準プラグインが提供してるものをこれに併せて、例えばhome_timeline以下に入れるようなことはしようとは思いません。理由は、互換性のためです(抽出タブのアイコンに設定されているかもしれない)。(4)プラグインへのSkinの解放これは素晴らしいですね。Skin.getにフォールバック先の画像を指定するのはあまり美しくないと思いました。引数も第二引数も、「表示する画像」という、本質的には同じものを指定しているからです。スキン画像のフォールバック機能があるので、これを拡張して対応できたらより良いと思います。具体的には、サードパーティプラグインでは、例えば以下のように画像を呼び出しSkin.get("plugin_slug/image.png")画像の探索順序としては、「(ユーザが指定したスキン)→プラグインの提供するスキン→バニラ→(notfound)」という順番です。image.pngサードパーティスキンは、以下のようなファイルの配置でこれをオーバーライド出来るようにしてはどうでしょうか。image.pngいかがでしょうか。一点補足しておくと、上記構造では、プラグインが提供するスキンは、バニラや他のプラグインのスキンを書き換えることは想定してません。それができると、プラグインとしてスキンを配布できるようになりますが、一方でスキンの設定画面が大変なことになると思ったからです。プラグインはプラグイン、スキンはスキンという方針で考えています。まとめ¶プラグインのスキンは気に入りましたが、APIを前述のようにできたらと思いました伴って、ディレクトリ構成を見なおしてはどうでしょう。スキンのダイナミックな入れ替えは、主に私がやってみたいと思います。検討有り難うございます。概ね賛同頂けた様で安心しました。(4)のプラグインに対するスキンへのコメントをふまえ、私の意見を述べます。(1)ユーザスキンのディレクトリ構成のうち、プラグイン毎のディレクトリについて思いとしてはプラグイン特化のアイコンも標準機能のアイコンと同一階層に置きたいです。shiitake|-close.png|-image.png(某プラグインを想定したアイコン)実は拙作mikutter-datasource-searchとmikutter-search-utilsは共に「再読み込みボタン」を持っており、そのアイコンに同じ名前(reload.pngだっけ)を使っています。プラグインごとにディレクトリを分けた場合、スキン側で両方のプラグインに対してreload.pngを提供して貰う必要が生じます。新たに何かを再読み込みするプラグインを作った時にも対応が必要です。他のプラグインを想定したアイコンに便乗出来る仕組みであれば、UIの統一が図れて都合がいいと考えてます。(2)プラグインでのアイコンの取得についてプラグインアイコンのフォールバック先はほぼ100%自分自身だと思うので、指定を不要にしたいですね。するとスキンを取得する際に、呼び出し元のプラグインを特定する必要が出てきます。提案として、PluginにDSLを追加するのはどうでしょう。get_skin("teokure.png")endこうすればget_skin()は呼び出し元プラグインのスラッグが取得出来るので、スキンディレクトリの特定が可能かと。実装は、としぁさん提案のSkin.getを呼び出す形になると思います。coreでは従来通りSkin.get()を使う感じです。以上、どないでしょう。added暇だったのでプラグインのDSL部分を書いてみました。Skin.get()にはプラグインスラッグを渡すのではなく、フォールバック用の画像ファイルのあるディレクトリを渡す様にしました。プラグインスラッグ->プラグインのスキンディレクトリの変換はPlugin.skin_get()にやらせてます。併せて意図確認頂ければと思います。Okunoプラグインの画像を解決するDSLメソッド、素晴らしいですね。名前はget_skinよりskinのほうが好みです。最近、Rubyらしくない名前をつけてることが多いなと個人的に反省しているところなので...(ゲッタにget_とつけるのはあまりRubyらしくないですよね)。それで、今言うべきことではないですが、そもそも「スキン」より「テーマ」とか「リソース」のほうが響きが良い気がしているので、それに合わせてこのメソッド名も変えたいかなと思っています(Skin.getは互換性のために残します)。(1)ユーザスキンのディレクトリ構成のうち、プラグイン毎のディレクトリについて思いとしてはプラグイン特化のアイコンも標準機能のアイコンと同一階層に置きたいです。実は拙作mikutter-datasource-searchとmikutter-search-utilsは共に「再読み込みボタン」を持っており、そのアイコンに同じ名前(reload.pngだっけ)を使っています。名前の衝突は問題でしかないと思っていて、意図せず別の画像ファイルを上書きする可能性を懸念していました。一方でreloadのように、標準で存在しないが、スキンで提供されていると便利なものもありそうですね。いったメリットがあるなら、異なる画像ファイルが採用される危険性にはひとまず目を瞑っても良いかなと思いました(プラグイン開発者に、ファイル名にプレフィックスをつけてもらったりして回避してもらいましょう)。それで、ディレクトリ構成はやっぱりどんな構成でも再帰的に探索するというのは、無駄も多いし探索順序も判りづらいので、単一のディレクトリの中に入れることにしたいですね。ago諸々賛同ありがとうございます。メソッド名について異論ありません。(ゲッターと言うよりは動詞_名詞のstaticおじさん的発想でした。)スキンに新しい名前が振られる時についでに変更頂ければ。コア部分はこんな感じとして、次は設定画面の方をもうちょいマシにして行こうと思います。いるよ」ラベルの削除(実験成功期待しますv)・アイコンのプレビュー表示とか出来んかな出来次第このIssueに登録する感じで良いでしょうか。三連休の景気付けに設定画面改造してみました。