文字列中のパス起動
ナビゲーションに移動
検索に移動
概要[編集]
文字列中のパスを直接開きます。
exe で起動するアプリケーションを指定可能です。省略時は関連づけられているアプリケーションで開きます。
base で相対パスのベースディレクトリを指定可能です。省略時は開いているテキストのディレクトリになります。
変更履歴[編集]
- 1.0.1 (2012-10-12)
- パス検索に不具合があったので修正
- 1.0.0 (2012-10-11)
- 初版
ソースコード[編集]
// -----------------------------------------------------------------------------
// 文字列中のパス起動
// 1) 絶対パス、相対パスの指定が可能
// => 「:」が含まれる場合、絶対パスとする
// => 相対パスのベースパスは base で指定(省略時は開いているテキストのディレクトリ)
// ※ ネットワークパスには非対応
// 2) 文字列選択中はその文字列をファイルパスとして開く
// 3) 文字列非選択時は、カーソル位置を中心としてパス検索して起動
// => 「"」「<」「>」で囲われている文字列をパスとして認識(空白認識のため)
// 例:"img\a.jpg" <C:\a.jpg>
//
// Copyright (c) ks. All Rights Reserved.
// www: http://merysmacro.seesaa.net/
// -----------------------------------------------------------------------------
var exe = ''; // 起動exe名。省略時は関連づけで開く。
var base = ''; // 相対パスのベース。省略時は開いているテキストのディレクトリがベース。
var fso = new ActiveXObject('Scripting.FileSystemObject');
var shell = new ActiveXObject('Wscript.Shell');
var $Path = function(a, b){return fso.BuildPath(a,b)};
var $GetP = function(p){return fso.GetParentFolderName(p)};
var $Exist = function(p){return fso.FileExists(p)};
var $Run = function(p){if(exe){shell.Run(exe+' "'+p+'"')}else{shell.Run('"'+p+'"')}};
var $Exit = function(s){Status=s; Quit()};
var doc = Document;
var sel = doc.Selection;
var p = ''; // ファイルパス
// 文字列選択中はそれをパスとして認識
if (!sel.IsEmpty) {
p = sel.Text;
} else {
// 文字列非選択時はパスを探索
var x = sel.GetActivePointX(mePosLogical) - 1;
var s = doc.GetLine(sel.GetActivePointY(mePosLogical), 0).replace('\n', '');
var begin = s.substring(0, x).replace(/["<>]/g, '|').lastIndexOf('|');
begin = (begin < 0) ? 0 : (begin + 1);
var end = s.substring(x).search(/["<>\|]/);
end = (end < 0) ? s.length : (x + end);
p = s.substring(begin, end);
}
// 相対パスの場合は補完
if (p.indexOf(':') <= 0) {
p = $Path(base ? base : $GetP(doc.FullName), p);
}
// ファイルの有無を確認して起動
if ($Exist(p)) {
$Run(p);
$Exit('"'+p+'"を開きました。');
} else {
$Exit('"'+p+'"が見つかりません。');
}
スポンサーリンク