アウトプットバーからフォーカスを外す方法を知りたい

  1. アウトプットバーを表示すると必ずフォーカスが移りますが、マクロの編集・実験中にアウトプットバーへの出力を確認したいだけの時にもフォーカスが移ってしまうので、そのたびにフォーカスを編集箇所に戻す操作が煩わしいです。

    エディタの機能としては無くても、例えば「outputbar.setFocus(false);」などとしてフォーカスを外せれば(元の場所に戻せれば)「outputbar.visible = !outputbar.visible;」と組み合わせて望みの事は出来そうなのですが。(Alt+2でマクロで開閉)

    ーーー
    マクロリファレンスを見る限り、アウトプットバーにフォーカスを移す必要性が良く判りません。キーボード入力はできるようですが、内容を取得できるような命令も無いみたいだし。フォーカスがあるなら「document.selection...」で扱えるのかと思ったけどそうでもないし。setFocus()がtrue固定の理由も良く判らない。フォーカスなくても出力はできるし。

     |  ほげ  |  返信
  2. 横から失礼します。

    もともとアウトプットバーはマクロで便利に活用するための機能ではなく、外部ツールと連携してコンソール的に利用するためのものだそうで、アウトプットバー関連のマクロ用プロパティの拡張には消極的だとか。
    マクロからはアウトプットバー内の文字列を取得することができないので色々とさびしいですよね。(ステータスバーノモジレツハシュトクデキルノニ...)
    アウトプットバーにフォーカスがあるとショートカットキーでのマクロの実行もできないので不便に感じることもしばしば。 :|

    私の場合、キーボード派ではなくマウス派の人なので、アウトプットバーの開閉操作はマウスカスタマイズ系の外部ソフトで「ステータスバーの左半分の領域内で右クリックをしたらキーストローク [Alt+2] と [F6] を送信する」ようにしています(※アウトラインペインも表示しているときは、アウトプットバーを閉じてエディタ領域にフォーカスを戻すためには右クリック×2回)。
    フォーカスがアウトプットバーに入っていてもツールバー/マクロバーのアイコンのマクロは実行できるあたり、マウス派はちょっとお得だったりします。 :D

    トピ主さんのご希望の挙動をマクロで実現するならば

    // アウトプットバーの開閉操作 (Alt+2 に相当)
    OutputBar.Visible = ! OutputBar.Visible;
    // または
    // editor.ExecuteCommandByID( MEID_VIEW_OUTPUT_BAR = 2166 );
    
    if ( Outputbar.Visible ) {
      // 「次のペイン」コマンド (F6 に相当)
      editor.ExecuteCommandByID( MEID_WINDOW_NEXT_PANE = 2187 );
    }
    

    ただし、このマクロにショートカットキーを割りあてても、アウトプットバーにフォーカスがあるときにショートカットで実行しようとしてもアウトプットバーは消せません。

     |  sukemaru  |  返信
  3. あ、わすれもの…

    > アウトプットバーからフォーカスを外す方法を知りたい
    の答えは キーボード操作で F6 です。
    Windows のエクスプローラでフォルダツリーペインやアドレスバーなどへフォーカスを移動させるときと同じ、ということなんだとおもいます。

     |  sukemaru  |  返信
  4. > > アウトプットバーからフォーカスを外す方法を知りたい
    > の答えは キーボード操作で F6 です。

    ありがとうございます。AutoHotkey使ってるので
    「!2::Send,!2{F6}{ESC}」
    で出来ました。

    「ESC」はアウトプットバーを閉じた時に左ペインにフォーカスが行ってしまうのでそれをキャンセル。

     |  ほげ  |  返信
  5. ご意見ありがとうございます。

    > マクロリファレンスを見る限り、アウトプットバーにフォーカスを移す必要性が良く判りません。キーボード入力はできるようですが、内容を取得できるような命令も無いみたいだし。フォーカスがあるなら「document.selection...」で扱えるのかと思ったけどそうでもないし。setFocus()がtrue固定の理由も良く判らない。フォーカスなくても出力はできるし。

    確かに、マクロだと OutputBar.SetFocus が用意されているわけですから、OutputBar.Visible を呼んだときに強制的にフォーカスをアウトプットバーに移動させる必要はなさそうですね。

    アウトプットバーにフォーカスを移動させたいときだけ OutputBar.SetFocus を使うというほうが理にかなっている気がします。

    次のバージョンでは修正しておきますね。

     |  Kuro  |  返信
  6. フォーカスの話とは少しずれるんですがOutputBar.Visibleに関連して一点伝えたいことがあります

    アウトプットバーの表示切り替え方法は

    A.メインメニューの表示(V)からアウトプット(O)を選ぶ
    B.ショートカットキーのAlt+2
    C.OutputBar.Visibleを設定する

    などがありますが、(他にSendKey()やExecuteCommandがありますが省きます)Alt+2が効かない場合があります

    手順
    1.アウトプットバー非表示の状態からOutputBar.Visibleを切り替えて表示する
    2.念の為エディタ部分にフォーカスを移す

    この時Alt+2が1回では効きません2回押下すると効きます
    OutputBar.Visibleを使うと「表示したよ」という連絡が行き渡ってないのかな?と思ってしまいますがどうやらそうでもないらしいです

    というのも同様に上記手順を踏んだあと、メインメニューの表示(V)からアウトプット(O)を選ぶと1回でちゃんと非表示になります。アウトプット(O)のショートカットがAlt+2ですから、おそらく内部では同じ処理を通ると思うので不思議です

    実は数ヶ月前からこの現象は知ってましたが、細かすぎるかな?というのと知ってさえいれば対応できるしというのもあり、軽視して黙っていました
    マクロ作成のコツとしてはoutputbar.visibleではなくExecuteCommandを使えば回避できます

    outputbar.visible = !outputbar.visible;
    若干他人事のように書いてしまいましたが、この書き方は私こそが何かのマクロで投稿し、またフォーラムでもチラッと紹介してしまってもいるので、盛大なブーメランですね、恥ずかしい限りです

    ところでアウトプット(O)なんですね「バー」が無いです。まぁわかるし、短い方がスマートだと思います

     |  シリル  |  返信
  7. ご報告ありがとうございます。

    > この時Alt+2が1回では効きません2回押下すると効きます

    現象再現しました。おそらくプログラムミスだと思いますので次のバージョンでは修正できるよう対策してみますね。

    > ところでアウトプット(O)なんですね「バー」が無いです。まぁわかるし、短い方がスマートだと思います

    そうですね。なんたらバーと名前がついている項目は主にツールバー上に表示されるパネルのことを指しています。

    マクロのインターフェイス名が OutputBar だったり、フォーラムでの呼び方がアウトプットバーだったりするのは分かりやすさを重視した便宜上ということで ^^;

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