このマクロは、選択状態にある相対パスを EmEditor で開くマクロです。実行する際に、それが相対パスかどうかを判断しません。まあ実際にそのファイルが無くても、 EmEditer がその名前のファイルを作り出し、そのファイルを開いてしまうだけです。
一応きちんと動いてますが、文法的におかしい所などがありましたら、指摘していただけるとありがたいです。
このマクロは、選択状態にある相対パスを EmEditor で開くマクロです。実行する際に、それが相対パスかどうかを判断しません。まあ実際にそのファイルが無くても、 EmEditer がその名前のファイルを作り出し、そのファイルを開いてしまうだけです。
一応きちんと動いてますが、文法的におかしい所などがありましたら、指摘していただけるとありがたいです。
//openfile.jsee
//相対パスを選択しこのマクロを実行すると、そのファイルを EmEditor で開きます。
var base = document.FullName;
var pathn = document.selection.text;
var r = new RegExp("/","g");
pathn = pathn.replace(r, "\\");//"/"を"\"に変換
var re = /#(.*)/g;
var idfind = pathn.match(re);//IDがあるか検索
if (idfind != null){
pathn = pathn.replace(re, "");//#以降を消す
}
var rep = /^\.\\/g;
var headslash = pathn.match(rep);//行頭の"./"を探す
if (headslash != null){
pathn = pathn.replace(rep, "");//あったら消す
}
function joinPath(base,pathn){//相対パスを絶対パスに変換
if(base.substr(base.length-1) != '\\'){
base = base.split('\\');
base.length--;
base = base.join('\\');
}else{
base = base.substr(0,base.length-1);
}
base = base.split('\\');
while(0 == pathn.indexOf('..\\')){
base.length--;
pathn = pathn.substr(3);
}
base = base.join('\\');
base = base + '\\' + pathn;
return base;
}
var AbsolutePath = joinPath(base,pathn);
var baselength = AbsolutePath.length;//選択したパスの長さを計測
var slashpos = AbsolutePath.lastIndexOf("\\");//\を後ろから検索
if (slashpos + 1 == baselength){//パスが\で終わっていたら
AbsolutePath = AbsolutePath + "index.html";//ケツに\index.htmlを足す
}
editor.OpenFile( AbsolutePath, eeEncodingSystemDefault, eeOpenAllowNewWindow );