アウトプットバーの不具合(閉じるボタン、0行表示)

  1. お久しぶりです。
    不具合を見つけたので報告します。おま環でしたらすみません…。

    ・閉じるボタン
    アウトプットバーの閉じるボタンが表示されているときにアウトプットバーをスクロールすると、閉じるボタンが連続で描画されたり見えなくなったりします。
    私はマウスの代わりにペンタブを使用していて、オートスクロール(中クリックしてマウスを上下に動かす)と、スクロールバーをドラッグしてのスクロールで発現しました。
    普通のホイールスクロールは未検証です。
    (いつもは右クリック上下に割り当てた Ctrl + Home/End を多用しており、気まぐれで上までオートスクロールしたら、たくさん並んでて笑いました😆)

    ・0行表示
    エディタとアウトプットバーの境をドラッグして0行にしたあと、アウトプットバーからフォーカスが外れると元に戻せなくなります。
    アウトプットバーを開き直してフォーカスを移しても戻せません。
    (まっさらなポータブル版で試したので、いま困ってるわけではないです)

    ちなみに、別スレッドでの話題ですが、「これぐらいの閉じるボタンなら常に表示でいいんじゃね?」派です。
    むしろ常に表示されてる方がありがたいです!

     |  nimx  |  返信
  2. スペックを追記します。
    Win10がもう正規環境ではないことを忘れていました…。

    Mery: 3.8.9 (x64, Portable)
    OS: Windows 10 (Version 22H2, OS Build 19045.7725, 64-bit Edition)

     |  nimx  |  返信
  3. お久しぶりです、ご報告ありがとうございます。

    詳しい再現条件までありがとうございます。おま環という感じではなさそうです。

    閉じるボタンについては、こちらの環境でもマウスのオートスクロールで現象が再現しました。

    フォーカスを受け取ると非表示、フォーカスが外れると表示、という小細工は、プログラム的には美しくなかったので、できれば廃止したいなぁと思っていたのですが、やはりこういった問題が起きてくるものですね😱

    > ちなみに、別スレッドでの話題ですが、「これぐらいの閉じるボタンなら常に表示でいいんじゃね?」派です。
    > むしろ常に表示されてる方がありがたいです!

    私もそのほうがプログラムがスッキリするので、できればそうしたいところで、その後もいろいろと考えていたのですが…

    • Windows 標準の EDIT なので、スクロールバーの上部に余白を付けたりできない
    • かといって、1 行分の余白を確保して右端に「×」ボタンを置くと、アウトプットバー最小表示派に怒られそう
    • かといって、常に「×」ボタンを表示するだけだと、文字の上に重なってしまう

    というところでジレンマを抱えており、ユーザーさんからもいろいろとご意見をいただいていたのですが…

    ようやく良いアイデアが思いつき、次のバージョンでは「×」ボタンを常に表示できそうです。

    そうすると、今回のような再描画の問題も発生しなくなると思います。

    > エディタとアウトプットバーの境をドラッグして0行にしたあと、アウトプットバーからフォーカスが外れると元に戻せなくなります。

    こちらについては、私の環境では若干異なる状況だったので、もう一度ご確認いただけると助かります。

    こちらの環境では、エディタとアウトプットバーの境をドラッグして 0 行にしたあと、アウトプットバーからフォーカスが外れても、元に戻すことができています。

    ただし、0 行になっている状態で、一度アウトプットバーを非表示にしてから再び表示すると、0 行の状態から戻せなくなります。

    ただ、現在、手元に Windows 10 環境がないため、検証したのは Windows 11 (Version 25H2, OS Build 26200.9457, 64-bit Edition) です。

    もし今回ご報告いただいたとおり、アウトプットバーからフォーカスを外すだけで 0 行状態を解除できなくなる、ということでしたら、あらためて Windows 10 の環境を用意して調査してみたいと思います。

    お手数をおかけしますが、よろしくお願いいたします。

     |  Kuro  |  返信
  4. > ようやく良いアイデアが思いつき、次のバージョンでは「×」ボタンを常に表示できそうです。
    > そうすると、今回のような再描画の問題も発生しなくなると思います。

    一票投じるのに二の足を踏んでいる間に……
    いつもたくさん考えてくださってありがとうございます!

    > > エディタとアウトプットバーの境をドラッグして0行にしたあと、アウトプットバーからフォーカスが外れると元に戻せなくなります。
    > こちらについては、私の環境では若干異なる状況だったので、もう一度ご確認いただけると助かります。

    改めて試してみたところ、次の手順で再現しました。
    ()内はフォーカス位置です。

    • アウトプットバーにフォーカスがあり、0行にしたあと、フォーカスを外す
      (アウトプットバー → エディタ)
    • アウトプットバーにフォーカスがなく、0行にしたあと、F6 でアウトプットバーにフォーカスを移す
      (エディタ → アウトプットバー)
    • 0行にしたあと、アウトプットバーを非表示にして、再び表示する
      (どちらでも → エディタ → アウトプットバー)

    2つ目を、キーボード操作ではなくエディタ部分をクリックした場合は、ドラッグできて元に戻せました。
    (エディタ → エディタ)

    「フォーカスが外れると」ではなく、「フォーカスが移動すると」が正しい条件のようです。
    参考になりましたら幸いです。どうぞよろしくお願いします。

     |  nimx  |  返信
  5. 上記は エディタ と アウトプットバー だけを表示して検証しました。

    投稿してから気になって アウトライン も表示して検証してみると、「エディタ または アウトプットバー のどちらかにフォーカスが移動すると」が条件のような、違うような…。

    難しいので、『エディタ と アウトプットバー だけを表示』という状態で検証していただければと思います。

     |  nimx  |  返信
  6. 詳しい再現手順ありがとうございます。

    いただいた手順で、こちらの環境でも現象を確認できました。

    先日検証したときは、アウトプットバーを 0 行にしたあと、[非表示] → [表示] と操作した場合に現象が発生していたので、てっきりこのことかな?と思っていたのですが、今回教えていただいた手順では、アウトプットバーを [非表示] にしなくても、フォーカスを移動するだけで現象が発生しました。

    …で、原因ですが、どうやら「×」(閉じる) ボタンのせいみたいです。

    閉じるボタンを付ける前の v3.8.8 では、この現象は発生しませんでした。

    ということで、閉じるボタンは廃止…とできれば話は早いのですが、そういうわけにもいかないので😅、閉じるボタンの実装方法をいったんゼロから見直してみたいと思います。

    おかげさまで原因をかなり絞り込むことができました。貴重な情報をありがとうございました。

     |  Kuro  |  返信
  7. > いただいた手順で、こちらの環境でも現象を確認できました。

    わざわざ環境を用意してもらわずに済んで良かったです。
    が、

    > …で、原因ですが、どうやら「×」(閉じる) ボタンのせいみたいです。

    悲しい結果になってしまいました😭
    だからエディタのフォーカスが絡んでたんですね。

    > ということで、閉じるボタンは廃止…とできれば話は早いのですが、そういうわけにもいかないので😅、閉じるボタンの実装方法をいったんゼロから見直してみたいと思います。

    せっかくの新アイデアに水を差すようなかたちになってしまい恐縮です…。

    元々「意図せず出てしまったが消し方がわからない」という方に向けた緩和策の提案だったので、閉じるボタンのわかりやすさには劣りますが、アウトプットバーの右クリックメニューに「アウトプットを閉じる」と追加するだけでもいいかもしれません。


    フォーカスつながりでお聞きしたいのですが、
    検索または置換ダイアログを表示したまま、キーボードだけでエディタにフォーカスを移す方法はありますか?

     |  nimx  |  返信
  8. いえいえ、こちらこそ詳しく調べていただいて助かりました。

    「×」ボタンの件は、まさかこんなところに影響が出ているとは…という感じです😅

    > せっかくの新アイデアに水を差すようなかたちになってしまい恐縮です…。

    いえいえ、むしろ今回の件のおかげで、実装方法を見直す良いきっかけになりました。

    右クリックメニューに [アウトプットを閉じる] という案もありがとうございます。

    最悪、閉じるボタンを廃止することになった場合は、採用させていただきたいと思います。

    > フォーカスつながりでお聞きしたいのですが、
    > 検索または置換ダイアログを表示したまま、キーボードだけでエディタにフォーカスを移す方法はありますか?

    もしかすると Windows の機能で何かあるのかもしれませんが、Mery 側では、たぶんないと思います。

    ESC キーでエディターにフォーカスを戻して、Ctrl + F キーで検索ダイアログを再表示することはできますが、どうしても検索ダイアログは一度閉じたり、再び開いたりするかたちになってしまいますね。

    一応、検索ダイアログを常に表示しておきたいということでしたら、BOOTH にて「検索バー プラグイン」を公開しています。

    これを使えば、ショートカットキーで検索ボックスとエディターを行き来できるようになります。

    【BOOTH】検索バー プラグイン
    https://mery.booth.pm/items/8563125

    ご興味があれば、お試しください。

     |  Kuro  |  返信
  9. > いえいえ、むしろ今回の件のおかげで、実装方法を見直す良いきっかけになりました。
    > 最悪、閉じるボタンを廃止することになった場合は、採用させていただきたいと思います。

    なにか光の一手が見つかりますように!

    > もしかすると Windows の機能で何かあるのかもしれませんが、Mery 側では、たぶんないと思います。

    クリックならできるのでもしかして、と思ってましたが、そうでしたか~。

    > 一応、検索ダイアログを常に表示しておきたいということでしたら、BOOTH にて「検索バー プラグイン」を公開しています。

    各プラグイン、実は試作段階からこっそり使わせてもらっています。
    特にフィードバックなどできなかったのでこっそり支援版にしました。
    Meryにはお世話になっているので、あらためて、いつもありがとうございます😊

    そういえば、以前は検索するだけでも置換ダイアログを開き、検索ダイアログは一致件数を見たい時くらいでしたが、現在は検索バーもたくさん使うようになりました。
    (あとは Ctrl + D を検索とみなして使ったり。後に Ctrl + Shift + ↑/↓ も知りましたが、とっさに使えなくて…)

    置換ダイアログからキーボードでフォーカスを移せないのは残念ですが、発見もありました。
    わかりやすさ重視で検索バーを Alt + F にしたものの、いまいち押しにくいと思っていたんですが、検索ダイアログと入れ替えれば良かったんですね。

    なんとなく別物だと感じていて、上書きする発想がありませんでした。
    またひとつ Mery の使いやすさが上がりました♪

     |  nimx  |  返信
  10. > なにか光の一手が見つかりますように!

    ありがとうございます。なんとか良い方法を探してみます。

    > 各プラグイン、実は試作段階からこっそり使わせてもらっています。
    > 特にフィードバックなどできなかったのでこっそり支援版にしました。
    > Meryにはお世話になっているので、あらためて、いつもありがとうございます😊

    そうでしたか、しかも支援版までありがとうございます!😆

    フィードバックはもちろん、こうして Mery を長く使っていただいていることも含めて、こちらこそありがとうございます。

    > クリックならできるのでもしかして、と思ってましたが、そうでしたか~。

    そうなんですよね。

    Mery のコマンドのショートカットキーを処理しているのは、基本的にエディターウィンドウ側なので、Ctrl + F で検索ダイアログを表示することはできても、検索ダイアログ側ではショートカットキーを処理できないので、エディターに戻るすべがない、ということになってしまいますね。

    他のエディターも確認してみましたが、EmEditor さん、秀丸エディタさん、サクラエディタさん、Notepad++ でも、それっぽい機能は確認できませんでした。(もしかすると、どこかにあるのかもしれませんが)

    とはいえ、Mery の場合は、機能を限定すれば対応できないこともないかもしれません。

    というのも、[ウィンドウ] カテゴリに [アクティブなペイン] というコマンドがあります。

    これは、現在アクティブなエディターペインにフォーカスを移動するための機能なのですが、意味的にはまさに今回の用途に該当します。

    なので、検索ダイアログですべてのショートカットキーに対応することはできなくても、このコマンドだけに限定すれば、なんとか拾えるようにできそうな気がします。(とはいえ、行き来できるわけではなく、エディターペインに戻れるようになる、という仕様になりますが)

    まだ、実際にできるかどうかは確認していませんが、もしできればキーボードだけで操作が完結するようになって便利そうなので、こちらの件については改めて検討してみたいと思います。

    > なんとなく別物だと感じていて、上書きする発想がありませんでした。
    > またひとつ Mery の使いやすさが上がりました♪

    なにぶん、趣味でちまちま開発しているものですから、のんびりした開発ペースではありますが、そう言っていただけるとモチベーションにつながります。

     |  Kuro  |  返信
  11. > そうでしたか、しかも支援版までありがとうございます!😆
    > フィードバックはもちろん、こうして Mery を長く使っていただいていることも含めて、こちらこそありがとうございます。

    > なにぶん、趣味でちまちま開発しているものですから、のんびりした開発ペースではありますが、そう言っていただけるとモチベーションにつながります。

    どういたしまして~!
    使用してお礼を言われると照れますね…へへ😊

    不具合解消は早いし、ゆったりペースだと機能追加などについていきやすいので、これからも無理のない範囲で末永く続けていただけると嬉しいです。

    > Mery のコマンドのショートカットキーを処理しているのは、基本的にエディターウィンドウ側なので、Ctrl + F で検索ダイアログを表示することはできても、検索ダイアログ側ではショートカットキーを処理できないので、エディターに戻るすべがない、ということになってしまいますね。

    仕組みから結果までよくわかりました。
    他のエディタも確認していただいて、ありがとうございます。

    適応範囲を広げるにも、ひとつひとつ精査して細かく対応することになり、大変そうです。

    > というのも、[ウィンドウ] カテゴリに [アクティブなペイン] というコマンドがあります。

    > なので、検索ダイアログですべてのショートカットキーに対応することはできなくても、このコマンドだけに限定すれば、なんとか拾えるようにできそうな気がします。(とはいえ、行き来できるわけではなく、エディターペインに戻れるようになる、という仕様になりますが)

    つまり、 [アクティブなペイン] と [検索](または [置換] )のショートカットキーを使えば、ダイアログを表示したまま、行き来できるということですね。

    可能性の段階ですが、想像するとわくわくします😆

     |  nimx  |  返信
  12. > > フォーカスつながりでお聞きしたいのですが、
    > > 検索または置換ダイアログを表示したまま、キーボードだけでエディタにフォーカスを移す方法はありますか?
    >
    > もしかすると Windows の機能で何かあるのかもしれませんが、Mery 側では、たぶんないと思います。

    貴方の傍に這いよる混沌 AutoHotkey v2 を使うとこんな感じに実現できます。

    #Requires AutoHotkey v2.0
    global mery_mode := 0
    MeryBack() {
    	global mery_mode
    	try {
    		mery_mode ? WinActivate("- Mery") : WinActivate("検索|置換")
    		mery_mode ? mery_mode := 0 : mery_mode := 1
    	}
    }
    #HotIf WinActive("ahk_exe Mery.exe")
    	+Esc::	MeryBack()
    #HotIf
    

    窓に、窓に、AutoHotkey v2 が!

     |  enaka  |  返信
  13. > 貴方の傍に這いよる混沌 AutoHotkey v2 を使うとこんな感じに実現できます。

    スクリプトを書いてくださり、ありがとうございます😆

    実は、先述のペンタブ利用を快適にするために MouseGestureL.ahk を使用しています。
    ただ、それ以上のことは全然わかっていないので、AI に併用できるようにしてもらいました。
    (あとショートカットキーを Ctrl + E にしました)

    ; --- Mery切り替えスクリプト(v1.1用) ---
    mery_mode := 0
    MeryBack() {
    	global mery_mode
    	SetTitleMatchMode, 2
    	if (mery_mode) {
    		WinActivate, - Mery
    		mery_mode := 0
    	} else {
    		if (WinExist("検索 ahk_exe Mery.exe")) {
    			WinActivate, 検索 ahk_exe Mery.exe
    		} else if (WinExist("置換 ahk_exe Mery.exe")) {
    			WinActivate, 置換 ahk_exe Mery.exe
    		}
    		mery_mode := 1
    	}
    }
    #If (WinActive("ahk_exe Mery.exe") || WinActive("検索 ahk_exe Mery.exe") || WinActive("置換 ahk_exe Mery.exe"))
    	^e:: MeryBack()
    #If
    

    私は二つのポータブル版を同時に使用することがあるのですが、別名の実行ファイル(Mery_sub.exe)と併用可能なものもできました。

    ; --- Mery & Mery_sub 両対応・自動判別スクリプト(v1.1用) ---
    mery_mode := 0
    MeryBack() {
    	global mery_mode
    	SetTitleMatchMode, 2
    	WinGet, active_exe, ProcessName, A
    	if (active_exe = "") {
    		if (WinActive("ahk_class #32770")) {
    			WinGet, active_exe, ProcessName, A
    		}
    	}
    	if (active_exe != "Mery.exe" && active_exe != "Mery_sub.exe") {
    		return
    	}
    	if (mery_mode) {
    		WinActivate, - Mery ahk_exe %active_exe%
    		mery_mode := 0
    	} else {
    		if (WinExist("検索 ahk_exe " active_exe)) {
    			WinActivate, 検索 ahk_exe %active_exe%
    		} else if (WinExist("置換 ahk_exe " active_exe)) {
    			WinActivate, 置換 ahk_exe %active_exe%
    		}
    		mery_mode := 1
    	}
    }
    #If (WinActive("ahk_exe Mery.exe") || WinActive("ahk_exe Mery_sub.exe") || WinActive("検索 ahk_exe Mery.exe") || WinActive("検索 ahk_exe Mery_sub.exe") || WinActive("置換 ahk_exe Mery.exe") || WinActive("置換 ahk_exe Mery_sub.exe"))
    	^e:: MeryBack()
    #If
    

    実際できるようになるとすごくいいですね!
    見た目も操作も静かになった感じがします。

    > 窓に、窓に、AutoHotkey v2 が!

    初心者にわかりやすく深く理解することもできる取説と一緒に入っておいで……。

     |  nimx  |  返信
  14. 正規表現を使うための設定がコピペから漏れていたのと、別のアプリのダイアログにも反応していたのを直しました。
    Mery[0文字以上の任意の文字].exe だけでなくLibreOfficeなど任意のアプリ名で使えるようにしました。

    ただ「検索.txt」などを編集中のMeryと検索ダイアログの区別は出来ないです(笑)

    #Requires AutoHotkey v2.0
    #SingleInstance Force
    #UseHook
    InstallKeybdHook()
    SetKeyDelay(0)
    SetTitleMatchMode "RegEx"
    
    global dlg_mode := 0
    DlgBack(hwnd) {
    	global dlg_mode
    	try {
    		dlg_mode ? WinActivate("( ) " hwnd) : WinActivate("(検索|置換|検索と置換) " hwnd)
    		dlg_mode ? dlg_mode := 0 : dlg_mode := 1
    	}
    }
    
    #HotIf WinActive("ahk_exe Mery(.*).exe")
    	^e::	DlgBack("ahk_exe Mery(.*).exe")
    #HotIf
    
     |  enaka  |  返信
  15. >私は二つのポータブル版を同時に使用することがあるのですが、別名の実行ファイル(Mery_sub.exe)と併用可能なものもできました。

    同時に起動して両方でダイアログを開いた場合を区別するため、別々にHotkeyを定義する必要がありました。

    #HotIf WinActive("ahk_exe Mery.exe")
    	^e::	DlgBack("ahk_exe Mery.exe")
    #HotIf
    
    #HotIf WinActive("ahk_exe Mery_Sub.exe")
    	^e::	DlgBack("ahk_exe Mery_Sub.exe")
    #HotIf
    
     |  enaka  |  返信
  16. 改良していただき、ありがとうございます。
    上記二つを組み合わせて、それぞれの Mery で行き来できるようになりました。

    他のスクリプトやバージョンとの兼ね合いが気になっていましたが、新たに .ahk ファイルにして起動するだけで良かったんですね。

    他に使う方がいらっしゃるかわかりませんが、注意点として、
    Mery のショートカットキー(Ctrl + F や Ctrl + R)を押したあと、スクリプト側のショートカットキー(Ctrl + E)を初めて押すときだけ効かないようです。

     |  nimx  |  返信
  17. > 他に使う方がいらっしゃるかわかりませんが、注意点として、
    > Mery のショートカットキー(Ctrl + F や Ctrl + R)を押したあと、スクリプト側のショートカットキー(Ctrl + E)を初めて押すときだけ効かないようです。

    初回はどちらにフォーカスがあるかをAutoHotkeyがまだ記憶していないので、Meryの外部ツールからは如何ともし難く。
    同様に指定したキーボードショートカットでなくマウスクリックでフォーカス変更すると、記憶した内容と食い違うので一回余分に押す必要があります。

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