要望:tagsファイル状態情報追加No.15631
inouen さん 03/11/01 23:45
 
動作環境ーパスー環境ーtagsファイルで設定されている情報を
マクロ:ファイル名関連キーワードに追加していただくようにお願いします。

tagsdir[]  として複数のtagsファイル指定に対応可能とする。
tagsdir[0] としては現在のファイルに対応するtags(?)ファイルを
(相対パス指定の場合)フルパス指定に変換して設定する。

ファイルサーチ機能(βテスト:03117-03/09/23)マクロ実現のために考えています。
 (レジストリ系の関数、DLL呼出し機能等を使用すればサーチも早くなり、
  マクロ機能だけで処理できるとは思いますがまだ手に負えませんので...)

この機能を追加して頂ければ ダイレクトタグジャンプと同様に
ダイレクトファイルジャンプが1アクションで実行可能となりますので便利だと思い
ます。
続けて色々と要望しましたが よろしくお願いします。

[ ]
RE:15631 要望:tagsファイル状態情報追加No.15634
Iranoan さん 03/11/02 13:11
 
 inouen さん今日は、Iranoan です。
> 動作環境ーパスー環境ーtagsファイルで設定されている情報を
> マクロ:ファイル名関連キーワードに追加していただくようにお願いします。
 現状なら、末尾のサブルーチンで如何でしょう。

