ファイルのフルパスをコピーして閉じる

提供: MeryWiki
ナビゲーションに移動 検索に移動
「ファイルを開いた時」専用のイベントマクロ

修飾キー を押しながらファイルを開いた時には、そのファイルのフルパスをクリップボードにコピーしてタブを閉じます。
閉じたあとにアクティブになったタブ(ドラッグ&ドロップする前にアクティブだったタブ)のキャレット位置にコピーした「ファイルのフルパス」を貼り付けることもできます。

  • エディタウインドウにファイルをドラッグ&ドロップして開く場合を想定したイベントマクロです。エクスプローラでファイルを選択して Alt キーを押しながら Enter キーを押す(またはダブルクリックする)と、「ファイルのプロパティ」ダイアログが開きます。
    Enter キー(またはダブルクリック)で起動させてからすぐに修飾キーを押せば、イベントマクロを実行できます。
  • 修飾キー( Ctrl / Alt )の組み合わせで、取得するフルパスの表記パターンが変わります。ソースコード内のコメント部分で確認してください。
  • マクロライブラリで公開・配布されている 外部実行ファイル GetKeyState.exe を利用して Ctrl / Alt キーの押し下げ状態を判定します。
あらかじめ "GetKeyState.zip" をダウンロードして、書庫内の "GetKeyState.exe" を Macros フォルダに配置してください。
  • GetKeyState.exe を2回呼び出すため、修飾キーの状態の判定に最長で数秒程度の時間がかかります。ドラッグ&ドロップしてからタブが閉じるまでは修飾キーを押しっぱなしにしてください。
  • 修飾キーを押しながら複数のファイルをまとめて開いたときは、不完全な動作になります。
  • 「ファイルを開いた時」に他のイベントマクロが複数実行される設定になっている場合、イベントマクロ同士が衝突して不具合を引き起こす可能性があります。当方ではイベントマクロ「編集モードの自動選択」と「バイト数」を使用していますが、問題なく動作しています。
  • セキュリティソフトによる実行ファイルのチェックなど、PCの環境によっては正常に動作しない可能性があります。
  • 動作の不具合が生じる場合は、「マクロのカスタマイズ」からこのマクロを削除してください。


ソースコード[編集]

 
#title = "フルパスをコピーして閉じる(イベント)"

/**
 * 「ファイルを開いた時」用のイベントマクロ
 * ※修飾キーの状態の取得に外部実行ファイル GetKeyState.exe を使用する。
 * 
 * ・ファイルを開くときに、修飾キーを押しながらドラッグ&ドロップした場合は
 *  ファイルのフルパスをクリップボードにコピーして閉じる。
 * ・修飾キー( Ctrl / Alt )の組み合わせで "ダブルクオート" や
 *  \ 記号のふたつ重ねのパターンを適用する。
 * 
 * ■ オプション設定
 *  閉じたあとにアクティブになったタブ(D&D する前にアクティブだったタブ)
 *  のキャレット位置にコピーした「ファイルのフルパス」を貼り付ける。
 * 
 * ※ドラッグ&ドロップでエディタのタブが開いてから
 *  GetKeyState.exe を2回呼び出す時間がかかるので、
 *  タブが閉じるまでは修飾キーを押しっぱなしにすること。
 * ※複数ファイルを "修飾キー + ドラッグ&ドロップ" した場合は、
 *  最後に開いたタブのフルパスしかコピーされず、
 *  最後に開かれたタブだけしか閉じない。
 * ※フォルダのドラッグ&ドロップではなにも開かれないので、パスのコピーもなし。
 * 
 */

// ■ 閉じたあとにアクティブになったタブのキャレット位置にパスを貼り付けるか?
var pasteEnable = true;		//(true 貼り付ける / false 貼り付けない)

// GetKeyState でCtrl キーの状態を取得
var $ctrl, $alt;
var WshShell = new ActiveXObject("WScript.Shell");
var getKeyState = '"'+editor.FullName.replace(/mery\.exe$/i,"")
                + 'Macros\\GetKeyState.exe "';
$ctrl = WshShell.Run(getKeyState+"ctrl", 0, true);
$alt = WshShell.Run(getKeyState+"alt", 0, true);

if ($ctrl==1 || $alt==1) {
  var d = editor.ActiveDocument;

  // Ctrl + Alt キーのときは  "C:\\Hoge\\Fuga\\Piyo.txt"
  // "" で囲って、\\ ふたつ重ね
  if ($ctrl == 1 && $alt == 1) {
    ClipboardData.SetData('"'+d.FullName.replace(/\\/g,"\\\\")+'"');
  }
  // Alt キーだけのときは  "C:\Hoge\Fuga\Piyo.txt"
  // "" で囲って、\ は重ねない
  else if ($alt==1) {
    ClipboardData.SetData('"'+d.FullName+'"');
  }
  // Ctrl キーだけのときは  C:\Hoge\Fuga\Piyo.txt
  // "" なし、\ も重ねない
  else if ($ctrl==1) {
    ClipboardData.SetData(d.FullName);
  }

  d.Close();
  if (pasteEnable) {
    // Sleep(100);
    editor.ActiveDocument.selection.Paste();
  }
}
スポンサーリンク