外部ツールで「アウトプットバーを使用する」コマンドが動かない

  1. Windows11(x64) Version 25H2 / Mery(x64) Version 3.8.9

    外部ツールで「アウトプットバーを使用する」にチェックを入れて、入力を「選択テキスト」、出力を「ツールチップを表示」や「クリップボードに保存」、にして以前動いていたコマンドがいつの間にか動かなくなっていました。

    以下は以前動いていた例ですが、単純に cmd.exe /c $(CurText) にしても動きませんでした。

    タイトル: 英和辞書
    コマンド: C:\msys64\usr\bin\bash.exe
    引数: -l -c "grep -A1 -wi \"\<$(CurText)\{1\}\>\" /usr/share/dict/ejdict.dic"
    作業フォルダ: $(Dir)

    「アウトプットバーを使用する」にチェック
    「終了時に閉じる」にチェック

    入力: 選択テキスト
    出力: ツールチップを表示
    エンコード: UTF-8

     |  enaka  |  返信
  2. ご報告ありがとうございます。

    こちらでも確認してみたのですが、いただいたとおりの設定 (内容をそのままコピペし、ejdict.dic を配置) で、特に問題なく動作しました。

    念のため、ポータブル版のクリーンな環境でも確認してみましたが、こちらも特に問題なく動作しているようです。

    Mery: 3.8.9 (x64, Portable)
    Onigmo: 6.2.0
    C/Migemo: 1.3
    Tidy: 5.8.0
    Hunspell: 1.7.1
    uchardet: 0.0.8
    QuickJS: 0.16.2
    アウトライン: 3.2.5 (Outline.dll)
    OS: Windows 11 (Version 25H2, OS Build 26200.9168, 64-bit Edition)
    

    ちなみに、[入力] は外部ツールの標準入力を指定する項目なので、今回の場合は [無し] で良いと思います ([選択テキスト] でも動作しましたが)

    それから、ツールチップだけを表示したい場合は、[アウトプット バーにフォーカスを設定する] をオフにしておくと良いと思います。(オンにすると、アウトプットバーが一瞬表示されるため)

    しかし、謎ですね。

    v3.8.9 では、外部ツール関連には特に変更を加えていないのですが…

    もしかすると、Mery がいわゆる「野良アプリ」なので、Windows のセキュリティ機能などによって何らかのブロックが働き、外部コマンドの実行が妨げられている可能性もあるのかもしれません。

     |  Kuro  |  返信
  3. 原因を特定しました。
    Mery本体のせいではなく、組み込んでいた大石さんのプラグイン MeryRowCol.dllを外すと、正常に動作しました。
    これから大石さんの掲示板に質問してみます。
    Meryで論理行論理桁とプラグインで物理行物理桁の両表示が便利すぎてチョット手放せないんです。

     |  enaka  |  返信
  4. ご報告ありがとうございます。

    なるほど、こちらでも MeryRowCol.dll を入れてみたところ、現象を確認しました。

    どうやら、アウトプット バー自体が使えなくなるようで、[表示] → [アウトプット バー] を選択しても、一瞬表示されたあと消えてしまいますね😅

    オプションに [アウトプット バーに表示] という項目があったので、こちらをオフにしてみましたが、特に変わりありませんでした。

    ソースコードも公開されているようなので確認してみたところ、[アウトプット バーに表示] がオフの場合、つまりステータス バーに表示するときも、アウトプット バーの内容を常にクリアしているようですね。

    しかも、その処理が EVENT_IDLE で行われているため、Mery 側で何か処理するたびにアウトプット バーの内容がクリアされてしまうようです。

    外部ツールの [ツールチップを表示] は、アウトプット バーの内容を取得してツールチップで表示する仕組みなので、その処理に割り込むかたちでアウトプット バーの内容がクリアされてしまい、結果としてツールチップが表示されなくなっているようです。

    そのため、プラグイン側で EVENT_IDLE を拾わないようにするか、それで問題がある場合は、[アウトプット バーに表示] がオフのときはアウトプット バーの内容をクリアしないようにする、といった対応が必要になるかなと思います。

     |  Kuro  |  返信
  5. Kuroさん
    大石です

    解説ありがとうございます。

    以下をコメントにした Ver9.20 をアップロードしました。
    ((nEvent and EVENT_IDLE) <> 0) or

    詳しい内容は、私のサポートの掲示板に書き込んでおきました。

    不具合があれば、再度報告して下さい。

    よろしくお願いします。

     |  大石剛司  |  返信
  6. Kuroさん
    大石さん

    対応ありがとうございました。プラグインを更新し問題なくアウトプットバーを使用することができるようになりました。

     |  enaka  |  返信
  7. enakaさん

    動作確認ありがとうございます。

    アウトプットバーでなくステータスバーに表示した場合も動作するように修正した、Ver9.30 をアップロードしました。

    よろしくお願いします。

     |  大石剛司  |  返信
  8. > 大石さん
    > アウトプットバーでなくステータスバーに表示した場合も動作するように修正した、Ver9.30 をアップロードしました。

    MeryRowCol.dll Ver9.30 に更新し意図した設定で動作することを確認しました。
    Ver9.20 でもステータスバー表示できていたようなので、どこが変わったかよくわからないですが(笑)

    MeryRowCol.dllが有効だと、Alt+2を2回、またはクロスボタン2回クリックしないとアウトプットバーが閉じないのですが、アウトプットバーが2重に開いている?

    > Kuroさん

    外部ツールの出力をツールチップ表示とクリップボード保存、両方同時にできないでしょうか。出力のドロップメニューからツールチップ表示は外し、独立したチェック欄になると嬉しいです。

    外部ツールでアウトプットバーを開いたままにすると、フォーカスがどちらでも閉じるクロスボタンが一瞬表示されて消え、アウトプットバーとメインを交互にクリックすると復活するのですが、仕様でしょうか。

    メニューバー>表示(V)>アウトプット(O) は、アウトプットバー(O) のほうが分かりやすいです。アウトプットだけだとバーの開閉だと最初気づかない人(自分です)がいるかも。
    あと、アウトプットバーとメインのフォーカスを行き来するキーボード操作が分からないです。

     |  enaka  |  返信
  9. >> 大石剛司さん

    お手数をおかけします。サポートの掲示板、拝見しました。

    回答された時間が「8月31日 20:37」となっていて、私がこちらのフォーラムに回答を書いた時間と同じ、対策方法までまったく同じところに行きついていて、奇跡を感じました(笑)

    今回、Mery 側では特に EVENT_IDLE に関する変更は行っていないのですが、ひとまず解決できたようで安心しました。

    EVENT_IDLE は Delphi の TApplication.OnIdle イベントと同じなので、Mery が何かするたびに発生しますし、何もしていないとき (暇なとき) も常にすごい勢いで発生します。

    なので、リアルタイムな処理が必要なときに使うことを想定していますが、発生回数が多いので、処理を実行するときは何かしらのフラグを使って、処理が必要かどうかの判定を組み込んで使うとか、タイマー的に時間経過をチェックして処理を行うとか、そういった使い方になりますね。

    カーソル位置のチェックなどであれば、おそらく EVENT_IDLE は拾わなくても大丈夫かと思いますが、何かの操作によっては、EVENT_IDLE でないと拾えない処理もあるかもしれないので、そこだけはご注意ください。

    >> enaka さん

    > 外部ツールの出力をツールチップ表示とクリップボード保存、両方同時にできないでしょうか。出力のドロップメニューからツールチップ表示は外し、独立したチェック欄になると嬉しいです。

    そうですね。独立したチェック欄にすることは可能ですが…

    たとえば、[選択範囲の後に挿入] と [ツールチップを表示] なんかを同時に使うケースって、あまりないと思うんですよね。

    なので、やるとしたら、[クリップボードに保存] のほうを独立させたほうが良くないでしょうか?

    そうすると、ドロップダウンで選択するのは「目に見える」出力結果で、追加の機能として「クリップボードにも保存できるよ」的なかたちになるので、わかりやすいかもしれません。

    > 外部ツールでアウトプットバーを開いたままにすると、フォーカスがどちらでも閉じるクロスボタンが一瞬表示されて消え、アウトプットバーとメインを交互にクリックすると復活するのですが、仕様でしょうか。

    確認してみましたが、アウトプットバーにフォーカスがあるときは閉じるボタンが非表示になり、フォーカスがないときは表示される、という動作で合っていると思います。

    外部ツールの設定で「アウトプットバーにフォーカスを移動する」ように設定している場合、外部ツールを起動した時点でアウトプットバーにフォーカスが移動するため、閉じるボタンが消えます。

    その後、エディター側にフォーカスを移動すると、閉じるボタンが表示されます。

    もしこの挙動になっていないのであれば、想定している仕様とは異なりますが、こちらの環境では仕様どおり動作しているようなので、もし想定外の動作をしているようであれば、具体的な再現手順を教えていただけると助かります。

    それか、「これぐらいの閉じるボタンなら常に表示でいいんじゃね?」的なご意見もいただけると、ソースコードがすっきりするので助かります😂

    > メニューバー>表示(V)>アウトプット(O) は、アウトプットバー(O) のほうが分かりやすいです。アウトプットだけだとバーの開閉だと最初気づかない人(自分です)がいるかも。

    確かにそうですね。

    便宜上「アウトプットバー」と呼んでいるものの、果たしてこれは「バー」なのか、というところがあって、「アウトプット」という項目名にして、ぼやっとごまかしていたのですが(笑)、もう「アウトプットバー」で定着してきている気もするので、項目名も「アウトプットバー」にしてしまっていいかもしれませんね。

    > あと、アウトプットバーとメインのフォーカスを行き来するキーボード操作が分からないです。

    アウトプットバー限定というわけではありませんが、F6 キー ([次のペイン] コマンド) で、エディター以外の部分 (アウトプットバーやプラグイン、分割ウィンドウなど) とエディター部分を行き来できます。

    複数のペインが開いている場合は順番に移動するかたちになってしまいますが、アウトプットバーのみ開いている状態であれば、エディターとアウトプットバーを交互に移動します。

    また、[ウィンドウ] カテゴリにある [アクティブなペイン] は、現在編集中のエディター部分にフォーカスを戻すコマンドになっていますので、こちらにショートカットキーを割り当てて使う方法もあります。

    こちらは、分割ウィンドウで編集している場合には、最後にアクティブだったエディターペインにフォーカスを戻すコマンドです。

    その代わり、あくまで「アクティブなエディターペインにフォーカスを戻す」だけなので、アウトプットバーにフォーカスを移動することはできませんが…

     |  Kuro  |  返信
  10. > なので、やるとしたら、[クリップボードに保存] のほうを独立させたほうが良くないでしょうか?
    >
    > そうすると、ドロップダウンで選択するのは「目に見える」出力結果で、追加の機能として「クリップボードにも保存できるよ」的なかたちになるので、わかりやすいかもしれません。

    その通りだと思います。考えが足りませんでした。

    > 外部ツールの設定で「アウトプットバーにフォーカスを移動する」ように設定している場合、外部ツールを起動した時点でアウトプットバーにフォーカスが移動するため、閉じるボタンが消えます。
    >
    > その後、エディター側にフォーカスを移動すると、閉じるボタンが表示されます。

    仕様を理解しました。
    フォーカスがあるときにクロスボタンが消えるというのが、タブのアクティブな時にクロスボタンを表示するのと逆なので、意図した仕様なのか少し疑問に感じただけなので。

    > それか、「これぐらいの閉じるボタンなら常に表示でいいんじゃね?」的なご意見もいただけると、ソースコードがすっきりするので助かります😂

    常に表示に一票。それか、フォーカスに関係なくアウトプットバーエリア上にマウスカーソルがあれば表示。

    > 便宜上「アウトプットバー」と呼んでいるものの、果たしてこれは「バー」なのか、というところがあって、「アウトプット」という項目名にして、ぼやっとごまかしていたのですが(笑)、もう「アウトプットバー」で定着してきている気もするので、項目名も「アウトプットバー」にしてしまっていいかもしれませんね。

    確かに、バーというほど細くないですしね(笑)
    エクスプローラーなどに合わせると、ビューまたはパネル、が適した言い回しでしょうか。

    > アウトプットバー限定というわけではありませんが、F6 キー ([次のペイン] コマンド) で、エディター以外の部分 (アウトプットバーやプラグイン、分割ウィンドウなど) とエディター部分を行き来できます。

    メニューバーのウィンドウ(W)にいないので気づきませんでした。
    分割ウィンドウと同じ扱いなんですね。Emacsなどと同じ仕様なので理解しやすいです。

     |  enaka  |  返信
  11. > その通りだと思います。考えが足りませんでした。

    いえいえ、とんでもないです。ひとまず、チェックボックス化については検討してみたいと思います。

    > フォーカスがあるときにクロスボタンが消えるというのが、タブのアクティブな時にクロスボタンを表示するのと逆なので、意図した仕様なのか少し疑問に感じただけなので。

    アウトプットバーの内容をコピーしたいときなどに、閉じるボタンが表示されていると、その部分の文字の上に重なってしまうため、フォーカスがあるときは閉じるボタンを消す仕様にしています。

    > それか、フォーカスに関係なくアウトプットバーエリア上にマウスカーソルがあれば表示。

    それは私も最初に考えたのですが、そもそものご要望が「アウトプットバーの閉じ方がわからない方への対応」というものでした。

    そのため、アウトプットバーが表示された時点で、閉じるボタンが見えている必要があります。

    また、アウトプットバーの内容をコピーしたいときに、マウスで範囲選択しようとすると、閉じるボタンが邪魔になってしまうケースも考えられます。

    そういう経緯で現在の仕様にたどり着いたわけですが、閉じるボタンを常に表示するとして、実際のところ「アウトプットバーに出力される文字が長くて、閉じるボタンの下に隠れてしまう」というケースがどれくらいあるんだろう、というところですね。

    私はアウトプットバーをほとんど使わないので、「少々隠れてても気にしない」とか、逆に「コピーするときに邪魔」というご意見など、そのあたりの反応があれば参考にさせていただきたいと思います。

    > エクスプローラーなどに合わせると、ビューまたはパネル、が適した言い回しでしょうか。

    そうなんですよね。

    とはいえ、今さら呼び方を変えるのもあれなので、ひとまずメニュー項目については、ご提案いただいた「アウトプットバー」にする方向で検討してみたいと思います。

    > メニューバーのウィンドウ(W)にいないので気づきませんでした。

    メニューバーには、難しい機能はできるだけ見せないようにしているので、そのあたりはマニュアルで補えればと思っているのですが、肝心のマニュアル整備が全然進んでおりません😂

     |  Kuro  |  返信
  12. アウトプットバーの内容をあらかじめボタンの高さ分を下げて表示して、ボタンを常に表示するのはどうでしょう。

    ここでボタン分の高さを節約することに必然はなさそうですし、クロスボタン以外にカーソル位置に挿入、新しいタブに開く、ファイルに保存、などのボタンもあれば、外部ツールを出力別に登録する必要などがなくなります。

     |  enaka  |  返信
  13. ご提案いただきありがとうございます。

    > アウトプットバーの内容をあらかじめボタンの高さ分を下げて表示して、ボタンを常に表示するのはどうでしょう。

    そうなんですよね。ボタンの高さ分だけあらかじめ余白を取っておけば、常に表示しても文字に重ならないですからね。

    …それも、すでに検討済みなんです😅

    引用になりますが、

    技術的には、アウトプットバーの出力エリアの右上に「×」ボタンを乗せることはできると思います。

    ただ、その場合、文字列が長いと「×」ボタンの下に文字が潜り込んでしまいますね。

    かといって、「アウトプット」のようなキャプション付きのタイトルバーを作って、その右端に「×」ボタンを配置する方法も考えられますが、今度は余計なスペースを使ってしまいますし…

    アウトプットバーを必要最小限のサイズで運用されているユーザーさんに怒られそうです。

    さらに、オプションで「アウトプットバーに閉じるボタンを表示」なんて用意し始めると、どんどん話がややこしくなってきて、ウァァァァン!ってなりました🫠

    ボタンを配置して、余白を有効活用するというのは面白いアイデアだと思います。

    ただ、実際に、画面の小さいノート PC で利用されていて、アウトプットバーを 1 行だけ表示し、文字どおり「バー」として必要最小限のサイズで使われているユーザーさんのスクショを拝見したことがあります。

    なので、1 行分とはいえ、表示領域を余分に消費することについては慎重に考える必要がありますね。

    とはいえ、複雑な処理を排除したいがための「閉じるボタンを常に表示」案だったのですが、1 行分の余白を確保したり、さらにボタンを増設したりするとなると、逆に複雑になってしまいます。

    開発側としては、それをやるぐらいなら、現状維持のほうが助かります😂

     |  Kuro  |  返信
  14. > ただ、実際に、画面の小さいノート PC で利用されていて、アウトプットバーを 1 行だけ表示し、文字どおり「バー」として必要最小限のサイズで使われているユーザーさんのスクショを拝見したことがあります。

    アウトプットバーの境界を掴んで高さを変えられることを今まで知りませんでした(笑)
    1 行だけの表示に出来るなら、閉じる必要がほぼないような気もします(笑)

    > 開発側としては、それをやるぐらいなら、現状維持のほうが助かります😂

    ちょっとしつこくて申し訳ありません。

    アウトプットバーのスクロールバーの上の部分を少し削って、そこにクロスボタンを常に表示するのはどうでしょう。
    このスクロールバーは常に表示されているため、表示と重ならずにシンプルに実装出来そうです。

    Meryの色々な表示を出したり引っ込めたりしてアイデアを考えていたのですが、検索バー・プラグインを閉じるショートカットの登録がわかりませんでした。

     |  enaka  |  返信
  15. > ちょっとしつこくて申し訳ありません。

    いえいえ、とんでもないです。いろいろ試しながら考えていただいて、ありがとうございます😊

    こちらこそ、せっかくご提案いただいているのに「できません」という回答ばかりになってしまって、心苦しい限りですが…

    > アウトプットバーのスクロールバーの上の部分を少し削って、そこにクロスボタンを常に表示するのはどうでしょう。
    > このスクロールバーは常に表示されているため、表示と重ならずにシンプルに実装出来そうです。

    そうなんですよね。

    ただ、アウトプットバーのエディット領域は私が作ったものではなく、Windows 標準の EDIT コントロールを使用しているので、Mery の現在の実装ではスクロールバーを削るなど、そこを自由にカスタマイズすることができないんです。

    検討段階で、yuko さんからも「エディター領域の上部に 1 行分のスクロールマージンを設ける」というご提案をいただいたのですが、こちらもカスタマイズできないため、残念ながら実現できませんでした。

    ちなみに、現在の閉じるボタンも EDIT コントロールをカスタマイズしたわけではなく、EDIT 領域の上に無理やり重ねて、それっぽく見せているだけなんです😅

    > Meryの色々な表示を出したり引っ込めたりしてアイデアを考えていたのですが、検索バー・プラグインを閉じるショートカットの登録がわかりませんでした。

    Mery 側の機能としては、検索バーを閉じるためのショートカットはありません。

    検索バーの「↓」ボタンの右隣にある「▼」ボタンからメニューを開いて、[Esc キーで閉じる] をオンにすると、検索バーにフォーカスがある状態で Esc キーを押して閉じることができます。

    また、Mery 側で [ツール] カテゴリの [検索バー] にショートカットキー、たとえば Ctrl + E などを割り当てておけば、そのキーで検索バーを表示できます。

    検索バーが表示されている状態で Ctrl + E を押せば、検索バーにフォーカスが移動します。

    なので、たとえば、

    • Ctrl + E → 検索バーを表示
    • Ctrl + E → 検索バーにフォーカス
    • Esc → 検索バーを閉じる

    という使い方になります。

     |  Kuro  |  返信
  16. > ただ、アウトプットバーのエディット領域は私が作ったものではなく、Windows 標準の EDIT コントロールを使用しているので、Mery の現在の実装ではスクロールバーを削るなど、そこを自由にカスタマイズすることができないんです。

    なるほど。だからアウトプットバーのスクロールバーは、メイン部分と見た目が違うのですね。
    自前のメイン部分と同じEDIT コントロールを使わないのは、アウトプットバーには大げさで軽量化のためでしょうか。

    > - `Ctrl` + `E` → 検索バーを表示
    > - `Ctrl` + `E` → 検索バーにフォーカス
    > - `Esc` → 検索バーを閉じる

    教えていただいた方法を応用してAutoHotkeyを使えば、ワンストロークに出来そうです。
    出来れば、ショートカットをF13などのスキャンコードは存在するが物理キーがないキーに割り当てたいのですが、可能ですか?
    オプション(O)のキーボードの新しいショートカット(N)にフォーカスし、任意の文字に編集出来ないか試しましたがダメでした(笑)

     |  enaka  |  返信
  17. > 自前のメイン部分と同じEDIT コントロールを使わないのは、アウトプットバーには大げさで軽量化のためでしょうか。

    そうですね。アウトプットバーは基本的に「結果を表示するためのもの」なので、メインのエディターほど高機能である必要はなく、できるだけシンプルなものにしています。

    ただ、軽量化というよりは、もともと Mery のアウトプットバーが「ちょっとしたログや結果を表示する領域」という位置付けだったため、必要な機能だけで構成した、というほうが近いですね。

    > 出来れば、ショートカットをF13などのスキャンコードは存在するが物理キーがないキーに割り当てたいのですが、可能ですか?
    > オプション(O)のキーボードの新しいショートカット(N)にフォーカスし、任意の文字に編集出来ないか試しましたがダメでした(笑)

    物理キーがないキーは、画面上からはキー割り当てできないですね。

    Mery.iniメモ帳などで開けば、[Keyboard] セクションがあるので、そこを直接書き換えることで F13 キーを割り当てることは可能だと思います。

    ただ、F13 キーを割り当てられたとしても、それがショートカットキーとして実際に使えるのかどうかまでは、試していないのでわかりません。

    一応、手元に自分でキーを書き換えられるマクロキーボードなるものがあるので、F13 キーを割り当てて試してみようと思ったのですが、その書き換えツール自体に F13 キーがありませんでした(笑)

    そこで、書き換えツールのキーのエリアにフォーカスして、任意の文字を入力できないか試してみたのですが、ダメでした🫠

     |  Kuro  |  返信
  18. > ただ、F13 キーを割り当てられたとしても、それがショートカットキーとして実際に使えるのかどうかまでは、試していないのでわかりません。

    Mery.ini を書き換え Ctrl+F13 に割り当てて、AutoHotkey v2 を使い以下のスクリプトで Ctrl+F3 をトグル動作に出来ることを確認しました。

    #HotIf WinActive("ahk_exe Mery.exe")
    	global findbar_flag := 0
    	^F3::	{
    		global findbar_flag
    		if (findbar_flag)
    			Send("^{F13}{Esc}"), findbar_flag := 0
    		else
    			Send("^{F13}"), findbar_flag := 1
    	}
    #HotIf
    

    AutoHotkey v2 は物理キーにマップしていないスキャンコードも発生させられるため、たとえば以下のように Macキーボードの英数キーとかなキーを無変換キーと変換キーに置き換えられます。

    sc1F1::	Send("{vk1D}")	;; Eisu for Mac Kbd
    sc1F2::	Send("{vk1C}")	;; Kana for Mac Kbd
    

    > 一応、手元に自分でキーを書き換えられるマクロキーボードなるものがあるので、F13 キーを割り当てて試してみようと思ったのですが、その書き換えツール自体に F13 キーがありませんでした(笑)

    レジストリを書き換えれば、任意のキーに物理キーがないスキャンコードも割り当てられますが、難しいので自分はChgKey.exeを使っています。
    https://forest.watch.impress.co.jp/library/software/changekey/

    > そこで、書き換えツールのキーのエリアにフォーカスして、任意の文字を入力できないか試してみたのですが、ダメでした🫠

    天丼(笑)

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