プラグインの表示が解除される

  1. お世話になっています。
    非公式のプラグインなのでサポート対象外でしたらスルーしてください。
    自分の環境では動作が不安定でしたので普段は使っていなくて、Version 3.3.4 で試してみたときの動作です。

    1.「Mery 検索バー」でグーグル検索して出てくる検索バー(2つあると思います)のプラグインを入れる
    2.Mery で [表示]->[ツールバー]->[Find Bar] をチェックして検索バーを表示し表示位置を変更する
    3.Mery を再起動する
    すると、[Find Bar] のチェックがはずれていて、もう1度チェックすると表示位置が最初の位置に戻っています。
    検索バー2つを別々で試して両方とも同じような動作です。

    Mery (x86) Version 3.3.4
    Windows 7 Home Premium Service Pack 1 32 ビット

    Version 3.3.1 では再起動後も表示されていました。

     |  774  |  返信
  2. あれ!?
    グーグル検索しなおしてみたら1つしか出てこなくなってしまいました。

     |  774  |  返信
  3. 774さん情報ありがとうございます
    前から欲しかったプラグインでした
    ちなみに2つ見つかりました
    ただ、文字選択しても検索バーに連動してないのが残念で
    いまいち使いづらいですね

    Kuroさんへ以前ツイッターか何かで検索バー作ってると
    見た覚えがあるのですがどうなったのでしょうか?
    ぜひ公開して欲しいです
    また、ZenClockも新しいのも作られてるようなので公開希望です

     |  o  |  返信
  4. > ただ、文字選択しても検索バーに連動してないのが残念で
    > いまいち使いづらいですね

    それについて自分は、検索 > 次の文字列を検索 と 前の文字列を検索 で十分なので気になりません。
    検索バーがそれほど必要とは思っていませんでしたが、検索ダイアログを表示させなくても検索履歴から検索できるのは便利だなと思いました。

     |  774  |  返信
  5. >> 774 さん

    ご報告ありがとうございます。

    > 非公式のプラグインなのでサポート対象外でしたらスルーしてください。

    サポート対象外ですが、1 つは GitHub でソースコードが公開されているようなので確認してみました。

    Mery のツールバーを利用したプラグインはまだ SDK (プラグインのテンプレート) を公開していないのに、すごい技術力!

    ソースコードを拝見した感じですと Mery のクールバー (ツールバーの親) の動作に割り込みをかけて位置の復元などを自前で実装されているようですが、その部分と Mery 側でのバグフィックス (たぶん Ver 3.3.2) が干渉しているのだと思います。

    Visual Studio は知識がないもので FindBarPlugin のビルドの仕方がわからず推測になってしまいますが、以下、気付いたことを書いておきます。

    --------

    まず、Ver 2.6.7 ではツールバー関連のプラグインメソッドに多くの問題があり、まともに使えません。ツールバープラグインを利用する場合は最低でも Ver 2.8.3 以上を推奨します。

    また、FindBarPlugin の作者様が Readme.md に書かれている「Ver 3.1.0 では起動時にツールバーの位置が復元されない」件もそのとおりです。

    これはバグではなく、ツールバーの位置の復元はプラグイン側で行ってもらうのが正しい仕様で、Ver 2.8.3 あたりからその仕様になっています。(そもそも Ver 2.6.7 で何もせず位置が復元できているのはどういうわけかわかりませんが…)

    それにともない FindBarPlugin では位置の復元を自前で実装 (OnDelayRestoreRebar) されているようですが、これはこれで問題ないと思います。

    実は Mery 側に用意されているプラグインメソッド Editor_ToolBarOpen でもツールバーの生成、表示・非表示、位置の復元ができるようになっており、本来はこのメソッドを使っていただくことを想定しています。

    しかしながら従来の Editor_ToolBarOpen は同期呼び出しとなっていたため、ツールバープラグインが複数導入されている状態で起動時に呼び出すと、順次 Editor_ToolBarOpen を処理していくため、他のツールバープラグインが生成されていない状態で位置の復元が実行されてしまい、うまく復元できないケースがありました。

    それを回避するためにはツールバーがすべて生成されたあとに位置の復元を実行する必要があるため、FindBarPlugin では Editor_ToolBarOpen を位置の復元には使用せず、自前で実装された OnDelayRestoreRebar を遅延実行して位置の復元をしているのだと思います。

    一方、Mery 側では Editor_ToolBarOpen を想定どおりの仕様にするために修正を行い、Ver 3.3.2 で Editor_ToolBarOpen を同期実行から遅延実行に変更し、起動時の表示・非表示、位置の復元に使用できるようにしました。

    ところで、FindBarPlugin では表示・非表示の復元に Editor_ToolBarOpen を使わず Editor_ToolBarShow を使っています。

    Editor_ToolBarShow は Ver 3.3.2 でも同期実行のままなので、起動時に Editor_ToolBarOpen と Editor_ToolBarShow を連続で呼び出すと Editor_ToolBarShow が先に実行され、Editor_ToolBarOpen がそのあと遅延実行されるかたちになってしまいます。

    本来、Editor_ToolBarOpen の引数には表示・非表示や位置などの情報を渡していただく必要があるのですが、FindBarPlugin では引数に空のデータ (初期化されていないようにも見えるので値は不定かもしれませんが、bVisible = false [0]) が渡されているため、遅延実行された Editor_ToolBarOpen によって一度は表示されたツールバーが再び非表示になっているのではないかと思います。

    プラグイン側で修正する場合は、自前で実装されている表示・非表示の復元を Editor_ToolBarShow ではなく Editor_ToolBarOpen を利用していただくかたちにすれば良いかと思いますが、SDK もマニュアルもないのでイバラの道ですね…。

    SDK につきましてはまだ 1 ミリも着手していないので、しばらく時間はかかると思いますがそのうちリリースできればと考えています。

    あと、Mery 側で Editor_ToolBarShow も遅延実行に変更するという方法でも対応できるかもしれません。

    Mery 側でのバグフィックスと FindBarPlugin 側の自前実装の部分が干渉しない落としどころがないか、もう少し調べてみたいと思います。

    >> o さん

    > Kuroさんへ以前ツイッターか何かで検索バー作ってると
    > 見た覚えがあるのですがどうなったのでしょうか?

    現在、開発中ですがやや難航しています。

    上記のとおりツールバーの制御に苦労しており、最近のバージョンでようやく位置の復元がそこそこ安定してきたところです。

    > また、ZenClockも新しいのも作られてるようなので公開希望です

    ZenClock はほぼ完成しています。エイプリルフール特典などで限定配布するかもしれません。

     |  Kuro  |  返信
  6. 詳細に調査していただきありがとうございます。
    また、お手数をおかけしました。

    基本的な知識がないので内容の理解は難しいですが、ツールバーを利用したプラグインの作成は難しく、それを作成した作者さんはスゴイということは分かりました。

     |  774  |  返信
  7. ご返信ありがとうございます。

    いえいえ、こちらこそ。プラグインの作者様がもし見てくれていれば伝わるのではないかという気持ちで書いたもので、技術的な内容になってしまいすみません。

    まさか仕様も公開していないツールバープラグインを自力で開発されるとは思ってもいなかったので、作者様はそうとうご苦労されたことだと思いますし、ソースコードを公開してくださっているのでなるほどと参考にさせていただく部分もあって勉強になりました。

    せっかく開発していただいたプラグインですから、作者様の意図と公開されているソースコードを参考に Mery 側の仕様も調整してみようと思います。

     |  Kuro  |  返信
スポンサーリンク