last updated:2021/08/02

Hidemaru Q and A

第III部〜秀丸マクロのいろはにほへと
 秀丸エディタウィンドウの管理(タブモード編)


秀丸エディタウィンドウの管理(タブモード編)

秀丸エディタ Ver.4.10以降から、「タブモード」が追加されています。タブを含むウィンドウを複数表示できます。(タブグループ)

「タブモード」に変更すると、

秀丸エディタのウィンドウ操作 → タブ操作

になります。

「開く」「閉じる」「切り替える」に関しては、秀丸エディタウィンドウ操作と同じコマンドを使います。

基本操作は秀丸エディタウィンドウと同じですが、タブ、タブグループに関するキーワード、コマンドが追加されています。タブの操作に関しては、追加されたコマンドを使用する事になります。

タブ関連マクロ命令の使い方に関しては、マクロヘルプ- 秀丸エディタ管理(タブ編) に例があるので参考にしてください。

注意
タブに関する各種コマンドを使う場合は、必ず「タブモード」になっている事を確認してから使用する事。ウィンドウモードで、タブ関連のコマンドを使用しても期待する動作にならない場合があります。

【1】タブグループ

タブをまとめているタブグループに関する内容です。

タブグループを調べるには2つのキーワードがあります。

tabgroup
グループIDを表します。タブグループに与えられる固有の識別番号です。通常、0 から順番に割り当てられていますが、タブグループを閉じたりすると飛び飛びの番号になったりもします。自分自身は 0 とは限りません。
tabgrouporder
タブグループの表示されている順番を表します。(自分自身は 0 になる) タブグループの順番が変わると、この値も変化します。

状況にもよりますが、tabgrouporder(順番) は操作すると変化してしまう場合もあるので、 tabgroup(グループID) を使ったほうがいいでしょう。

どちらのキーワードも角カッコで添え字を付けて、他の秀丸エディタからも値を得ることができます。 (ウィンドウハンドルさえわかれば、どちらも取得可能)

#id   = tabgroup[hidemaruhandle(1)];
#oder = tabgrouporder[hidemaruhandle(1)];

タブグループの数は、tabgrouptotal キーワードで取得できます。

[1-1] 新しいタブグループを作る

新しいタブグループを作る方法は2つあります。

まず、既存のタブグループから分離するにはsettabgroupコマンドを使用します。

コマンドの引数には、以下を指定します。

例えば、編集中の秀丸エディタを、グループID 1 のタブへ分離する場合は以下のようになります。

// 編集中の秀丸エディタを、グループID 1 のタブへ分離する
//タブモードでなければ終了
if(tabmode == false) endmacro;
settabgroup hidemaruhandle(0), 1;

グループID 1 など既存のタブグループではなく、新しいタブグループを作りたい場合は、グループIDに、-1 を指定します。

// 編集中の秀丸エディタを、新しいタブグループに分離する。
//タブモードでなければ終了
if(tabmode == false) endmacro;
settabgroup hidemaruhandle(0), -1;

次に、ファイルを開く時に、新しいタブグループで開く には、起動オプション /i を指定します。

// 新しいタブグループでファイルを開く
openfile "/i \"C:\\My Documents\\memo.txt\"";

新しいタブグループが作成され、ファイルを開きます。

[1-2] タブグループ間の移動

残念ながら、タブグループ間を移動する命令は無いため、マクロで対応します。 (設定により、タブの移動(次のタブ、前のタブ)でタブグループ間を含む移動は可能になりますが、単純にタブグループだけの移動という命令はない)

例として「次のタブグループ」「次のタブグループ」に移動するマクロを作成します。条件として、最小化しているタブグループには、移動しません。

「次のタブグループ」へ移動するマクロ
//「次のタブグループ」
//タブモードでなければ、次の秀丸エディタへ
if(tabmode == 0){
    prevhidemaru;
    endmacro;
}
//タブグループの数
#max = tabgrouptotal;
//タブグループが1つなら終了
if(#max == 1)endmacro;

//tabgrouporderは、自分は0なので、1からチェック開始する。
#next = 1;

//タブグループをチェックする
//切り替えれば終了する
while(#next < #max){
    //次のオーダーの、アクティブなタブのハンドルを取得
    #nexttabgroup = getcurrenttab( 1, #next);
    //ウィンドウ(タブ)の表示状態を取得
    #state = windowstate[#nexttabgroup];
    //ウィンドウの状態を確認、非表示か最小化以外なら切り替える
    if(#state != 2){
        //タブグループを切り替え。自分自身は一番下に移動
        setactivehidemaru #nexttabgroup, -1;
        //チェックループを抜ける
        break;
    }
    //チェック対象を更新
    #next = #next + 1;
}
endmacro;
  • 状態のチェックを行い、タブグループが1つだけなら終了します。

  • tabgrouporderは、自分は0なので、順次加算して(2番目から順番に)チェックしていきます。

  • getcurrenttabは、タブグループ内の選択されているタブのウィンドウハンドルを調べる命令です。第1引数で、第2引数の意味を切り替えています。今回は タブグループの順番tabgrouporder を使用するので、

    第1引数:true
    第2引数:調べるタブグループの順番

    を指定します。

  • ウィンドウハンドルから表示状態をチェックし、最小化していなければ、 setactivehidemaru でアクティブなウィンドウ(タブグループ)を切り替えます。 (タブグループの切り替えに、nexthidemaruprevhidemaru を使わないのは、「タブの切り替え」になってしまうから)

「前のタブグループ」へ移動するマクロ
//「前のタブグループ」
//タブモードでなければ、前の秀丸エディタへ
if(tabmode == 0){
    prevhidemaru;
    endmacro;
}
//タブグループの数
#max = tabgrouptotal;
//タブグループが1つなら終了
if(#max == 1)endmacro;

//tabgrouporderは、自分は0なので、後からチェック開始する。
#prev = #max - 1;

//タブグループをチェックする
//切り替えれば終了する
while(#prev > 0){
    //下のオーダーの、アクティブなタブのハンドルを取得
    #prevtabgroup = getcurrenttab( 1, #prev);
    //ウィンドウ(タブ)の表示状態を取得
    #state = windowstate[#prevtabgroup];
    //ウィンドウの状態を確認、非表示か最小化以外なら切り替える
    if(#state != 2){
        //タブグループを切り替え。
        setactivehidemaru #prevtabgroup;
        //チェックループを抜ける
        break;
    }
    //チェック対象を更新
    #prev = #prev - 1;
}
endmacro;
  • 「次のタブグループ」とほぼ同じですが、タブグループのチェック方法が異なります。自分は「0」なので、最後(tabgrouptotal - 1)からチェックしていく事になります。

【2】タブ

タブの操作は、基本的にはウィンドウ操作と同じです。


目次に戻る