Macro/投稿/160 のバックアップソース(No.13)



* いろいろパスジャンプ[#p37a55f6]
-ページ: [[Macro/投稿]]
-作者: [[ガンジャム]]
-カテゴリー: js
-投稿日: 2006-12-31 (日) 19:27:42

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

//エントリ
setPathString();

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

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

	if(reg1.test(path))
	{
		propMsg(1, path);
	}
	else
	{
		jumpCnt(path);
	}
}

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

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

/*****************************************
 ファイルオープン
 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;
		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-10 (日) 03:05:02};
- 職場では実用レベルということで -- [[ガンジャム]] &new{2007-06-26 (火) 21:50:43};

#comment


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