////////////////////////////////////////////////// // OPENTHIS.MAC by nyan // 秀丸マクロ // // 説明 // // テキストからファイル名を取得してそのファイルを開きます。 // つまりは秀丸の「タグジャンプ」機能とほぼ同じことをしますが、以下の点が異な // ります。 // A. タグジャンプでは別のドライブへ行けませんが、このマクロは別のドライブの // ファイルも開きます。 // B. ファイル名の後に書かれた行番号へジャンプするのもタグジャンプと同じです // が、数字の前に複数の空白がある場合はジャンプしません。 // // 具体的には、以下のように動作します。 // // (0) 範囲指定してある場合は、その範囲をファイル名として読み取って (3) へ。 // (1) 範囲指定してなければ、カーソル位置から戻りながら、ファイル名の頭を探す。 // 行頭、または半角の「=」をファイル名の頭の区切りとして認識する。 // (2) そこから進みながら、ファイル名の末尾を探す。行末、半角空白、または半 // 角の「(」をファイル名の末尾の区切りとして認識する。 // (3) ファイル名の次が半角空白1個か半角の「(」であれば、それに続く文字の並び // を行番号として読み取る。 // (4) ファイルを開き(すでに開いてあればアクティブにし)、行番号へジャンプする。 if(selecting) { #x0 = seltopx; #y0 = seltopy; #x1 = selendx; #y1 = selendy; escape; } else { while(1) { if( column == 0 ) break; left; if( code == ' ' || code == '=' ) { right; break; } } #x0 = x; #y0 = y; while(1) { if( column == linelen2 || code == '(' || code == ' ' ) break; right; } #x1 = x; #y1 = y; } $f = gettext(#x0,#y0,#x1,#y1); moveto #x1,#y1; if( strlen($f) > 100 ) endmacro; if( !existfile($f) ) endmacro; if( code == '(' || code == ' ' ) { right; #x2 = x; #y2 = y; gowordend; #x3 = x; #y3 = y; #l = val(gettext(#x2,#y2,#x3,#y3)); } else { #l = 1; } moveto #x0,#y0; if( basename != $f && filename != $f) { if( findhidemaru($f) == -1 ) { openfile $f; } else { setactivehidemaru findhidemaru($f); } } movetolineno 1,#l;