Macro/投稿/160 のバックアップ差分(No.12)




  • 追加された行はこの色です。
  • 削除された行はこの色です。
* いろいろパスジャンプ[#p37a55f6]
-ページ: [[Macro/投稿]]
-作者: [[ガンジャム]]
-カテゴリー: js
-投稿日: 2006-12-31 (日) 19:27:42

** メッセージ [#q7f4bf8b]
タグジャンプの代わりに使うとパスを関連付けで開きます。
grep結果画面のタグ情報(n,n)であれば桁行指定で開きます。
タグ情報があれば桁行指定で開きます。
タグ情報の取得に失敗すると単純に開くだけの可能性があります)
#code(javascript){{
//pathJump.js (sakura.exeと同じフォルダに置いてください)
//
//pathJump.js
//カーソル行or選択範囲のパス文字列を関連付けで実行します。
//設定した拡張子であればサクラエディタで開きます。
//(n,n)のタグ情報であれば指定された桁行にジャンプして開きます。
//
//タグ情報があれば桁行指定で開きます。
//(タグ情報の取得に失敗すると単純に開くだけの可能性があります)
//パスがUNCパスもしくはネットワーク割当てドライブの場合、ソース内の
//"foobarhoge"の共有名を変更することでアクセスを制限することができます。

pathJumpMain();
function pathJumpMain() {
	var path = Editor.GetSelectedString(0);
	var reg0 = /(?:.*?)([A-Z]:\\|\\\\[1A-Z])(.*?)(?:(?: |\s){2,}|[\t<>:\|"])(?:.*)/i;	//"
	var reg0 = /(?:.*?)([A-Z]:\\|\\\\[1A-Z])(.*?)(?:(?: |\s){2,}|[<>:\|"])(?:.*)/i;	//"
	//foobarhogeをジャンプ制限共有名に
	var reg1 = /\\\\foobarhoge/i;
	var reg2 = /(.*?)\((\d+?),(\d+?)\)/;
	var reg2 = /(.*?)(?:[\s\(]*?)(\d+)(?:[\s,]*)(\d*)(?:[\s\)]*)/;

	if(!path) {
		path = Editor.GetLineStr(0);
	}
	path = path.replace(reg0, "$1$2").replace(/\r|\n/mg,"");

	if (reg1.test(path)) {
		propMsg(1, path);
	} else if (reg2.test(path)) {
		var excPth = path.replace(reg2, "$1");
		var lineNm = path.replace(reg2, "$2");
		var coluNm = path.replace(reg2, "$3");

		var sakPth = Editor.ExpandParameter("$S");
		var objSL = new ActiveXObject("WScript.Shell");
		var sakPth = objSL.CurrentDirectory +"\\sakura.exe";
			//objSL.popup(sakPth +" "+ excPth +" -X="+ coluNm +" -Y="+ lineNm);
			objSL.exec(sakPth +" "+ excPth +" -X="+ coluNm +" -Y="+ lineNm);
			objSL = null;
	} else {
		jumpCnt(path);
	}
}

function jumpCnt(p) {
	var objSL = new ActiveXObject("WScript.Shell");
	var objFS = new ActiveXObject("Scripting.FileSystemObject");
	
	if (objFS.DriveExists(objFS.GetDriveName(p))) {
		var d = objFS.GetDrive(objFS.GetDriveName(p));
		if (d.DriveType == 3) {
			var sh = d.ShareName.toLowerCase();

			//foobarhogeをジャンプ制限共有名に
			if(sh.indexOf("foobarhoge") != -1) {
				propMsg(2, p);
				return(false);
			}
		}
	}
	if (objFS.FolderExists(p)) {
		objSL.Run('"'+ p +'"');
	} else if (objFS.FileExists(p)) {
		var ext = objFS.GetExtensionName(p);
		var lowerext = ext.toLowerCase();
		switch (lowerext) {
			case "txt":				//サクラエディタで開きたい拡張子
			case "log":
			case "dat":
			case "ini":
			case "sql":
			case "js":
			case "vbs":
			case "mac":
			case "pl":
					Editor.FileOpen(p);
					break;
			default:
					objSL.Run('"'+ p +'"');
		}
	} else {
		propMsg(3, p);
	}
	objSL = null;
	objFS = null;
}

function propMsg(n, path) {
	var ie = new ActiveXObject("InternetExplorer.Application");
		ie.Navigate("about:blank");
	var window = ie.Document.parentWindow;
	var msg = "カーソル行or選択範囲から抽出した下記のパス文字列は、";

	switch (n) {
		case 1: msg = msg+"アクセス不可の共有名です";break;
		case 2: msg = msg+"アクセス不可の共有パス割当ドライブです";break;
		case 3: msg = msg+"ファイルが見つかりません";break;
		case 4: msg = msg+"ドライブが利用ません";break;			//未実装
		case 4: msg = msg+"ドライブが利用ません";break;
		default: msg = "不明なエラーです";break;
	}
	var st = window.prompt(msg,path);
	window = null;
	ie = null;
}

}}

----
- 「タグジャンプの代わり」という目的なら,GREP結果でなくてもタグ情報付きだったときにはタグジャンプしたほうが良さそうな?タグファイルを開いている通常ウインドウかもしれないし.ついでにアウトプットウィンドウだと,タグ情報もパス情報もどちらもあり得る. -- [[maru]] &new{2007-06-05 (火) 18:26:36};
- フォルダパスならexploreで開くのですが、そうなるとタグ情報の判定が難しそうです。\s\(\d*,\d*\)固定なら拾えますが… -- [[ガンジャム]] &new{2007-06-05 (火) 22:09:41};
- そっちの判定ではなく,11〜12行のつもりだったのですが.&br;例えば[^\*\?<>\|]+\(\d+,\d+\)にマッチしたらタグジャンプ,それ以外はPathJumpみたいな感じで.&br;っていうか,関連付けで開けるところがミソなんですよね,きっと.私の提案ですと,タグ情報付きなら関連付けを無視してサクラエディタで開くことになってしまいますね. -- [[maru]] &new{2007-06-06 (水) 00:49:30};
- タグ情報は条件固定なんですが、タグジャンプは行頭からパスでないとだめなので、コマンドラインから桁行渡しで開くようにしました。 -- [[ガンジャム]] &new{2007-06-09 (土) 00:06:18};
- パスが行頭からでなくても開きたいという理由でタグ情報マッチにチャレンジ -- [[ガンジャム]] &new{2007-06-10 (日) 03:05:02};

#comment


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS