提案 #1487
closed不必要な gtk plugin への依存関係を削除したい
Description
gtk (場合によってはgui) が無い環境でもそのまま使える、または使いたいプラグインはそれなりにありそうですが、あまり整理されていないように思います。
mastodon プラグインみたいに、依存がなければ修正なしに daemon 化して使えたのに… みたいなものが他にもないか?というのが動機です。
消せそうなら依存を消す作業をやるつもりです。
gtk プラグインを依存関係に入れているプラグイン¶
とりあえず30分くらいかけて眺めた結果。
対応済 | プラグイン | Gtk moduleへの参照 | 依存を消せそうか | 感想 |
---|---|---|---|---|
✓ | |
✓ | ✓ | defactivityはGUIに関係なく呼び出しが通ってほしい。tabは別プラグインで良さそうだし、簡単に分離できそう |
aspectframe | ✓ | なんでやろなあ(すっとぼけ) | ||
bugreport | ✓ | |||
console | ✓ | |||
✓ | |
✓ | ✓ | tab周りはGTK以外のToolkitにも流用できそうで、設定UIは別プラグイン化したいかも |
intent_selector | ✓ | |||
✓ | |
✓ | 簡単には整理できないですが、分けたい…… | |
modelviewer | ✓ | |||
✓ | |
✓ | ||
✓ | |
✓ | まったく依存してなくてビビった | |
quickstep | ✓ | |||
✓ | |
✓ | ✓ | Gtk::Clipboard 依存だけなので簡単そう |
search | ✓ | |||
settings | ✓ | DSLは使いたいが... | ||
shortcutkey | ✓ | |||
skin_setting_gtk | ✓ |
Related issues
Updated by toshi_a 初音 over 3 years ago
- Status changed from 分類待ち to 実装待ち
少なくとも書いてる範囲は賛成です。
大抵のプラグインは、Gtk依存部分を別プラグインにして、元プラグインにも依存させる形で切り出せるはずです(DSLを提供するsettingと、それをGtkで表現するsetting_gtk)。
settings はnativewidget DSLメソッドがあるので大変そう。何年もかけてちょっとずつ整理していますが、今やろうとするとどれくらい難しいのかはわからないです。
quickstep は、意図的にGtkに依存させています。quickstepはイベントやフィルタを用いたAPI定義を提供することが本質で、そのUIをGtkで実装したものに過ぎません。極端な話ほかのUIツールキットでGUIを再実装するなら、そのUIツールキット用のquickstepを実装します。
aspectframe, mastodon は、複数の機能が単一のプラグインにまとまってしまっているので、機能単位ごとにプラグイン化していく戦略が良さそうです。
(もちろんこのチケットではGtk依存機能の切り出しだけで良い)
Updated by Shibafu Midorino over 3 years ago
- Description updated (diff)
1回マークアップ失敗して全てが大きな文字になった…
activity¶
activity, activity_setting, activity_gtk に分割
extract¶
extract, extract_gtk に分割
mastodon¶
mastodon, mastodon_custom_post, mastodon_gtk, mastodon_setting に分割
openimg¶
openimg, openimg_gtk に分割
proxy¶
gtkへの依存関係を削除
quoted_message¶
clipboard_write event で置き換え、gtkへの依存関係を削除
Updated by Shibafu Midorino over 3 years ago
photo_support は、依存関係としてはgtk pluginとの関係を持っていませんが、実装上はgdk_pixbuf2 gemに依存しており実質的にgtkへの依存と見做せる状態です。
gemのAPIを使っている場所は1行だけなんですが、こんな風に決め打ってしまっても十分そうだと考えています。意見いただけませんか?
拡張子は GitHubのヘルプページ から拾って決め打ちました。
もう大したことないのでインラインにしています。
それによって無意味になった定数のほうは……保守的にするならこうですが、多分誰も使ってないんじゃないかなあという気も。
diff --git a/plugin/photo_support/photo_support.rb b/plugin/photo_support/photo_support.rb
index 7cacd2b6..8489082b 100644
--- a/plugin/photo_support/photo_support.rb
+++ b/plugin/photo_support/photo_support.rb
@@ -5,9 +5,11 @@ require 'httpclient'
require 'json'
module Plugin::PhotoSupport
- SUPPORTED_IMAGE_FORMATS = GdkPixbuf::Pixbuf.formats.flat_map{|f| f.extensions }.freeze
+ SUPPORTED_IMAGE_FORMATS = %w[jpeg jpg png gif].freeze
+ deprecate_constant :SUPPORTED_IMAGE_FORMATS
+
INSTAGRAM_PATTERN = %r{\Ahttps?://(?:instagr\.am|(?:www\.)?instagram\.com)/p/([a-zA-Z0-9_\-]+)/}
- GITHUB_IMAGE_PATTERN = %r<\Ahttps://github\.com/(\w+/\w+)/blob/(.*\.(?:#{SUPPORTED_IMAGE_FORMATS.join('|')}))\z>
+ GITHUB_IMAGE_PATTERN = %r<\Ahttps://github\.com/(\w+/\w+)/blob/(.*\.(?:jpe?g|png|gif))\z>
YOUTUBE_PATTERN = %r<\Ahttps?://(?:www\.youtube\.com/watch\?v=|youtu\.be/)(\w+)>
NICOVIDEO_PATTERN = %r<\Ahttps?://(?:(?:www|sp)\.nicovideo\.jp/watch|nico\.ms)/([sn][mo][1-9]\d*)>
Updated by toshi_a 初音 over 3 years ago
SUPPORTED_IMAGE_FORMATS
の扱いは、コメントに書いてくれたパッチでOKです。多分誰も使ってないですが、消すのはメジャーバージョンアップのときにしたいです。
Updated by Shibafu Midorino over 3 years ago
とりあえず現時点までの作業成果で、Mastodonをsubscribeするmikutterdをだいぶ簡単に作れるくらいまで進みました。
あと残ってるものはこんな感じかと。
リストアップできてないものも考慮すると、この作業って #1380 と被ってきますね。
やれそう/やりたい¶
- settings
- shortcutkey (rel. 機能 #1386: Shortcut Keyの設定に、FormDSLのlistviewを使う)
一応やれそうだが、あまり重要でない¶
- aspectframe
- bugreport
放置¶
- console
- intent_selector
- modelviewer
- quickstep
- search
- skin_setting_gtk
Updated by Shibafu Midorino over 3 years ago
- Status changed from 実装待ち to レビュー待ち
- ブランチ set to topic/1487-remove-gtk-depend
一旦ここまでで作業を切って、レビューをお願いしたいと思います。変更前と同様に動けばオッケーですかね。
Updated by toshi_a 初音 over 3 years ago
- Related to 提案 #1490: settingsプラグインのGtk依存をやめる added
Updated by toshi_a 初音 over 3 years ago
settingsについては、以下のチケットに切り出し
提案 #1490: settingsプラグインのGtk依存をやめる