>  (レジストリ系の関数、
 レジストリの値が解らないときは、設定を変更する前後で、HmSetup.exe を
使って秀丸の設定を保存して、「他の秀丸と内容比較」を使えば、素早く見つ
けられます。
GetTagsName://tags file name を取得
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  $$tags_name=getregstr("Tags");
  closereg;
  return $$tags_name;

[ ]
RE:15634 要望:tagsファイル状態情報追加No.15660
秀丸担当 さん 03/11/05 18:07
 

>> 動作環境ーパスー環境ーtagsファイルで設定されている情報を
>> マクロ:ファイル名関連キーワードに追加していただくようにお願いします。
> 現状なら、末尾のサブルーチンで如何でしょう。

動作環境の取得,設定は、Iranoanさんの言うように、レジストリ系の関数,文
でできます。
tagsファイルの場合は、対象となるtagsファイルのフルパスと取得するには、動
作環境から取得した後、さらに複雑なことをしなくてはいけないので、レジスト
リから取得するだけでは辛いようです。
ですが、対象となるtagsファイルは、ダイレクトタグジャンプする文字によって
変化するので、単純に結果を返す関数を作るのも難しいです。

[ ]
RE:15660 要望:tagsファイル状態情報追加No.15689
inouen さん 03/11/07 12:37
 
秀丸担当殿

ファイルジャンプ機能としては03117で記したマクロを使用して、ダイレクトタグジ
ャンプと同様に
1アクションでストレス無く有効に使用しています。

ただしディレクトリが固定されているため、他のディレクトリ:開発環境に移るたび
に異なったディレクトリを
設定する、あるいは異なったディレクトリを設定した複数のマクロを切り換えて使用
することが必要です。
ダイレクトタグジャンプと同様に使用可能なファイルジャンプマクロを作成し、マク
ロライブラリに登録出来れば
良いなと考えて要望を出したわけです。

マクロ変数:directoryを指定してのtargetファイルサーチ、
無い場合:同じくマクロ変数:directoryの親、その親...にtagsファイルがあるかど
うかサーチ;
tagsファイルのあったdirectoryを指定して subdirectoryも含めてのtargetファイル
サーチ

targetファイルが見つからない場合は、inanoranさんが書かれていたようにregistry
からの
Tags name stringの取得、まだサーチしていないtagsファイルのあるdirectoryそれ
ぞれに
ついてのsubdirectoryも含めてのtargetファイルサーチを繰り返すことで出来るのは
分かっているのですが...

tagsdir[]の設定処理は最初から作るとすると難しいでしょうが、ダイレクトタグジ
ャンプのサーチディレクトリ
切りだし処理途中のディレクトリストリング変数をtagsdir[]に設定する形で容易に
実現可能ではと思います。

まずダイレクトタグジャンプを実行し、見つからない場合にファイルジャンプマクロ
を実行する。
その場合のデイレクトリはtagsdir[]にダイレクトタグジャンプ実行時に設定された
ものを
使用するといった形で実現したいと考えたわけです。

文字列切りだし、ファイルサーチ処理等に田楽dllを使用することも考えてみました。
田楽dllによるファイルサーチの方がdirectory scanのみですみ、grep使用の場合の
各々のファイル本体読み出しが不要になる分有利なようです。
ただしgrep方式では秀丸本体のみでよいのに、田楽dllが必要になるのは不利な点です。
また田楽dllの使い方の理解、マクロ作成、動作確認までに数日はかかりそうで
現在ちょっと時間が取れそうにありません。

できればtagsdir[]を追加する方向で検討して頂くようお願いします。


[ ]
RE:15689 要望:tagsファイル状態情報追加No.15722
秀丸担当 さん 03/11/10 15:50
 

gettagsfile(n)という関数を作ろうと思います。
フォルダを取得するにはさらにtagsファイルを元にフォルダを導き出さなくては
いけません。
ちなみに修正は対象となる文字や、ファイルの有無、フルパスかどうかなどのい
ろいろな絡みがあり、ダイレクトタグジャンプの処理も大きくいじる必要がでま
した。

[ ]
RE:15722 要望:tagsファイル状態情報追加No.15752
inouen さん 03/11/11 23:27
 
>gettagsfile(n)という関数を作ろうと思います。

近いうちに gettagsfile(n) 関数を使ったマクロを作ってみますので
見落としなどがないか検討して頂けたらと思います。
よろしくお願いします。

[ ]
RE:15722 要望:tagsファイル状態情報追加No.15770
inouen さん 03/11/15 22:45
 
ファイルジャンプ マクロを作成してみましたので検討お願いします。
gettagsfile(#i) でも良いのですが(コメント部分参照)、サーチすべきディレクトリ
を直接指定する
gettagsdir(#i)を使う形で書いてみました。


//ファイル検索マクロ
//現在のgrep情報セーブ
$svstr=searchbuffer;                //検索する文字列
$svfile=grepfilebuffer;             //検索するファイル:要追加
$svfldr=grepfolder;                 //検索するフォルダ:要追加
#svopt=searchoption;                //検索条件フラグ: 要拡張

//検索ファイル名取得
if(selecting==0) selectword;        //範囲選択してなければ単語取得
$searchfile = gettext(seltopx,seltopy,selendx,selendy);
if(!result) goto last;
if(strstr($searchfile,".")==-1) $searchfile=$searchfile+".*";

$dir=directory;                     //現在のファイルのフォルダ
$dir0=$dir;

//検索実行
#i = 0;
while(1) {
    grep ".*",$searchfile,$dir,subdir,filelist,fullpath,regular;
    if (result>0)   break;
nextdir:
    $dirsv=$dir;

    $dir=gettagsdir(#i);      //要追加
//  or
//      $tagf=gettagsfile(#i);   //要追加
//      call extractdir;
    #i=#i+1;
    if($dir=="")    break;
    if($dir==$dir0) goto nextdir;
}

//ファイルなし、複数ファイル検出の場合、ファイル検索結果表示のみ
if(result!=1) goto last;

//1個のファイルのみ見つかったので タグジャンプ自動実行
#handle=hidemaruhandle(0);
tagjump;
//タグジャンプに成功したら検索結果ウィンドウを閉じる
if(result) closehidemaru #handle;

last:
setsearch     $svstr,#svopt;
setgrepfile   $svfile;
setgrepfolder $svfldr;
endmacro;

//  extractdir:             //最後の"\tags"部分削除
//      ##j=strlen($tagf);  //(名前はtagsのみと考える)
//      if(##j<9) {         //"c:\d\tags" 9文字
//          $dir="";        //ドライブ直接指定は不可
//          return;
//      }
//      $dir=leftstr($tagf,##j-4);
//      return;

要追加、要拡張の部分は 秀丸側で変更していただく部分です。
よろしくお願いします。

[ ]
RE:15770 要望:tagsファイル状態情報追加No.15787
秀丸担当 さん 03/11/17 15:44
 

>ファイルジャンプ マクロを作成してみましたので検討お願いします。

追加予定なのは、gettagsfile(n)です。
ファイルが存在しない場合や、nが上限を超えたときは""を返します。
ファイルが存在しない場合なのか、上限を超えたときなのか判別できないとまず
いでしょうか。

[ ]
RE:15787 要望:tagsファイル状態情報追加No.15794
inouen さん 03/11/17 21:57
 
>追加予定なのは、gettagsfile(n)です。
>ファイルが存在しない場合や、nが上限を超えたときは""を返します。
>ファイルが存在しない場合なのか、上限を超えたときなのか判別できないとまず
>いでしょうか。

了解しました。
判別できなくても良いと思います。

マクロを一部訂正しましたので問題ないか確認お願いします。

//現在のgrep情報セーブ
$svfile=grepfilebuffer;         //検索するファイル:要追加
#svopt=searchoption;            //検索条件フラグ: 要拡張

//検索ファイル名取得
if(selecting==0) selectword;    //範囲選択してなければ単語取得
$searchfile = gettext(seltopx,seltopy,selendx,selendy);
if(!result) goto last;
if(strstr($searchfile,".")==-1) $searchfile=$searchfile+".*";

$dir=directory;                 //現在のファイルのフォルダ
$dir0=$dir;

//検索実行
#i = 0;
while(1) {
    grep ".*",$searchfile,$dir,subdir,filelist,fullpath,regular;
    if (result>0)   break;
nextdir:
    $dirsv=$dir;

    $tagf=gettagsfile(#i);    //要追加
    call extractdir;
    #i=#i+1;
    if($dir=="")    break;
    if($dir==$dir0) goto nextdir;
}

//ファイルなし、複数ファイル検出の場合、ファイル検索結果表示のみ
if(result!=1) goto last;

//1個のファイルのみ見つかったので タグジャンプ自動実行
#handle=hidemaruhandle(0);
tagjump;
//タグジャンプに成功したら検索結果ウィンドウを閉じる
if(result) closehidemaru #handle;

last:
setsearch     #svopt;
setgrepfile   $svfile;
endmacro;

extractdir:             //最後の"\tags"部分削除
    ##j=strlen($tagf);  //(名前はtagsのみと考える)
    if(##j<11) {        //"c:\\d\\tags" 11文字
        $dir="";        //ドライブ直接指定は不可
        return;
    }
    $dir=leftstr($tagf,##j-6);
    return;

[ ]
RE:15794 要望:tagsファイル状態情報追加No.15817
秀丸担当 さん 03/11/19 17:33
 

>了解しました。
>判別できなくても良いと思います。

了解しました。

>マクロを一部訂正しましたので問題ないか確認お願いします。

マクロの動作確認については、またβ版を出すときにお願いします。

[ ]