秀丸で開いたファイルのフォルダにUbuntuを開いて移動する

これは、昔からコマンドプロンプトでよくやっていた。例えばPythonのコードを書いて、さあ実行しようという時に、コマンドプロンプトを起動して、Change Directoryする。しかし、わざわざ分かっているディレクトリに手動で移動するのは面倒ではないか。

コマンドプロンプトには/Kというオプションがあって、そのあとに書かれたコマンドをコマンドプロンプトを開いた後に実行する。なので、

cmd.exe /k cd dicrectory

とすれば、コマンドプロンプトが起動してそのディレクトリに移動する。

TeraTermには起動時にマクロを実行する機能があって、ログインして、子サーバにSSHでログインして、Sambaで開いていたファイルのフォルダにChange Directoryするようにしていた。

しかし、Windows 10のUbuntuは簡単にはうまくいかない。今回一念発起してその機能を実現させたので紹介する。

秀丸マクロ

JScriptで書かれたスクリプトWindows Script Hostで実行する。その際、秀丸のファイルのフォルダをdirectory2で拾って、引数にする。

パスの変更

例えば、Windowsの「C:\Users\user」というパスはUbuntu上では「/mnt/c/Users/user」となるので、この変換を行う。

function convert_windows_dir_into_Linux_dir(dir) {
	var v = dir.split("\\");
	v[0] = "/mnt/" + v[0].charAt(0).toLowerCase();
	return v.join("/");
}

Ubuntuの実行

Ubuntuの実行はstartコマンドでおこなう。

var Shell = WScript.CreateObject("WScript.Shell");
var command = "cmd.exe /c start ubuntu";
Shell.Run(command, 1, true);

Ubuntuが開いたらChange Directoryしたいが、やり方がわからない。しょうがないので、クリップボードを使ってペーストする。

clipというコマンドがあるので、そこに流し込む。例えばコマンドプロンプトで、

echo abc| clip

と打つと、クリップボードに"abc\n"が貼り付けられる(どうしても改行コード込みになってしまうようだ)。これを利用して、

Shell.Exec("cmd /c echo cd " + Linux_dir + "| cmd /c clip");

として、Linux形式に変換したディレクトリをクリップボードに貼り付ける。
このあと、SendKeysでそのディレクトリをUbuntuに貼り付けられるようにUbuntuの設定を変更する。Ubuntuを開いて、左上をクリックして「プロパティ」から設定画面を表示させる。

f:id:inamori:20190809094413p:plain

「編集オプション」の「Ctrlキー ショートカットを有効にする」をチェックすればよさそうだが、なぜかそれではうまくいかない。ここでは、「Ctrl+Shift+C/Vをコピー/貼り付けとして使用する」をチェックする。

そうして、SendKeysを使う。

WScript.Sleep(1000);
Shell.SendKeys("+^V");

この秀丸マクロをショートカットキーに登録しておけばよいだろう。
サクラエディタ等でも同様に可能だと思われる。