Skip to content

Instantly share code, notes, and snippets.

@honda0510
Created February 24, 2011 05:41
Show Gist options
  • Save honda0510/841819 to your computer and use it in GitHub Desktop.
Save honda0510/841819 to your computer and use it in GitHub Desktop.
【EmEditor,マクロ】ソースに書かれたメソッド名やファイル名を選択してファイルを開く (PHPの静的メソッド, php, css, js, tplファイルに対応)
var fso = new ActiveXObject('Scripting.FileSystemObject');
var CUR_DIR = document.path;
var PARENT_DIR = fso.GetParentFolderName(CUR_DIR);
var FIND_OPTTION = eeFindAround + eeFindNext + eeFindReplaceCase + eeFindReplaceOnlyWord + eeFindSaveHistory;
// 選択中のテキスト
var selection = document.selection.Text;
// 選択中のテキストがファイル名だったら拡張子を小文字で取得
var extension = fso.GetExtensionName(selection).toLowerCase();
// 検索するフォルダのリスト
var dirs = [CUR_DIR, PARENT_DIR];
var file_name = '';
switch (extension) {
// 静的メソッド
case '':
if ( selection.indexOf('::') !== -1 ) {
// クラス名とメソッド名を取得
var class_info = selection.split('::');
var class_name = class_info[0];
if ( class_name === 'self' ) {
var file_name = document.Name;
} else {
var file_name = class_name + '.class.php';
}
var method_name = class_info[1];
dirs.push( fso.BuildPath(CUR_DIR, 'lib') );
dirs.push( fso.BuildPath(PARENT_DIR, 'lib') );
}
break;
// phpファイル
case 'php':
var file_name = selection;
dirs.push( fso.BuildPath(CUR_DIR, 'lib') );
dirs.push( fso.BuildPath(PARENT_DIR, 'lib') );
break;
// CSSファイルとJavaScriptファイル
case 'css':
case 'js':
var file_name = selection;
dirs.push( fso.BuildPath(CUR_DIR, extension) );
dirs.push( fso.BuildPath(PARENT_DIR, extension) );
break;
// テンプレートファイル
case 'tpl':
var file_name = selection;
dirs.push( fso.BuildPath(CUR_DIR, 'templates') );
dirs.push( fso.BuildPath(PARENT_DIR, 'templates') );
break;
// その他
default:
break;
}
for ( var i = 0, n = dirs.length; i < n; i++ ) {
var file_path = fso.BuildPath(dirs[i], file_name);
// ファイルの存在確認
if ( fso.FileExists(file_path) ) {
// ファイルを開く
var shell = new ActiveXObject('WScript.Shell');
shell.Run('EmEditor ' + file_path, 1, true);
// メソッドを検索する
if ( method_name !== undefined ) {
document.selection.Find(method_name, FIND_OPTTION);
document.HighlightFind = false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment