settabgroupについてNo.08389
tn さん 05/06/22 16:10
 
settabgroupで
グループ番号に-1を指定すると、空いているグループ番号が自動的に
割り当てられて分離します。

とありますが、空いているグループ番号を取得することは可能ですか?
というのも、複数のファイルを一括で別のグループに分離したいのですが
マクロで可能ですか?
settabgroupでは、グループ番号に任意の値を指定できるので、
下記のように、
while(選択ファイル数分){
 settabgroup #XXX,5;
}
グループ番号を固定して書くことも出来ると思うのですが、これだと、
グループが4つあった場合、グループ番号が0,1,2,5になって
しまい、都合が悪いです。
http://www.maruo.co.jp/turukame/3/x08333_.html#8347
にあるようなマクロとか。

空いているグループ番号を取得することが出来ない場合、settabgroupの
戻り値とかで、設定されたグループ番号を取得できるようには出来ない
ですか?それができれば、

#GrNo = -1;
while(選択ファイル数分){
 #GrNo = settabgroup #XXX,#GrNo;
}
見たいなことができて便利と思うのですが。

まぁ結局、0,1,2,3とあった場合にグループ1を閉じたら同じ
なんですが・・・

ちなみに、
settabgroup 0,100;
とすると、秀丸が強制終了してしまいます。
再現しますでしょうか?
WinXp Sp2 β30です。


[ ]
RE:08389 settabgroupについてNo.08404
bouz さん 05/06/23 08:23
 
>マクロで可能ですか?
ということなので、行きがかり上作ってみました。

//一番若い空きタブグループ
call tabgrouptotal;
call emptytabgroup; // ##return: 一番若い空きタブグループ
message " 空きグループは "+ str(##return)+"\n(このグループ: "+str(tabgroup)
+" 最大グループ: "+str(#tabgroupmax) +")";
endmacro;

tabgrouptotal:
 #tabgrouptotal = 0;
 #tabgroupmax = 0;
 if (tabmode) {
  ##tab[0]= -1;
  ##i = 0;
  while (##i<hidemarucount) {
   ##j = 0;
   while (##j<#tabgrouptotal) {
    if (tabgroup[##i]==##tab[##j]) break;
    ##j = ##j + 1;
   }
   if (##j==#tabgrouptotal) {
    if (tabgroup[##i] > #tabgroupmax) #tabgroupmax = tabgroup[##i];
    ##tab[##j] = tabgroup[##i];
    #tabgrouptotal = #tabgrouptotal + 1;
   }
   ##i = ##i + 1;
  }
 }
 return #tabgroupmax;

emptytabgroup:
 ##i = 0;
 while (##i<#tabgroupmax) {
  ##j = 0;
  while (##j<hidemarucount) {
   if (tabgroup[##j] == ##i) break;
   ##j = ##j + 1;
  }
  if (##j == hidemarucount) return ##i;
  ##i = ##i + 1;
 }
 return #tabgroupmax + 1;

[ ]
RE:08404 settabgroupについてNo.08409
秀丸担当 さん 05/06/23 15:27
 

>とありますが、空いているグループ番号を取得することは可能ですか?

については、bouzさんが示されているような方法でできるのではないかと思いま
す。

>ちなみに、
>settabgroup 0,100;
>とすると、秀丸が強制終了してしまいます。
>再現しますでしょうか?

これままずい問題でした。
修正させていただきます。

[ ]
RE:08389 settabgroupについてNo.08414
h-tom さん 05/06/24 21:51
 

h-tom です。

>空いているグループ番号を取得することが出来ない場合、settabgroupの
>戻り値とかで、設定されたグループ番号を取得できるようには出来ない
>ですか?それができれば、
>
>#GrNo = -1;
>while(選択ファイル数分){
> #GrNo = settabgroup #XXX,#GrNo;
>}
>見たいなことができて便利と思うのですが。

分離する秀丸のウィンドウの番号や、ウィンドウハンドルはわかっているはず
なので、tabgroupの角カッコ付きを使えば、分離先のタブグループ番号を取得
できますよ。

#GrNo = -1;
while(選択ファイル数分){
    settabgroup #XXX, #GrNo;
    //if文はいらないかな?
    if(#GrNo == -1) #GrNo = tabgroup[#XXX];
}

[ ]
RE:08414 settabgroupについてNo.08427
tn さん 05/06/27 10:29
 
>
>分離する秀丸のウィンドウの番号や、ウィンドウハンドルはわかっているはず
>なので、tabgroupの角カッコ付きを使えば、分離先のタブグループ番号を取得
>できますよ。
>
>#GrNo = -1;
>while(選択ファイル数分){
>    settabgroup #XXX, #GrNo;
>    //if文はいらないかな?
>    if(#GrNo == -1) #GrNo = tabgroup[#XXX];
>}

おお!確かに。
気づきませんでした。
ありがとうございます。
ただ、秀丸のマクロは便利なのに
Tab系のマクロについては、もう少し便利になると
いいなぁと・・・

[ ]
RE:08404 settabgroupについてNo.08428
tn さん 05/06/27 10:30
 
>>マクロで可能ですか?
>ということなので、行きがかり上作ってみました。
>
ありがとうございます。
助かります。

[ ]
RE:08428 settabgroupについてNo.08463
bouz さん 05/06/29 14:02
 
すぐ出来るようになりました。(^^)
いちおう改版をば。

//一番若い空きタブグループID
call emptytabgroup;
if (##return>=0) message "このグループは "+str(tabgroup) +"\n空きは "+ str(#
#return);
endmacro;

emptytabgroup:
 if (tabgrouptotal>0) {
  ##i = 0;
  while (##i<64) {
   if (getcurrenttab(0, ##i)==0) return ##i;
   ##i = ##i + 1;
  }
 }
 return -1;

[ ]