tabgrouptotalの追加は?No.08099
fleakflap さん 05/06/09 17:14
 
 tabgroupを使えば、とりあえず、タブモードでいくつのウインドウが開いているか
を調べることはできますが、タブモードで開いているウインドウが分かる変数があっ
た方が簡便だと思われます。

 可能であれば、tabgroupがいくつあるか(タブモードで開いている秀丸ウインドウ
の数)を示す変数(tabgrouptotalみたいな)を追加して頂けないでしょうか?


[ ]
RE:08099 tabgrouptotalの追加は?No.08104
秀丸担当 さん 05/06/09 18:51
 

> tabgroupを使えば、とりあえず、タブモードでいくつのウインドウが開いているか
>を調べることはできますが、タブモードで開いているウインドウが分かる変数があっ
>た方が簡便だと思われます。

確かにあったほうがいいような気もします。
具体的にいうとどのようなときに必要でしょうか。
分離しているタブがあるかどうかを調べるのであれば、
if(tabtotal==hidemarucount)でできそうな気もしますし。

[ ]
RE:08104 tabgrouptotalの追加は?No.08116
bouz さん 05/06/10 09:59
 
>
>> tabgroupを使えば、とりあえず、タブモードでいくつのウインドウが開いているか
>>を調べることはできますが、タブモードで開いているウインドウが分かる変数があっ
>>た方が簡便だと思われます。
>
>確かにあったほうがいいような気もします。
>具体的にいうとどのようなときに必要でしょうか。
>分離しているタブがあるかどうかを調べるのであれば、
>if(tabtotal==hidemarucount)でできそうな気もしますし。

タブ→ウィンドウがあれば、このタブの右側を閉じる、とかそんな風な
ことがマクロで出来るようになります。

[ ]
RE:08116 tabgrouptotalの追加は?No.08123
秀丸担当 さん 05/06/10 13:34
 

>タブ→ウィンドウがあれば、このタブの右側を閉じる、とかそんな風な
>ことがマクロで出来るようになります。

このタブの右側を閉じる、というようなことは現時点でもできます。

