「次の文書で最後に使用した文書を表示する」オプションと「タブ表示順で移動」操作の両立方法について

  1. Kuro さん

    お疲れさまです。
    腱鞘炎はその後、いかがでしょうか。
    テレワークの会社が増え、今まで以上にチャットコミュニケーションが多くなっていますから、腱鞘炎の手首には辛いのでは…と少し心配しております^^;

    と、そんなところでスレッドを立てるのもアレなのですが、無理せず、手首の調子が良いときにご返信いただければと思います。

    Ver 3.0.4 で次の文書コマンドの移動順設定ができ、「おっ、これは…!」と注目しております。
    「Ctrl-Tab/Ctrl-Shift-Tab」では最後に使用した順のタブ移動をさせ、「Ctrl-PageDown/Ctrl-PageUp」では表示順でのタブ移動をさせたいと考えています。

    そこで「最後に使用した順の移動」をオプションで、「表示順の移動」ならマクロで実現できるかな、と期待してマクロリファレンスを眺めていましたが方法を見つけられませんでした。

    これはやはり、タブ移動はマクロでは実現できないでしょうか…?

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

    「タブ表示順で移動」(ひとつ右/ひとつ左)だけでしたら、次のようなマクロで実現できるとおもいます。

    #title = "次の文書(ひとつ右)"
    for (var i = 0, ds = editor.Documents, dc = ds.Count; i < dc; i++) {
      if (ds.Item(i) == editor.ActiveDocument) {
        (ds.Item(i + 1) || ds.Item(0)).Activate();
        break;
      }
    }
    #title = "前の文書(ひとつ左)"
    for (var i = 0, ds = editor.Documents, dc = ds.Count; i < dc; i++) {
      if (ds.Item(i) == editor.ActiveDocument) {
        (ds.Item(i - 1) || ds.Item(dc - 1)).Activate();
        break;
      }
    }

    もしも「最後に使用した順に表示する」のほうをマクロで実現するとなると、別途イベントマクロで「アクティブな文書の変更」や「ファイルを開いたとき」「文書を閉じたとき」「タブを移動したとき」を監視して、Editor.Tag プロパティにアクティブタブのフルパスか Editor.Documents.Item( i ) のインデックスを配列に保存しておく必要がありそうなのですが、配列の更新処理や回避処理の必要がある条件や状況がいろいろと多そうですので、かなり厄介でしょうね…。

     |  suukemaru  |  返信
  3. おおーっ!
    これです、これがやりたかった!

    なるほど、Document オブジェクトを Activate すれば文書の遷移が出来たわけですね。(見落としてました…^^;)

    これで、オプションで「次の文書コマンドで最後に使用した文書を表示する」をオンにして、このマクロを Ctrl-PgDn/PgUp に割り当て、実現したい動作になりました。

    これで私の環境では Mery も、ブラウザも、開発用の IDE も、全て Ctrl-Tab が最後に開いたタブに遷移、Ctrl-PgDn/PgUp で左右のタブに遷移にできました。
    Excel なんかも Ctrl-PgDn/PgUp はシート移動なので、この一貫性がかなり心地よいです。

     |  yuko  |  返信
  4. ご心配いただきありがとうございます。

    時々、ガクッとなるのでモノを持ったりするのは危険ですが、痛みは和らいだので簡単な作業なら大丈夫です ^^

    > 「次の文書で最後に使用した文書を表示する」オプションと「タブ表示順で移動」操作の両立方法について

    以前の回答で…

    引用:
    "機能の名前がややこしくなるので [次の文書] [前の文書] をその機能に変更し (というか昔の仕様に戻す)、新たに [右のタブ (文書)] [左のタブ (文書)] のような機能を追加する"

    ということで、実際にその仕様で実装したのですが、標準機能の [次の文書] の動作を変更してしまうとやっぱり怒られそうかなと思って、別途、オプション項目を追加したというわけです。

    なので、そのオプションを使って、なおかつ [右の文書]、[左の文書] というコマンドにキー割り当てをすればでき…、と思ったら、コマンドが見当たりませんね ^^;

    開発環境では存在しているので、本番環境に適用するのを忘れていたっぽいです、テヘペロ😂

    次のバージョンでは対応できると思いますので、よろしくお願いします。

     |  Kuro  |  返信
  5. > 時々、ガクッとなるのでモノを持ったりするのは危険ですが、痛みは和らいだので簡単な作業なら大丈夫です ^^

    それは何よりです。とはいえ、無理をなさらず…

    > なので、そのオプションを使って、なおかつ [右の文書]、[左の文書] というコマンドにキー割り当てをすればでき…、と思ったら、コマンドが見当たりませんね ^^;
    >
    > 開発環境では存在しているので、本番環境に適用するのを忘れていたっぽいです、テヘペロ😂

    そうなんです。
    私も「おっ、次の文書機能のオプションが追加とな。つまり、隣のタブに遷移するコマンドが用意されt…ない。そうか……」となって、隣のタブに移動する方法を探っていたわけです。

    これはもうテヘペロで済ますしかないですねw
    まぁ意図せず実装漏れを発見できたようで良かったです!

     |  yuko  |  返信
  6. 「最後に使用した文書を表示」というのはアクティブウィンドウの巻き戻しと同じ親しんだ要領だなと思ったものの、タブリストを右往左往する様子を想像してなんか直観的じゃなさそうとも思ったものです。

    そこで、アクティブタブを常にリストの先頭に配置し直す機能があったら、「次の文書」が視覚的にもシンクロするのでは?と想像しました。
    しかし、それではタブを選択するたびにガチャガチャとリストが入れ替わるのもストレスだなと。
    (設定ダイアログによくある多段タブの上下段が自動で入れ替わるの気持ち悪くないですか?あれです

    直前に参照してた文書を行き来する(Ctrlを一度放せばできるんですね!)のはよくやることですし、リスト順に移動するのもよくある操作なので、結局どっちの機能も使うことになるんでしょうね(慣れれば

     |  MM  |  返信
  7. > (設定ダイアログによくある多段タブの上下段が自動で入れ替わるの気持ち悪くないですか?あれで

    Meryの多段タブもそうでした。大変失礼いたしました。ごめんなさい。
    白状しますタブモード最近は使ってなかったです。
    Meryは段が入れ替わる時に凝ったエフェクトが入るので標準的な実装とは比べ物にならないくらい分かり易いです(視覚的に追える)。ちょっと驚きました!

     |  MM  |  返信
  8. 大変今更なのですが、「次の文書コマンドで最後に使用した文書を表示する」にチェックを入れると、タブバー上でのスクロールでのタブ移動も同様の遷移になってしまうのですね。

    意図した仕様であれば申し訳ないのですが、個人的にはタブバー上でのホイールは従来通り「下スクロール→右タブ移動、上スクロール→左タブ移動」の方が直感的かなと思いました。

     |  yuko  |  返信
  9. > タブバー上でのホイールは従来通り「下スクロール→右タブ移動、上スクロール→左タブ移動」

    とりあえずは AutoHotkey や X-MouseButtonControl などのようなウインドウクラスを詳細に指定できるマウスカスタマイズ系ソフトで「Mery.exe」プロセスの「TPageControlEx」クラスを指定して、ホイールスクロールに「タブ表示順での移動 (ひとつ右/ひとつ左)」マクロ用に割りあてたショートカットキー (Ctrl+PgDn/PgUp) にリマップするとよさそうですね。
    多ボタンマウスなら、さらにボタン4/5(X1/X2) か左右チルトをホイール UP/DOWN にリマップとか。

     |  sukemaru  |  返信
  10. ご意見ありがとうございます。

    意図した仕様というわけではありません。Ver 3.0.4 では、そもそも「右のタブ」「左のタブ」の実装が漏れていますので。

    次のバージョンでは「次の文書」「前の文書」に加えて「右の文書」「左の文書」のコマンドを実装しますので、タブ上でのマウスホイールの動作は左右のタブ移動に割り当てておきますね。

     |  Kuro  |  返信
  11. > sukemaru さん
    なるほど~ AutoHotkey でそこの部分のウィンドウクラスも取れるんですね。

    > Kuro さん
    ありがとうございます!

    そういえば、DirectWrite の速度UPにまたもチャレンジしているようですね👏
    あまり仕組みを理解していないのですが、DirectWrite と Direct2D の描画って組み合わせることができるんですね。ちょっと意外でした。

     |  yuko  |  返信
  12. いえいえ、次のリリースがいつになるのかわかりませんが…。

    > そういえば、DirectWrite の速度UPにまたもチャレンジしているようですね👏

    毎回、挑戦しては敗北して来ました… ^^;

    > あまり仕組みを理解していないのですが、DirectWrite と Direct2D の描画って組み合わせることができるんですね。ちょっと意外でした。

    そうなんですよね。今までは GDI 互換モードというやつで DirectWrite と GDI を小刻みに切り替えて描画していたのですが、どうもコレが遅いようで。

    改行マークとか折り返し線とか、今まで GDI で描画していた部分をすべて Direct2D に置き換えて、GDI と DirectWrite の切り替えをなくするとかなり高速化できました。

    ついでに GDI 互換モードを廃止したことで HackGen (等幅フォント) の幅も、半角:全角が 1:2 と正常な値が取得できるようになりました。

    実際には、Direct2D は座標が小数なので、Mery のように座標が整数のテキストエディターですと文字幅の計算で小数点以下の誤差が蓄積することでやはりズレてしまうんですけどね…😢

    でも、これでズレを補正するロジックも組めるようになるので Mery の DirectWrite も普段使えるぐらいのレベルになるかもしれません。

     |  Kuro  |  返信
  13. > そうなんですよね。今までは GDI 互換モードというやつで DirectWrite と GDI を小刻みに切り替えて描画していたのですが、どうもコレが遅いようで。

    ほぇ~、そんな仕組みで描画してたんですね😮
    結構気を遣わないといけなさそうな処理な雰囲気ですね。

    > ついでに GDI 互換モードを廃止したことで HackGen (等幅フォント) の幅も、半角:全角が 1:2 と正常な値が取得できるようになりました。

    ということは、かつてからあった 1.5 の倍数じゃないと半角全角比がズレる問題が解消されるということですか?
    速度も速くなって問題も解消とは、素晴らしい…!

     |  yuko  |  返信
  14. > 結構気を遣わないといけなさそうな処理な雰囲気ですね。

    そうなんですよね。Windows 7 だと従来の小刻みに受け渡す方式のほうが速いのですが、Windows 8 ~ 10 にかけて Direct2D の最適化が進んでいるようで、画面を 1 度に丸ごと受け渡すほうが速くなってました😅

    > ということは、かつてからあった 1.5 の倍数じゃないと半角全角比がズレる問題が解消されるということですか?

    はい。ズレを補正できる仕組みが導入できるだけで、正確な文字幅で描画できるようになるわけではないのですが (ややこしいw)、細かいことに目を瞑ればフォントサイズにかかわらず見た目がピッタリそろうようになると思います。

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