サクラエディタを開いた瞬間、ファイルに保存しよう
この記事の概要
intro
サクラエディタを使っていてイラつく場面といえば
ちょっとメモのために開いただけで出現するこのダイアログではないでしょうか。
windowsであれば、こいつらがPCシャットダウンの妨げをしてきます。
また、保存しておきたい内容だったのに保存せず終了してしまう事故も起きるかもしれないです。
そこで、サクラエディタを開いた瞬間に yyyy/mm/yyyymmdd_HHMMSS.txt
として保存することで
これらのストレスから解放されましょう。
参考にしたコード
やり方
1. スクリプトファイル作成
%USERPROFILE%\AppData\Roaming\sakura\
に以下のコードを任意の名前で保存
※今回はSaveByDate.js
として説明する。
ソースコード(クリックで展開)
// saveByDate.js
// https://gist.github.com/RYLSnmm/432a35eb3f885722a4f95e8f0ef9df6b
// ↑を参考
(function() {
if (Editor.GetFilename() != "") { return; }
var wsh_shell = new ActiveXObject("WScript.Shell");
var DEFAULT = {
savedir: wsh_shell.ExpandEnvironmentStrings("%USERPROFILE%") + "\\Documents\\sakura\\{{YYYY}}\\{{MM}}",
filename_template: "{{YYYY}}{{MM}}{{DD}}_{{HH}}{{mm}}{{ss}}.txt",
charset: "UTF-8",
linebreak: "CRLF"
};
var savedir = createFromTemplate(DEFAULT.savedir, getNowForTemplate());
var filename_template = DEFAULT.filename_template;
var charset = DEFAULT.charset;
var linebreak = DEFAULT.linebreak;
var number = Editor.ExpandParameter("$n");
var filename = createFromTemplate(filename_template, getNowForTemplate(), {number: number});
var path = savedir + "\\" + filename;
var fso = new ActiveXObject("Scripting.FileSystemObject");
//保存先がなかったら作る
createFolder(savedir)
Editor.FileSaveAs(path, charset, linebreak);
function createFolder(folderpath) {
// フォルダ存在チェック
if (!fso.FolderExists(folderpath)) {
if (fso.GetParentFolderName(folderpath)) {
// フォルダが存在しなかったので親フォルダを作成
createFolder(fso.GetParentFolderName(folderpath));
// フォルダ生成
fso.CreateFolder(folderpath);
}
}
}
function createFromTemplate(tstr /*, ...args*/) {
var obj = mergeObjects(Array.prototype.slice.call(arguments, 1));
return tstr.replace(/\{\{(.*?)\}\}/g, function(_, name) {
return obj[name] || "";
});
}
function mergeObjects(objects) {
var result = {};
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
for (var k in obj) {
if (obj.hasOwnProperty(k)) {
result[k] = obj[k];
}
}
}
return result;
}
function getNowForTemplate() {
var d = new Date();
return {
YYYY: padLeft(d.getFullYear(), 4),
MM: padLeft(d.getMonth() + 1, 2),
DD: padLeft(d.getDate(), 2),
HH: padLeft(d.getHours(), 2),
mm: padLeft(d.getMinutes(), 2),
ss: padLeft(d.getSeconds(), 2)
};
}
function padLeft(value, len, char) {
char = char || "0";
var padding = Array.apply(null, Array(len + 1)).join(char);
return (padding + value).slice(-len);
}
})();
↑こうなる
2. マクロの有効化
サクラエディタ
> 設定
> 共通
> マクロ
から先程のマクロを指定した後
自動実行にチェックを入れ[設定]
ボタンを押下して設定を反映する。
マクロが列に反映されたら、OKを押してエディタ画面に戻る。
3. 動作確認
Ctrl + N
を押下すると、新しいファイルに名前がついているはずです。
デフォルトでは
C:\Users\ユーザー名\Documents\sakura\年\月
に保存されますが
1で貼ったコードを改変することで、任意の場所に変更できます。
savedir: wsh_shell.ExpandEnvironmentStrings("%USERPROFILE%") + "\\Documents\\sakura\\{{YYYY}}\\{{MM}}",
ファイルの自動保存もある
これはサクラエディタの標準機能ですが
サクラエディタ
> 設定
> 共通
> ファイル
から
数分おきに自動保存を行う設定もあります。
併用することで更に利便性を上げられそうです。
GoogleDriveとの併用
パソコン版GoogleDriveを使うことで
GドライブとしてGoogleDriveを自身のPCにマウントできます。
そこで、GoogleDriveを宛先としたCドライブのシンボリックリンクを張ることで
サクラエディタを開いた瞬間GoogleDriveに保存する というムーブが可能になります。
シンボリックリンクの作成コマンド例を貼っておきます。
New-Item -Value 'G:\マイドライブ\sakura\' -Path 'C:\Users\ユーザー名\Documents\' -Name 'sakura' -ItemType SymbolicLink
※ユーザー名は適宜読み替え
outro
参考にしたコードとあまり出来映えは変わらないですが
一応存在しないディレクトリを補うように作成する などの工夫がしてあります。
PCを交換した際は速やかに設定したいですね。
Discussion