マクロ集 / 現在の文書のディレクトリをGREP


マクロ集

GrepHere?

  • WZ GREP を起動し、現在開いている文書のフォルダを「対象フォルダ」にします。

使用方法

  • 変数 GREPHERE_WILDCARD には検索したいファイルの種類を書き込んでください。 (現在の文書の設定で「記憶」にグループ化された拡張子を取れた方が便利か…)
  • あとはコンパイルして、マクロを実行すればOK
  • しかし、既に WZ GERP が起動中の場合は、単にその WZ GREP が前面になるだけ。

推奨キーアサイン

^QG

コード

 /// ファイル名のディレクトリ部分を取り出す
 /**
 @param src        元のファイル名
 @param dst        ディレクトリ部分を受け取る変数
 - 最後の \\ は消す。ただしルートディレクトリのときは \\ を残す。
 - 注: txstrをreturnすることはできない (エラーは出ないが動作しない)
 **/
 void subExtractFileDir(txstr src, txstr dst)
 {
   dst = src;
   char *p = pathGetFileName(dst);
   *p = (char)'\0';
   pathFormDir(dst);
   if (dst[1]==(char)':' && dst[2]==(char)'\0')
     dst += "\\";
 }
 
 /// 現在の文書のディレクトリをGREPします
 int rxGrepHere(TX *text)
 {
   txstr GREPHERE_WILDCARD = "*.cpp;*.c;*.cc;"
                             "*.h;*.hpp;*.hxx;*.inl;*.inc"
                             "*.mak;*.asm;*.txc;*.txt";
   // 検索単語を得る。カーソル位置の単語が基本だが、カーソル位置が空白文字なら
   // HIST_SEARCH 検索文字列 ヒストリの最後の単語を検索する。
   txstr word;
   txGetWord(text, word);
   if (isspace(word[0]))
   {
     HSTRBLK sbHist = sbFromHist(HIST_SEARCH);
     int nHist = sbGetCount(sbHist);
     word = sbRead(sbHist, nHist-1);
   }
   // この文書のディレクトリを得る
   txstr fn = text->szfilename;
   txstr curdir;
   subExtractFileDir( fn, curdir );
   // GREPを起動する
   txstr path = curdir+"\\"+GREPHERE_WILDCARD;
   txstr option = "/fGrep -f\""+path+"\" -s\""+word+"\"";
   //printf(option);
   textFrameOpenEx("WZ GREP", option);
   return 0;
 }
 
 int main(TX *text)
 {
   return rxGrepHere(text);
 }

この記事は役に立ちましたか?

選択肢 投票
とても役に立った 3  
役に立った 1  
どちらともいえない 0  
あまり役に立たなかった 0  
役に立たなかった 0