ぺーぱーふぇいす

雑記と備忘録。私はプログラマ。

Mery 自作マクロ「パス起動(仮).js」

Meryのマクロ書いたから小ネタとして。

説明

実行すると選択している文字列を取得し、あるいは選択していない場合はカーソルがある1行を取得し、ファイルパスとして開きます。
取得したパスは絶対パスであることが前提。また、取得後のパスが前後に「"(ダブルコーテーション)」を含んでいてもいなくても正常に動作する……ハズ。
パスがフォルダの場合はエクスプローラで対象のフォルダが開き、パスがファイルの場合は関連付けされているアプリケーションでファイルが開くハズ。

マクロとして登録後、メニュー[ツール]→[ポップアップメニューの設定]から、右クリック呼び出しに設定する。 あるいはなんかのショートカットキーとして割り振っておくと便利だと思う。

マクロ本体

パス起動(仮).js

// -----------------------------------------------------------------------------
// パス起動(仮)
// about:  カーソルがある行、もしくは選択されているテキストをパスとして起動します。
// create: 2018/02/05 
// update: 
// Copyright (c) PaperFace1000. All Rights Reserved.
//  http://paperface.hatenablog.com/
// -----------------------------------------------------------------------------

var fso = new ActiveXObject('Scripting.FileSystemObject');
var sh = new ActiveXObject( "WScript.Shell" );

var doc = Document;
var sel = doc.Selection;

var line;

if(!sel.isEmpty){
    line = sel.Text.replace("\n", "");
}else{
    line = doc.GetLine(sel.GetActivePointY(mePosLogical), meGetLineWithNewLines).replace("\n", "");
}

function deleteQuote(str)
{
    var result;
    var re1 = /^\"/g;
    var re2 = /\"$/g;
    result = str.replace(re1, "");
    result = result.replace(re2, "");
    
    return result;
}

function addQuote(str)
{
    return "\"" + str + "\"";
}

var path = deleteQuote(line);

if(fso.FolderExists(path) || fso.FileExists(path)){
    sh.Run(addQuote(path));
    Quit();
}else{
    Alert("パスが見つかりません。\npath: " + line);
}

改良予定は特に無いけど、一応「(仮)」。
私個人がテキストベースで書いているメモは、ほぼ絶対パスで記入するようにしているので、絶対パスのみを対象にした。

作り込んで「カーソル位置からドライブレターっぽい文字列とかを判断して、パスと思われる文字列を自動で取得」とかやろうとしたけど、めんどいのでやめた。
ネットワークパスのこととか、何をもってファイルパスと思わしき文字列の末尾として判断するかというロジックをどこまでこだわるか、とかね。

公式のMery Wikiにあるマクロライブラリに既に、ks氏作成の下記マクロがある。

文字列中のパス起動 - MeryWiki

相対パスのこととかを考えてる人はたぶんこちらのほうが使いやすいと思う。
上記はネットワークパスとかは対象外っぽかったので、今回自分用に作成。