## 概要
[[Custom searches]]や[[Backlink search]]、[[Link search]]では『最近開いたファイル順』を考慮する機能があるが、現状は直近の10件しか考慮されないという制限がある。これを撤廃したい。
## 方針
非公開APIである `app.workspace.recentFileTracker.lastOpenFiles` を使う。なお、APIごとの差分( #2026/01/14 時点)は以下の通り。
| API名 (`app.workspace` は省略) | 公開API | 取得最大件数 | 画像ファイル |
| -------------------------------------- | ----- | ------ | ------ |
| `getLastOpenFiles()` | O | 10 | O |
| `getRecentFiles()` | X | 10 | X |
| `recentFileTracker.getLastOpenFiles()` | X | 10 | O |
| `recentFileTracker.getRecentFiles()` | X | 任意 | 任意 |
| `recentFileTracker.lastOpenFiles` | X | 全件 | O |
理由は以下。
- 件数を10件より大きくできる
- 既に `recentFileTracker.lastOpenFiles` をプレビューの履歴制御で使っている
- 利用する非公開APIの数は少ない方がいい
履歴の保存数や保存期間は謎だが、60件程度しか乗っていないので暗黙のルールがありそう。少なくとも、**[[Obsidian]]を閉じたら消えるわけではない**ようだ。
## 変更内容
`app-helper.ts` に以下を追加する。
```ts
/**
* @return {"<relative path from root>: lastOpenFiles index"}
*/
createRecentFilePathMap(): Record<string, number> {
const files = this.unsafeApp.workspace.recentFileTracker.lastOpenFiles;
const map: Record<string, number> = {};
for (let index = 0; index < files.length; index++) {
map[files[index]] = index;
}
return map;
}
```
パフォーマンス的には、filesが60くらいで 0.1ms 程度。常にこのオーダーなら無視できるが、桁が増えるならダイアログ初期表示時以外は実行しないほうがいいかも...。