last updated:2023/12/27
秀丸エディタ Ver.4.10以降から、「タブモード」が追加されています。タブを含むウィンドウを複数表示できます。(タブグループ)
「タブモード」に変更すると、
秀丸エディタのウィンドウ操作 → タブ操作
になります。
「開く」「閉じる」「切り替える」に関しては、秀丸エディタウィンドウ操作と同じコマンドを使います。
基本操作は秀丸エディタウィンドウと同じですが、タブ、タブグループに関するキーワード、コマンドが追加されています。タブの操作に関しては、追加されたコマンドを使用する事になります。
タブ関連マクロ命令の使い方に関しては、マクロヘルプ- 秀丸エディタ管理(タブ編) に例があるので参考にしてください。
タブをまとめているタブグループに関する内容です。
タブグループを調べるには2つのキーワードがあります。
状況にもよりますが、tabgrouporder(順番) は操作すると変化してしまう場合もあるので、 tabgroup(グループID) を使ったほうがいいでしょう。
どちらのキーワードも角カッコで添え字を付けて、他の秀丸エディタからも値を得ることができます。 (ウィンドウハンドルさえわかれば、どちらも取得可能)
#id = tabgroup[hidemaruhandle(1)];
#oder = tabgrouporder[hidemaruhandle(1)];
タブグループの数は、tabgrouptotal
キーワードで取得できます。
新しいタブグループを作る方法は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\"";
新しいタブグループが作成され、ファイルを開きます。
残念ながら、タブグループ間を移動する命令は無いため、マクロで対応します。 (設定により、タブの移動(次のタブ、前のタブ)でタブグループ間を含む移動は可能になりますが、単純にタブグループだけの移動という命令はない)
例として「次のタブグループ」「次のタブグループ」に移動するマクロを作成します。条件として、最小化しているタブグループには、移動しません。
//「次のタブグループ」
//タブモードでなければ、次の秀丸エディタへ
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
でアクティブなウィンドウ(タブグループ)を切り替えます。
(タブグループの切り替えに、nexthidemaru
、prevhidemaru
を使わないのは、「タブの切り替え」になってしまうから)
//「前のタブグループ」
//タブモードでなければ、前の秀丸エディタへ
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;
タブの操作は、基本的にはウィンドウ操作と同じです。
タブを切り替えるには、次のタブ nexttab
、前のタブ prevtab
を使いますが、切り替えの範囲はタブグループ内のみです。
nexthidemaru
prevhidemaru
も使えますが、切り替えの順番は秀丸エディタ本体の設定に左右されます。nexttab
、前のタブ prevtab
は使用できません。タブグループ内のタブの数は、tabtotal
キーワードで取得可能です。
自分がタブグループ内の何番目のタブなのかは、taborder
キーワードで取得可能です。
タブの位置からウィンドウハンドルを取得するには、gettabhandle
を使います。
//自分自身のハンドル
//本来は、hidemaruhandle(0) でいいが、gettabhandleの例として
#handle = gettabhandle(1, tabgrouporder, taborder);
//同じタブグループの右隣のタブのハンドル
#next = gettabhandle(1, tabgrouporder, taborder + 1);
タブグループの任意のタブ位置に移動するには、settaborder
文を使います。自分自身を移動するのではなく、他のファイルを移動する場合は、gettabhandle
でウィンドウハンドルを取得する事。
//同じタブグループの右隣のタブを先頭に移動
#next = gettabhandle(1, tabgrouporder, taborder + 1);
settaborder #next, 0;