操作
提案 #1578
未完了Emacsのfaceのように継承構造を持ったフォント・配色の設定機能が欲しい
プラグイン名:
ブランチ:
説明
動機¶
Mastodon, Twitter, 他…といったように多くのWorldが存在すると、フォントや配色の設定をいくつも変更しなければならず、面倒です。
何かしら、まとめて設定できる仕組みがあってほしい。
提案¶
Emacsの Face のように、継承構造を持ったスタイル設定を導入したいです。
説明上、このスタイル設定の定義情報について(Emacsから借用して) "Face" と呼ぶことにします。
さて、mikutterに当てはめて考えると、次のようなスタイル設定のツリーができるかなと想像しています。
* Default `-- Message |-- Mastodon Status `-- Twitter Tweet
このツリーは、クラスベースオブジェクト指向プログラミングの継承構造に近い振る舞いをします。
たとえばあるノードのフォントファミリー属性を得ようとした時、そのノードにおいて結果が未定義であれば親ノードに再帰的に問い合わせます。
また、ユーザーは設定を通して、各ノードに対して属性を上書きすることができます。
Default faceにフォントを設定すれば、あらゆるトゥートやツイートのフォントが一括で変更されます。
トゥートだけ色を変えたいのであれば、トゥートの設定だけを変える……ということもできますね。
Face | Layer | Font | Color | |
---|---|---|---|---|
Default | Default (Faceごとの既定値) | Sans 10 | #000000 |
|
User (ユーザー設定) | Noto Sans CJK JP 12 | ↓ | ||
Message | Default | ↓ | ↓ | |
User | ↓ | ↓ | ||
Mastodon Status | Default | ↓ | ↓ | |
User | ↓ | #303030 |
||
表示に使用される値 | Noto Sans CJK JP 12 | #303030 |
Faceの定義はプラグインのロードフェーズで登録されたDiva Modelからは自動生成を試みたいですね。
タイムライン表示対象に関しては、プラグイン側に追加の手間をかけたくないです。
一方、Subpartsを追加するようなプラグインに関しては、自分で新しいFaceを作成することになると思います。
この際、コアで提供するFaceの中から役割の近いものを継承元として選んでもらうことで、ユーザーの設定がなるべく尊重されるようにしてもらうのが理想です。
関連するチケット
操作