#i = 0;
while(#i<hidemarucount){
    if( tabgroup[#i] == tabgroup && taborder[#i] > taborder ) {
        closehidemaru #i;
        if( result == true ) continue;
    }
    #i = #i + 1;
}


tabgrouptotalがあれば「このタブの右側を閉じる」ができるようになるわけで
はないと思いますが、タブ→ウィンドウとはどういう意味でしょうか。

[ ]
RE:08123 tabgrouptotalの追加は?No.08125
bouz さん 05/06/10 14:04
 
>このタブの右側を閉じる、というようなことは現時点でもできます。
>
>#i = 0;
>while(#i<hidemarucount){
>    if( tabgroup[#i] == tabgroup && taborder[#i] > taborder ) {
>        closehidemaru #i;
>        if( result == true ) continue;
>    }
>    #i = #i + 1;
>}
>
>

気が付きませんでした。さすがです。

>tabgrouptotalがあれば「このタブの右側を閉じる」ができるようになるわけで
>はないと思いますが、タブ→ウィンドウとはどういう意味でしょうか。

おっしゃるとおりです。(^_^;)

> タブモードで開いているウインドウが分かる変数
を、「タブのグループ内の番号」から「ハンドル」を得るという意味で拡張解釈した
のでした。
それがあると例えば右側のタブに対して、
closehidemaru gethandlefromtaborder(taborder+1);
みたいに「簡単に」できるな、と思った次第です。

> tabgroupがいくつあるか(タブモードで開いている秀丸ウインドウの数)を示す変
>数(tabgrouptotalみたいな)

これについては、秀丸担当さんと同じく、具体的にfleakflap さんがどういうケース
を想定されているのか聞いてみないと解りません。

[ ]
RE:08125 tabgrouptotalの追加は?No.08131
秀丸担当 さん 05/06/10 14:55
 

>を、「タブのグループ内の番号」から「ハンドル」を得るという意味で拡張解釈した
>のでした。
>それがあると例えば右側のタブに対して、
>closehidemaru gethandlefromtaborder(taborder+1);
>みたいに「簡単に」できるな、と思った次第です。

そういうことでしたか。
それはそれで便利かもしれないですが、同じことができるので、あまり秀丸の肥
大化をしないようにしたいと思います。

[ ]
RE:08131 tabgrouptotalの追加は?No.08134
bouz さん 05/06/10 15:19
 
>そういうことでしたか。
そうなんです。つい横やりを入れてしまう癖が出ます。済みません。

>それはそれで便利かもしれないですが、同じことができるので、あまり秀丸の肥
>大化をしないようにしたいと思います。

全く同じ意見です。
引き合いに出した例などでは、先のマクロで十分だと思います。参考になります。
ありがとうございました。

[ ]
RE:08104 tabgrouptotalの追加は?No.08329
fleakflap さん 05/06/21 17:08
 
 tabgrouptotalの必要性は、統一性と便利性です。
 taborderにはtabtotalがあるわけで、ほぼ同系のコマンドであるtabgroupにもtabo
rdertotalに該当するコマンドがあったほうが、言語として統一感があるような気が
したからです。(ちなみに、「tabtotalの値もtaborderを使えば見つかるから不必要
だ」とも言えなくもないのですが、やはり便利なためにtabtotalが用意されているの
であれば、tabgrouptotalも「tabgroupを使えば得られる」と言わないで、簡単でス
マートに見つかった方が、(プログラミング経験のない一般の人でも気軽に扱える言
語としての)秀丸マクロ言語らしいかな、と思った訳です。
 実用面では、実に多くのシチュエーションで使われると思います。

[ ]
RE:08329 tabgrouptotalの追加は?No.08354
秀丸担当 さん 05/06/22 09:57
 

> tabgrouptotalの必要性は、統一性と便利性です。
> taborderにはtabtotalがあるわけで、ほぼ同系のコマンドであるtabgroupにもtabo
>rdertotalに該当するコマンドがあったほうが、言語として統一感があるような気が
>したからです。(ちなみに、「tabtotalの値もtaborderを使えば見つかるから不必要
>だ」とも言えなくもないのですが、やはり便利なためにtabtotalが用意されているの
>であれば、tabgrouptotalも「tabgroupを使えば得られる」と言わないで、簡単でス
>マートに見つかった方が、(プログラミング経験のない一般の人でも気軽に扱える言
>語としての)秀丸マクロ言語らしいかな、と思った訳です。
> 実用面では、実に多くのシチュエーションで使われると思います。

他の要望も考慮して勘案してみたのですが、tabgrouptotalがあるということは、
「次のタブグループ」「前のタブグループ」に相当することや、タブグループに
よる参照を可能にしてほしいという要望に発展していくことになりそうです。

これらを満たしていくと、現状の秀丸番号による参照に加えて、多くの文でタブ
グループによる参照の文が倍増することになってしまいそうです。
filename_group[#i]とか、setactibehidemaru_group #i;とか。

便利性はあるかもしれないですが、肥大化はしたくないです。
統一性ということでいえば、秀丸番号による参照のみに統一することが、統一性
があるとも考えられます。

[ ]
RE:08354 tabgrouptotalの追加は?No.08386
fleakflap さん 05/06/22 14:57
 
 Ver.5のフィックス作業中、いろいろお手を煩わせて申し訳ないです。
(個人的に時間がもてるタイミングがなくて、間の抜けた時期のレスとなり
すいませんですm(_ _)m)

>これらを満たしていくと、現状の秀丸番号による参照に加えて、多くの文でタブ
>グループによる参照の文が倍増することになってしまいそうです。
>filename_group[#i]とか、setactibehidemaru_group #i;とか。

 正直に言うと「えっ、用意されていないんですか?」という気持ちです。
「マクロ」は秀丸のウリであり、「タブ化」はVer.5のウリでしょうから、
それを素人レベルの人でも扱えるマクロは当然のように準備されているのだ
ろうと、(勝手に)想像していました(;_;)
(これら文は想定外ですが、あれば確かに魅力的でしょうね)<-もう言うなって(^^;;;

 いずれにしても、作者様ご自身が作る用意がないようなので、この件につい
ての要望は無駄なので、撤回させて頂きます。


 単なるネタですが、以前にも発言した「タブ化時のウインドウ一覧」は、
なにか、ひとひねり欲しい感じがします。例えば、「A,B」と「C,D,E」の
5ファイルを開いている時、C側のタブがアクティブになっても、そのファイルリス
トの先頭がAであるのは、
ちょっと違和感を感じます。

[ ]
RE:08386 tabgrouptotalの追加は?No.08408
秀丸担当 さん 05/06/23 15:26
 

> 単なるネタですが、以前にも発言した「タブ化時のウインドウ一覧」は、
>なにか、ひとひねり欲しい感じがします。例えば、「A,B」と「C,D,E」の
>5ファイルを開いている時、C側のタブがアクティブになっても、そのファイルリス
>トの先頭がAであるのは、
>ちょっと違和感を感じます。

ここはタブモードで分離してないときはタブの順番に並んでいて、アクティブが
先頭というわけではないので、どちらがいいかというと微妙なような気がします。

[ ]
RE:08408 tabgrouptotalの追加は?No.08415
fleakflap さん 05/06/25 16:44
 
>ここはタブモードで分離してないときはタブの順番に並んでいて、アクティブが
>先頭というわけではないので、どちらがいいかというと微妙なような気がします。

 言葉が足らなくて、すいません。
 少なくとも、アクティブになっているタブグループが先頭に来ると、わか
りやすいのでは、という意味でした。現行では、すべてのタブグループでの
ファイル一覧で表示される順番が、まったたく同じですので。

 タブグループを選択している場合には、開いているすべての文書の順番が
重要であることよりも、アクティブなグループ内の文書の順番が
重要なわけです。
 5,6個のファイルの場合は、リスト全体が見えて現行でも不自由はそれほど
ないのですが、20個以上のファイルを同時に扱っている場合は、プルダウンメ
ニューからは現在アクティブなグループであるにも関わらず、下の方にリストさ
れていてすぐに見えない、というのは不便かなと…。

 で、グループ内の1番目の文書は、[ウィンドウ]のプルダウンメニュー
で表示される[ウィンドウ一覧]がそのグループで扱うファイルがリストの先頭
に位置して直前のグループがその下…という具合に表示されると、少し自然かな、
と思った次第です。

(グループの重なりは、タブモードでない状態での秀丸の重なりの動作から容易に
連想され、各グループ内のリスト順はタブ順、というと、直線性が担保される気が
して、使いやすいかな、と思った次第です。あるいは、最低限でも、
現行のファイル番号の先頭にでも、グループ番号を振るなどして、
タブグループの区別を、何らかの方法で示せれば、もっと便利になるかと)


[ ]
RE:08415 タブの一覧No.08422
Iranoan さん 05/06/25 17:54
 
 fleakflap さん今日は、Iranoan です。
> 現行のファイル番号の先頭にでも、グループ番号を振るなどして、
> タブグループの区別を、何らかの方法で示せれば、もっと便利になるかと)
 「タブの一覧」は開いているタブが多くなると確かに欲しい機能ですね。現
状だと、末尾のマクロで実現できますね。grep の結果の時は、表示が今一つ
ですが(^^;。
//--------------------------------------------------------------------
#t = tabgroup;
#j = hidemarucount;
#i = 1;
#k = 1;
if( filename2 == "" )$m[0] ="(無題)";
else $m[0] = filename2;
while( #i < #j ){
  if( tabgroup[#i] == #t ){
    if( filename2[#k] == "" )$m[#k] ="(無題)";
    else $m[#k] = filename2[#k];
    #m[#k] = #i;
    #k = #k + 1;
  }
  #i = #i + 1;
}
menuarray $m, #k;
#result = result;
if( #result )setactivehidemaru #m[#result-1];

[ ]
RE:08415 tabgrouptotalの追加は?No.08430
秀丸担当 さん 05/06/27 14:31
 

> 少なくとも、アクティブになっているタブグループが先頭に来ると、わか
>りやすいのでは、という意味でした。現行では、すべてのタブグループでの
>ファイル一覧で表示される順番が、まったたく同じですので。

たしかにグループとタブとの直線性を考えると、グループの順番になっていたほ
うがいいかもしれません。
グループごとに色を分けて欲しいという要望もあります。
ネタとして参考にしたいと思います。

[ ]
RE:08422 タブの一覧No.08431
秀丸担当 さん 05/06/27 14:33
 

このマクロですが、filename2[#k]となっている部分は、filename2[#i]じゃない
と期待通りにならないです。

他の方からも指摘があるように、間違いが多いようなので、グループごとにうま
く管理できるようなマクロ文を追加するなど検討したほうがいいかもしれません。

[ ]
RE:08431 タブの一覧No.08438
Iranoan さん 05/06/27 18:31
 
 秀丸担当さん今日は、Iranoan です。
> このマクロですが、filename2[#k]となっている部分は、filename2[#i]じゃない
> と期待通りにならないです。
 そうですね。ご指摘有り難うございました。

[ ]
RE:08430 tabgrouptotalの追加は?No.08446
h-tom さん 05/06/28 01:22
 

h-tom です。

>たしかにグループとタブとの直線性を考えると、グループの順番になっていたほ
>うがいいかもしれません。
>グループごとに色を分けて欲しいという要望もあります。
>ネタとして参考にしたいと思います。

タブグループ対応(?)ウィンドウ一覧を作ってみました。
田楽DLLが必要です。秀丸本体と同じ所に置いてください。
ちなみにファイル名をダブルクリックしても開きません。
「OK」ボタンか、リターンキーを押してください。
タブモードでない場合は普通のウィンドウ一覧を開きます。

//ここから
//ダイアログ表示時にグループを展開する場合は1、しない場合は0
#node_open = 1;

if(tabmode == 1){
    loaddll hidemarudir + "\\dengakudll.dll";
    if(!result){
        message "dllのロード失敗";
        endmacro;
    }
    call DengakuSet;
    if(##return != -1){
        setactivehidemaru(##return);
    }
}else{
    windowlist;
}
endmacro;

DengakuSet:
    //主ダイアログ作成
    if (dllfunc("NEWDIALOG","ウィドウ一覧", 60, "") == 0 ||
        dllfunc("NEWCONTROL","tree","wlist","") == 0 ||
        dllfunc("SETCTRLHEIGHT","wlist",15) == 0 ||
        dllfunc("SETCTRLSORT","wlist","yes") == 0 ||
        dllfunc("NEWCONTROL","okcancel","","") == 0) {
        message "ダイアログ作成エラー!";
        freedll;
        endmacro;
    }
    //起動時の秀丸ハンドル
    ##main = hidemaruhandle(0);

    //リスト作成
    ##cnt = 0;
    $$nodes = "";
    ##max = hidemarucount;
    ##sel_max = 0;
    while(##cnt < ##max){
        $$name = filename2[##cnt];
        if($$name == "") $$name = filetype[##cnt];
        ##node = tabgroup[##cnt];
        $$tab_index = "[" + rightstr("00000" + str(taborder[##cnt]), strlen
(str(tabtotal[##cnt])))  + "]";
        ##node_chk = strstr($$nodes, ";" + str(##node) + ";");

        //tabグループの追加
        if(##node_chk == -1){
            ##node_top[##sel_max] = ##cnt;
            ##sel_max = ##sel_max + 1;
            $$nodes = $$nodes + ";" + str(##node) + ";";
            if(!dllfunc("SETCTRLITEM","wlist","node" + str(##node) + ",タブ
グループ" + str(##node),"root")){
                freedll;
                message "ノード作成エラー!";
                endmacro;
            }
        }
        //ファイルの追加
        if(!dllfunc("SETCTRLITEM","wlist", str(##cnt) + "," + $$tab_index +
$$name ,"node" + str(##node))){
            freedll;
            message "ノード(ファイル)作成エラー!";
            endmacro;
        }

        if(##main == hidemaruhandle(##cnt)) ##main_sel = ##cnt;
        ##cnt = ##cnt + 1;
    }
    //ダイアログ表示
    if (!dllfunc("SHOWDIALOG",hidemaruhandle(0),1)){
        message "ダイアログ作成エラー!";
        freedll;
        endmacro;
    }
   
    //すべてのタブグループを展開
    if(#node_open == 1){
        ##sel_max = ##sel_max - 1;
        while(0<##sel_max){
            if(!dllfunc("SETCTRLSTATE","wlist", str(##node_top[##sel_max]))){
                message "ノード展開エラー!";
                freedll;
                endmacro;
            }
            ##sel_max = ##sel_max - 1;
        }
    }
   
    //起動した文書を選択
    if(!dllfunc("SETCTRLSTATE","wlist", str(##main_sel))){
        message "ファイル選択エラー!";
        freedll;
        endmacro;
    }
   
    //操作待ち受けループ
    while (1) {
        $$ret_code = "";
        while (strlen($$ret_code) == 0) $$ret_code = dllfuncstr("WAITCTRLNOT
IFY",10);
        $$select_file = dllfuncstr("GETCTRLSTATE","wlist");
        if ($$ret_code == "1"){
            if(strstr($$select_file, "node") != -1){
                ##n = dllfunc("SHOWMESSAGE","999","ファイルを選択して下さい。
");
                continue;
            }
            break;
        }else if ($$ret_code == "0"){
            $$select_file = "";
            break;
        }else{
        }
    }
    ##ret = dllfunc("ENDDIALOG");
    if($$select_file == ""){
        ##func = -1;
    }else{
        ##func = val($$select_file);
    }
return ##func;
//ここまで

[ ]
RE:08446 tabgrouptotalの追加は?No.08451
秀丸担当 さん 05/06/28 15:51
 

試してみました。素晴らしいと思います。

他の方からも指摘があったのですが、タブの操作をもう少しやりやすいようにマ
クロを追加しようと思います。

[ ]
RE:08446 tabgrouptotalの追加は?No.08457
h-tom さん 05/06/28 23:44
 

h-tom です。

β31で追加されたマクロを使って多少修正してみました。
それと、タブグループを選択すると、アクティブなタブグループを切り換えます。

//----ここから
//ダイアログ表示時に全てのタブグループを展開する場合は1、しない場合は0
//マクロを起動したタブグループは設定にかかわらず展開する
#node_open = 1;

if(tabmode == 1){
  loaddll hidemarudir + "\\dengakudll.dll";
  if(!result){
    message "dllのロード失敗";
    endmacro;
  }
  call DengakuSet;
  if(##return != -1){
    setactivehidemaru(##return);
  }
}else{
  windowlist;
}
endmacro;

DengakuSet:
  //主ダイアログ作成
  if (dllfunc("NEWDIALOG","ウィンドウ一覧", 60, "") == 0 ||
    dllfunc("NEWCONTROL","tree","wlist","") == 0 ||
    dllfunc("SETCTRLHEIGHT","wlist",15) == 0 ||
    dllfunc("SETCTRLSORT","wlist","yes") == 0 ||
    dllfunc("NEWCONTROL","okcancel","","") == 0) {
    message "ダイアログ作成エラー!";
    freedll;
    endmacro;
  }
 
  //タブグループ作成
  ##cnt = 0;
  while(##cnt < tabgrouptotal){
    //ハンドル取得
    ##handle =getcurrenttab(true,##cnt);
    //グループID取得
    ##node = tabgroup[##handle];
    //アクティブタブのグループID、ハンドルを保存
    ##tabgr[##node] = ##handle;
    //ツリービューへ追加
    if(!dllfunc("SETCTRLITEM","wlist","node" + str(##node) + ",タブグループ"
 + str(##node),"root")){
      freedll;
      message "ノード作成エラー!";
      endmacro;
    }
    ##cnt = ##cnt + 1;
  }
  //リスト作成
  ##cnt = 0;
  while(##cnt < hidemarucount){
    $$name = filename2[##cnt];
    if($$name == "") $$name = filetype[##cnt];
    ##node = tabgroup[##cnt];
    $$tab_index = "[" + rightstr("00000" + str(taborder[##cnt]), strlen(str
(tabtotal[##cnt])))  + "]";
    //ファイルの追加
    if(!dllfunc("SETCTRLITEM","wlist", str(##cnt) + ",'" + $$tab_index + $$n
ame + "'" ,"node" + str(##node))){
      freedll;
      message "ノード(ファイル)作成エラー!";
      endmacro;
    }
    ##cnt = ##cnt + 1;
  }
  //ダイアログ表示
  if (!dllfunc("SHOWDIALOG",hidemaruhandle(0),1)){
    message "ダイアログ作成エラー!";
    freedll;
    endmacro;
  }
 
  //すべてのタブグループを展開
  if(#node_open == 1){
    //リスト作成
    ##cnt = 0;
    while(##cnt < tabgrouptotal){
      ##node = hidemaruorder(getcurrenttab(true,##cnt));
      if(!dllfunc("SETCTRLSTATE","wlist", str(##node))){
        message "ノード展開エラー!";
        freedll;
        endmacro;
      }
      ##cnt = ##cnt + 1;
    }
  }
 
  //起動した文書を選択
  //hidemaruorderなので必ず"0"のハズ。
  if(!dllfunc("SETCTRLSTATE","wlist", "0")){
    message "ファイル選択エラー!";
    freedll;
    endmacro;
  }
 
  //操作待ち受けループ
  while (1) {
    $$ret_code = "";
    while (strlen($$ret_code) == 0) $$ret_code = dllfuncstr("WAITCTRLNOTIFY",
10);
    $$select_file = dllfuncstr("GETCTRLSTATE","wlist");
    if ($$ret_code == "1"){
      if(strstr($$select_file, "node") != -1){
        ##tabnum = val(rightstr($$select_file, strlen($$select_file) - 4));
        $$select_file = str(##tabgr[##tabnum]);
      }
      break;
    }else if ($$ret_code == "0"){
      $$select_file = "";
      break;
    }else{
    }
  }
  ##ret = dllfunc("ENDDIALOG");
  if($$select_file == ""){
    ##func = -1;
  }else{
    ##func = val($$select_file);
  }
return ##func;
//----ここまで

[ ]
RE:08457 tabgrouptotalの追加は?No.08461
秀丸担当 さん 05/06/29 13:22
 

わざわざ修正していただいてありがとうございます。
動作しているようです。

[ ]