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




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

** メッセージ [#q7f4bf8b]
タグジャンプの代わりに使うとパスを関連付けで開きます。
タグ情報があれば桁行指定で開きます。
タグ情報の取得に失敗すると単純に開くだけの可能性があります)
#code(javascript){{
//pathJump.js
//カーソル行or選択範囲のパス文字列を関連付けで実行します。
//設定した拡張子であればサクラエディタで開きます。
//タグ情報があれば桁行指定で開きます。
//(タグ情報の取得に失敗すると単純に開くだけの可能性があります)
//パスがUNCパスもしくはネットワーク割当てドライブの場合、ソース内の
//"foobarhoge"の共有名を変更することでアクセスを制限することができます。
/**********************************************************************************************************
タグジャンプ風パスジャンプマクロ(サクラエディタ用)
----------|------------------------------------------------------------------------------------------------
ファイル名|pathJump.js                                                                                     
使用方法  |sakura.exeと同じディレクトリに置き、マクロ登録して実行                                          
作成者    |ガンジャム                                                                                      
更新日    |20070611                                                                                        
最終更新  |タグ情報にマッチしたときに桁行指定でexecするように変更し、実行画面判定を削除                    
動作      |                                                                                                
          |カーソル行or選択範囲のパスを関連付けで実行します。                                              
          |正規表現によるパス範囲の抽出がうまくいかなかった場合、範囲選択後実行してください。              
          |設定された拡張子はsakuraで開き、それ以外はで実行。                                              
タスク    |reg2の精度アップ
**********************************************************************************************************/

pathJumpMain();
function pathJumpMain() {
//エントリ
setPathString();

/*****************************************
 実行パス文字列取得
 *****************************************/
function setPathString()
{
	var path = Editor.GetSelectedString(0);
	var reg0 = /(?:.*?)([A-Z]:\\|\\\\[1A-Z])(.*?)(?:(?: |\s){2,}|[<>:\|"])(?:.*)/i;	//"
	//foobarhogeをジャンプ制限共有名に
	var reg1 = /\\\\foobarhoge/i;
	var reg2 = /(.*?)(?:[\s\(]*?)(\d+)(?:[\s,]*)(\d*)(?:[\s\)]*)/;
	var reg0 = /(?:.*?)([A-Z]:\\|\\\\[1A-Z])(.*?)(?:(?: |\s){2,}|[<>:\|"])(?:.*)/i; 	//"
	//foobarをアクセス制限共有名
	var reg1 = /\\\\foobar/i;

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

	if (reg1.test(path)) {
	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");
			//objSL.popup(sakPth +" "+ excPth +" -X="+ coluNm +" -Y="+ lineNm);
			objSL.exec(sakPth +" "+ excPth +" -X="+ coluNm +" -Y="+ lineNm);
			objSL = null;
	} else {
	}
	else
	{
		jumpCnt(path);
	}
}

function jumpCnt(p) {
/*****************************************
 ジャンプコントロール
 フォルダオープン
 *****************************************/
function jumpCnt(p)
{
	var objSL = new ActiveXObject("WScript.Shell");
	var objFS = new ActiveXObject("Scripting.FileSystemObject");
	
	if (objFS.DriveExists(objFS.GetDriveName(p))) {

	var reg2 = /(.*?)(?:\(|\s{2,}?)(\d+)(?:[,]*|[\s]{2,})(\d*)(?:[\s\)]*)(?:.*)/;

	if(objFS.DriveExists(objFS.GetDriveName(p)))
	{
		var d = objFS.GetDrive(objFS.GetDriveName(p));
		if (d.DriveType == 3) {

		if(d.DriveType == 3)
		{
			var sh = d.ShareName.toLowerCase();

			//foobarhogeをジャンプ制限共有名に
			if(sh.indexOf("foobarhoge") != -1) {
			
			//foobarをジャンプ制限共有名に
			if(sh.indexOf("foobar") != -1)
			{
				propMsg(2, p);
				return(false);
			}
		}
	}
	if (objFS.FolderExists(p)) {
	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 if(reg2.test(p))
	{
		if(objFS.FileExists(p))
		{
			sakuraOpen(p);
		}
	} else {
		else
		{
			shellExec(p, reg2);
		}
	}
	else if(objFS.FileExists(p))
	{
		sakuraOpen(p);
	} 
	else
	{
		propMsg(3, p);
	}
	objSL = null;
	objFS = null;
}

function propMsg(n, path) {
/*****************************************
 ファイルオープン
 sakuraへ桁行位置を渡して実行
 *****************************************/
function shellExec(p, re)
{
	var fileP = p.replace(re,"$1");
	var linNm = p.replace(re,"$2");
	var colNm = p.replace(re,"$3");

	var sakDr = Editor.ExpandParameter("$S");
	var objSL = new ActiveXObject("WScript.Shell");
		objSL.popup(' "'+ fileP +'" -X='+ colNm +' -Y='+ linNm);
		objSL.exec(sakDr +' "'+ fileP +'" -X='+ colNm +' -Y='+ linNm);
		objSL = null;
}

/*****************************************
 ファイルオープン
 設定拡張子ならsakuraマクロ関数
 それ以外は関連付けファイル実行
 *****************************************/
function sakuraOpen(p)
{
	var objFS = new ActiveXObject("Scripting.FileSystemObject");
	var ext = objFS.GetExtensionName(p);
	var lowerext = ext.toLowerCase();
		objFS = null;

	switch(lowerext)
	{
		case "txt":
		case "log":
		case "sh" :
		case "csh":
		case "dat":
		case "ini":
		case "sql":
		case "js" :
		case "vbs":
		case "mac":
				Editor.FileOpen(p);
				break;
		default:
				var objSL = new ActiveXObject("WScript.Shell");
					objSL.Run('"'+ p +'"');
					objSL = 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;
	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;
		default: msg = "不明なエラーです";break;
	}
	var st = window.prompt(msg,path);
	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-10 (日) 03:05:02};
- 職場では実用レベルということで -- [[ガンジャム]] &new{2007-06-26 (火) 21:50:43};

#comment



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