やること: チケットhttps://dev.mikutter.hachune.net/https://dev.mikutter.hachune.net/favicon.ico?16194486082024-03-16T03:50:32Zやること
Redmine mikutter - バグ #1597 (実装待ち): mastodon の public/unlisted/privete/direct のアイコンファイル名を参照しているプラグインがあるhttps://dev.mikutter.hachune.net/issues/15972024-03-16T03:50:32ZIzumi Tsutsuitsutsui@ceres.dti.ne.jp
<p><a class="changeset" title="リファクタリング refs #1575" href="https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/a860fae8667de5cade577287066e421a075872ce">a860fae</a> の <a class="source" href="https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/a860fae/entry/plugin/mastodon_gtk/subparts_status_info.rb">source:plugin/mastodon_gtk/subparts_status_info.rb@a860fae</a> 他の変更で<br />mastodon の public/unlisted/private/direct のアイコンファイルが変更されたため、<br />それらのファイル名を直接指定していたプラグインでアイコン表示ができなくなっています。</p>
<p>具体的にはしばふ氏の mastodon_postbox_visibility<br /><a class="external" href="https://github.com/shibafu528/mikutter_mastodon_postbox_visibility/blob/c0c3b15/mastodon_postbox_visibility.rb#L141-L145">https://github.com/shibafu528/mikutter_mastodon_postbox_visibility/blob/c0c3b15/mastodon_postbox_visibility.rb#L141-L145</a><br />で直接参照していて、 <a class="changeset" title="リファクタリング refs #1575" href="https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/a860fae8667de5cade577287066e421a075872ce">a860fae</a> 以降だと少なくとも private と direct のアイコンが error になります。</p>
<p>ただ、これをどう対処するのが正しいのか(mikutter側で互換を残すのか、プラグイン側を直すのか)がよくわかりません。</p>
<pre><code class="ruby syntaxhl"> <span class="vi">@icons</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">default: </span><span class="s1">'visibility-default.png'</span><span class="p">,</span>
<span class="ss">public: </span><span class="s1">'etc.png'</span><span class="p">,</span>
<span class="ss">unlisted: </span><span class="s1">'unlisted.png'</span><span class="p">,</span>
<span class="ss">private: </span><span class="s1">'private.png'</span><span class="p">,</span>
<span class="ss">direct: </span><span class="s1">'direct.png'</span><span class="p">,</span>
<span class="p">}.</span><span class="nf">freeze</span>
</code></pre> mikutter - 提案 #1579 (まだダメ): gettext 3.4.2へのアップデートhttps://dev.mikutter.hachune.net/issues/15792022-01-11T08:18:47Zあひる 家鴨mikutter - 提案 #1578 (実装待ち): Emacsのfaceのように継承構造を持ったフォント・配色の設定機能が欲しいhttps://dev.mikutter.hachune.net/issues/15782022-01-09T10:13:58ZShibafu Midorino
<a name="動機"></a>
<h3 >動機<a href="#動機" class="wiki-anchor">¶</a></h3>
<p>Mastodon, Twitter, 他…といったように多くのWorldが存在すると、フォントや配色の設定をいくつも変更しなければならず、面倒です。<br />何かしら、まとめて設定できる仕組みがあってほしい。</p>
<a name="提案"></a>
<h3 >提案<a href="#提案" class="wiki-anchor">¶</a></h3>
<p>Emacsの <a href="https://ayatakesi.github.io/emacs/27.2/html/Faces.html" class="external">Face</a> のように、継承構造を持ったスタイル設定を導入したいです。<br />説明上、このスタイル設定の定義情報について(Emacsから借用して) "Face" と呼ぶことにします。</p>
<p>さて、mikutterに当てはめて考えると、次のようなスタイル設定のツリーができるかなと想像しています。</p>
<pre>
* Default
`-- Message
|-- Mastodon Status
`-- Twitter Tweet
</pre>
<p>このツリーは、クラスベースオブジェクト指向プログラミングの継承構造に近い振る舞いをします。<br />たとえばあるノードのフォントファミリー属性を得ようとした時、そのノードにおいて結果が未定義であれば親ノードに再帰的に問い合わせます。</p>
<p>また、ユーザーは設定を通して、各ノードに対して属性を上書きすることができます。<br />Default faceにフォントを設定すれば、あらゆるトゥートやツイートのフォントが一括で変更されます。<br />トゥートだけ色を変えたいのであれば、トゥートの設定だけを変える……ということもできますね。</p>
<table>
<tr>
<th>Face </th>
<th>Layer </th>
<th></th>
<th>Font </th>
<th>Color </th>
</tr>
<tr>
<td> Default </td>
<td> Default (Faceごとの既定値) </td>
<td> </td>
<td> Sans 10 </td>
<td> <code>#000000</code> </td>
</tr>
<tr>
<td> </td>
<td> User (ユーザー設定) </td>
<td> </td>
<td> Noto Sans CJK JP 12 </td>
<td> ↓ </td>
</tr>
<tr>
<td> Message </td>
<td> Default </td>
<td> </td>
<td> ↓ </td>
<td> ↓ </td>
</tr>
<tr>
<td> </td>
<td> User </td>
<td> </td>
<td> ↓ </td>
<td> ↓ </td>
</tr>
<tr>
<td> Mastodon Status </td>
<td> Default </td>
<td> </td>
<td> ↓ </td>
<td> ↓ </td>
</tr>
<tr>
<td> </td>
<td> User </td>
<td> </td>
<td> ↓ </td>
<td> <code>#303030</code> </td>
</tr>
<tr>
<td colspan="2"><strong>表示に使用される値</strong> </td>
<td> </td>
<td> Noto Sans CJK JP 12 </td>
<td> <code>#303030</code> </td>
</tr>
</table>
<p>Faceの定義はプラグインのロードフェーズで登録されたDiva Modelからは自動生成を試みたいですね。<br />タイムライン表示対象に関しては、プラグイン側に追加の手間をかけたくないです。</p>
<p>一方、Subpartsを追加するようなプラグインに関しては、自分で新しいFaceを作成することになると思います。<br />この際、コアで提供するFaceの中から役割の近いものを継承元として選んでもらうことで、ユーザーの設定がなるべく尊重されるようにしてもらうのが理想です。</p> mikutter - バグ #1558 (実装待ち): mikutter 5.0 AppImage出力ができないhttps://dev.mikutter.hachune.net/issues/15582021-12-19T14:42:56Ztoshi_a 初音toshi.alternative@gmail.com
<p>Gtk3になったことで現在のAppImageビルド用のスクリプトが使えなくなったので対応する。<br />また、Ubuntu 16.04のサポートは終わっているため、Ubuntu 18.04でAppImageを作る。</p> mikutter - バグ #1518 (実装待ち): 「タブにフォーカス」コマンドが動作していないhttps://dev.mikutter.hachune.net/issues/15182021-10-23T07:36:05Ztoshi_a 初音toshi.alternative@gmail.com
<p>postboxロールのコマンド「タブにフォーカス」をショートカットキーに割り当てて、そのショートカットキーを入力しても動作していない。</p> mikutter - バグ #1509 (まだダメ): プロフィール: ヘッダウィジェットの横幅よりMiraclePainterの横幅が短くならないhttps://dev.mikutter.hachune.net/issues/15092021-10-09T07:15:00Ztoshi_a 初音toshi.alternative@gmail.com
<p>異様にドメイン名が長いサーバの場合、プロフィールのヘッダの横幅の最小サイズが、ウィンドウより大きくなる場合がある。<br />それによって、ListBoxが影響を受け、MiraclePainterが見切れてしまう。</p>
<p>対応方法としては、ヘッダウィジェットの表の右側については自動改行させるのが良さそう。</p> mikutter - バグ #1485 (実装待ち): libpango >= 1.48.3 の環境で AppImage 版がクラッシュして起動しないhttps://dev.mikutter.hachune.net/issues/14852021-03-17T12:17:51Zgoma sy
<p><a class="external" href="https://aur.archlinux.org/packages/mikutter/#comment-796812">https://aur.archlinux.org/packages/mikutter/#comment-796812</a><br />AUR にてコメントが有りましたので確認したところ、再現しました。<br />libpango が 1.48.3 以降だと起動できないようです。(1.48.2 はクラッシュせず)<br /><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="バグ: libpangoが新しめのLinux環境でAppImage版を起動するとクラッシュする (終了)" href="https://dev.mikutter.hachune.net/issues/1416">#1416</a> と同じような問題に思えます。</p>
<pre>
g_module_open() failed for /tmp/.mount_mikuttJHbYoi/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so: /usr/lib/libpangoft2-1.0.so.0: undefined symbol: g_task_set_name
(null)-WARNING **: Failed to load shared library 'libpangocairo-1.0.so.0' referenced by the typelib: /usr/lib/libpangoft2-1.0.so.0: undefined symbol: g_task_set_name
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:544:in `load_interface_info'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:70:in `load_info'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:40:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:34:in `block (2 levels) in each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:33:in `times'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:33:in `block in each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:32:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:32:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:39:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/pango-3.4.1/lib/pango.rb:32:in `<module:Pango>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/pango-3.4.1/lib/pango.rb:24:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2/base.rb:14:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2.rb:11:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_miracle_painter.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/plugin/gtk/gtk.rb:5:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:99:in `block in load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:40:in `block in each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:38:in `each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:98:in `load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/boot/load_plugin.rb:13:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/mikutter.rb:56:in `<main>'
(null)-WARNING **: Failed to load shared library 'libpangoft2-1.0.so.0' referenced by the typelib: /usr/lib/libpangoft2-1.0.so.0: undefined symbol: g_task_set_name
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:544:in `load_interface_info'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:70:in `load_info'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:40:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:34:in `block (2 levels) in each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:33:in `times'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:33:in `block in each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:32:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/repository.rb:32:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gobject-introspection-3.4.1/lib/gobject-introspection/loader.rb:39:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/pango-3.4.1/lib/pango.rb:32:in `<module:Pango>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/pango-3.4.1/lib/pango.rb:24:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2/base.rb:14:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2.rb:11:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_miracle_painter.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/plugin/gtk/gtk.rb:5:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:99:in `block in load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:40:in `block in each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:38:in `each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:98:in `load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/boot/load_plugin.rb:13:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/mikutter.rb:56:in `<main>'
/tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require': /usr/lib/libpangoft2-1.0.so.0: undefined symbol: g_task_set_name - /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2.so (LoadError)
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2/base.rb:17:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2.rb:11:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_miracle_painter.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/plugin/gtk/gtk.rb:5:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:99:in `block in load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:40:in `block in each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:38:in `each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:98:in `load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/boot/load_plugin.rb:13:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/mikutter.rb:56:in `<main>'
/tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': /usr/lib/libpangoft2-1.0.so.0: undefined symbol: g_task_set_name - /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2.so (LoadError)
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2/base.rb:17:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/gems/2.6.0/gems/gtk2-3.4.1/lib/gtk2.rb:11:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_miracle_painter.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/plugin/gtk/gtk.rb:5:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:99:in `block in load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:40:in `block in each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:38:in `each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:98:in `load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/boot/load_plugin.rb:13:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/mikutter.rb:56:in `<main>'
/tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- gtk2 (LoadError)
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_miracle_painter.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb:3:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/plugin/gtk/gtk.rb:5:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:157:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:148:in `block in load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `block in atomic'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/utils.rb:288:in `atomic'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:147:in `load'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:99:in `block in load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:40:in `block in each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:35:in `each'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:38:in `each_spec'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/miquire_plugin.rb:98:in `load_all'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/core/boot/load_plugin.rb:13:in `<top (required)>'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/.mount_mikuttJHbYoi/usr/share/mikutter/mikutter.rb:56:in `<main>'
</pre> mikutter - バグ #1464 (実装待ち): ハッシュタグを押下しても何も起きないhttps://dev.mikutter.hachune.net/issues/14642020-07-07T08:48:21ZYuto Tokunagayuntan.sub1@gmail.com
<p>ハッシュタグを押下すると,ブラウザが開くか検索タブが開くか,又は動作を選択するダイアログが開くことが期待されます.実際は何も起きません.</p> mikutter - 提案 #1460 (実装待ち): subscribeの呼び出し回数の最適化をするhttps://dev.mikutter.hachune.net/issues/14602020-07-05T04:13:20ZYuto Tokunagayuntan.sub1@gmail.com
<p>適当なプラグインで<code>subscribe(:extract_receive_message, :mastodon_appear_toots)</code>を購読した際に,イベントが集約されずに一つ一つバラバラに呼び出されています.</p> mikutter - バグ #1325 (レビュー待ち): ふぁぼってもふぁぼアイコンが付かないhttps://dev.mikutter.hachune.net/issues/13252019-03-23T15:06:23Zcob odocobodo@gmail.com
<p>特定の<code>Message</code>が誰にふぁぼられているかは<code>Mesasge#favorited_by</code>で管理されており、メインアイコンの上にふぁぼアイコンが付くかどうかはこれを使って判定される意図だったと思われますが、(おそらくspell導入前後の変更で?)現在はうまく動いておらず、ふぁぼってもアイコンが変わらず、ふぁぼの解除ができません。<br />そこでパッチを書きました。</p> mikutter - 提案 #1241 (toshi_aの判断待ち): Scoreの初期値をModelが提供できるようにするhttps://dev.mikutter.hachune.net/issues/12412018-05-12T11:03:54Zcob odocobodo@gmail.com
<p>TwitterのEntityや、(Worldonにおける)mastodonのhyperlink情報は、プレーンテキスト化した後のdescriptionだけからは復元できず、テキスト全体に対する位置に強く依存しています。そのため、score_filterの初回処理で選ばれない場合、後段の再帰では処理することができず、情報が失われてしまいます。 cf. <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="バグ: 絵文字のあとにメンションがあるとリンクが正しく作らず、リンクもある場合大量のscore_by_regexpが実行され続ける (終了)" href="https://dev.mikutter.hachune.net/issues/1239">#1239</a></p>
<p>また別の問題として、Twitterが返してくるHTML実体参照を含むテキストは、TextNote化する際にunescapeする必要がありますが、</p>
<ul>
<li>Entityが含まれていない場合はTextNote1つだけを返すしかない(TextNoteとは別の(全く同機能な)クラスを使う方法もありますが……)</li>
<li>TextNoteだけが含まれるScoreはscore_by_scoreに無視される</li>
</ul>
<p>の2つの仕様により、unescapeしたTextNoteを返しても採用されない、という問題があります。 cf. <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="バグ: Twitterのメッセージに含まれる <>& がHTML実体参照のままになっている (終了)" href="https://dev.mikutter.hachune.net/issues/1233">#1233</a></p>
<p>これらを解決する案として、Modelが <code>:score</code> というメソッドを持つならば、まずそれを呼んでScoreの初期値とし、そこに含まれるTextNoteに対してscore_by_scoreを走らせればいいのではないかと考えました。</p>
<p>Pros</p>
<ul>
<li>twemojiのようなプラグインを入れるとEntityが効かなくなる問題は生じなくなる。</li>
<li>テキストのみを持つようなものに対しても細工したTextNoteを返すことができるようになる。</li>
<li>サードパーティプラグインで挙動を変更する場合、フィルタでは上書きが困難ですが、インスタンスメソッドであればモンキーパッチできるためわかりやすい。</li>
</ul>
<p>Cons</p>
<ul>
<li>フィルタの積み重ねと単純な再帰で構成されていたscoreがとっちらかった構造になる</li>
</ul>
<p>叩き台として試作したパッチを添付します。</p> mikutter - バグ #1190 (レビュー待ち): タイムラインのアイコン上のボタンがSpellを利用していないhttps://dev.mikutter.hachune.net/issues/11902018-03-12T15:22:22Zcob odocobodo@gmail.com
<p>favorite spellではなくmessage.favoriteメソッドを使っているため。</p> mikutter - バグ #1161 (レビュー待ち): --confrootオプション付きで起動した時Gemfileを含むプラグインが存在すると落ちるhttps://dev.mikutter.hachune.net/issues/11612018-01-29T06:27:56Zcob odocobodo@gmail.com
<p>再現手順の通り。</p> mikutter - バグ #1046 (まだダメ): 改行文字のみでも投稿可能状態になるhttps://dev.mikutter.hachune.net/issues/10462017-05-27T13:49:16Zあひる 家鴨
<p>改行のみではTwitterに投稿できないが、投稿ボタンが投稿可能状態になってしまっている。</p> mikutter - バグ #693 (パッチ適用待ち): 時計がずれた状態でmikutterを初回起動すると、チュートリアルがが不正な動作となる。https://dev.mikutter.hachune.net/issues/6932014-06-09T15:15:49ZSatoshi Okunomoguno12@gmail.com
<p>(1)時計を9時間ずらす。<br />(2)mikutterを初回起動する。<br />(3)URLを表示する直前までは正常にチュートリアルが進む。<br />(4)さらに進めると認証用のテキストボックスと認証ボタンが表示されるが、肝心のURLを含むメッセージが表示されない。</p>
<p>時計ずれによるトークンの交換失敗?によりrequest_token.authorize_urlが未定義になり、それを参照している箇所で例外が発生しているためです。</p>
<p>時間がある時にパッチ書いてみようと思います。</p>