quartz の導入によって、ObsidianのFrontmatterが重要になった。例えば、titleがそのページのタイトルになるなど、単なるメモ以上にObsidianを利用する場合は、使いこなした方が良さそう。
しかしながら、ノートを作るたびにFrontmatterの設定をするのは面倒なので、これをObsidianのプラグインで解決する。
作るもの
新しいノートを作成したときに、自動でFrontmatterを挿入するObsidian Plugin。 実行されるのは、実質的にはファイル名を「Untitled」から変更したとき(titleの適用のため)。
手順
プラグインの作成方法はObsidian Docsに書いてあるので、これに従う。
.obsidian内にplugins/myfrontディレクトリを作成myfrontを、今回作成するplugin idとする。
manifest.jsonを作成main.tsを作成- JavaScriptにコンパイル
- Obsidianを再起動
- 設定のCommunity pluginsから有効化
main.tsの内容:
import { App, Plugin, TFile, getFrontMatterInfo } from 'obsidian';
export default class RenameAutoFrontmatterPlugin extends Plugin {
async onload() {
this.registerEvent(
this.app.vault.on('rename', async (file: TFile, oldPath: string) => {
if (file.extension !== 'md') return;
if (!/^Untitled\S*/.test(oldPath.split('/').pop() || '')) return;
let content = await this.app.vault.read(file);
const fmInfo = getFrontMatterInfo(content);
if (fmInfo.exists) return;
const fileName = file.basename;
const now = new Date();
const localNow = new Date(now.getTime() - now.getTimezoneOffset() * 60000);
const dateStr = localNow.toISOString().split('T')[0];
const newFrontmatter =
`---\n` +
`title: ${fileName}\n` +
`tags:\n` +
`date: ${dateStr}\n` +
`---\n\n`;
content = newFrontmatter + content;
await this.app.vault.modify(file, content);
})
);
}
onunload() { }
}その後
- うまく動作していそう。
- Plugin名の「Frontmatter」が「Formatter」に見間違えそう。
- (追記)タイムゾーンの違いがあったため、JSTに対応