文字列中のパス起動

提供: MeryWiki
移動先: 案内検索

文字列中のパスを直接開きます.

exe で起動するアプリケーションを指定可能です. 省略時は関連づけられているアプリケーションで開きます.

base で相対パスのベースディレクトリを指定可能です. 省略時は開いているテキストのディレクトリになります.

2012/10/12 パス検索に不具合があったので修正

// -----------------------------------------------------------------------------
// 文字列中のパス起動
// 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+'"が見つかりません.');
}