From 38c964bec2208c223e65b5566025abfaf55a91f6 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 29 Jun 2024 17:02:11 +0200 Subject: [PATCH] feat: Make any property of frontmatter a display name (#329) --- src/cache-manager.ts | 3 ++- src/components/ResultItemVault.svelte | 2 +- src/globals.ts | 2 ++ src/notes-indexer.ts | 1 + src/search/search-engine.ts | 3 ++- src/settings.ts | 18 ++++++++++++++++++ 6 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/cache-manager.ts b/src/cache-manager.ts index 8b94e9e..fc2841a 100644 --- a/src/cache-manager.ts +++ b/src/cache-manager.ts @@ -221,10 +221,11 @@ export class CacheManager { } } } - + const displayTitle = metadata?.frontmatter?.[this.plugin.settings.displayTitle] ?? '' const tags = getTagsFromMetadata(metadata) return { basename: file.basename, + displayTitle, content, /** Content without diacritics and markdown chars */ cleanedContent: stripMarkdownCharacters(removeDiacritics(content)), diff --git a/src/components/ResultItemVault.svelte b/src/components/ResultItemVault.svelte index 22f9ea6..a0290df 100644 --- a/src/components/ResultItemVault.svelte +++ b/src/components/ResultItemVault.svelte @@ -36,7 +36,7 @@ $: cleanedContent = plugin.textProcessor.makeExcerpt(note.content, note.matches[0]?.offset ?? -1) $: glyph = false //cacheManager.getLiveDocument(note.path)?.doesNotExist $: { - title = note.basename + title = note.displayTitle || note.basename notePath = pathWithoutFilename(note.path) // Icons diff --git a/src/globals.ts b/src/globals.ts index 716fbe2..cfad186 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -46,6 +46,7 @@ export type DocumentRef = { path: string; mtime: number } export type IndexedDocument = { path: string basename: string + displayTitle: string mtime: number content: string @@ -76,6 +77,7 @@ export type ResultNote = { score: number path: string basename: string + displayTitle: string content: string foundWords: string[] matches: SearchMatch[] diff --git a/src/notes-indexer.ts b/src/notes-indexer.ts index c5e56f6..431157f 100644 --- a/src/notes-indexer.ts +++ b/src/notes-indexer.ts @@ -88,6 +88,7 @@ export class NotesIndexer { return { path: filename, basename: name, + displayTitle: '', mtime: 0, content: '', diff --git a/src/search/search-engine.ts b/src/search/search-engine.ts index 90f495b..bfaae53 100644 --- a/src/search/search-engine.ts +++ b/src/search/search-engine.ts @@ -154,8 +154,9 @@ export class SearchEngine { term.length <= 3 ? 0 : term.length <= 5 ? fuzziness / 2 : fuzziness, boost: { basename: settings.weightBasename, - directory: settings.weightDirectory, aliases: settings.weightBasename, + displayTitle: settings.weightBasename, + directory: settings.weightDirectory, headings1: settings.weightH1, headings2: settings.weightH2, headings3: settings.weightH3, diff --git a/src/settings.ts b/src/settings.ts index a558c64..c493a88 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -37,6 +37,8 @@ export interface OmnisearchSettings extends WeightingSettings { /** Extensions of plain text files to index, in addition to .md */ indexedFileTypes: string[] + /** Custom title field */ + displayTitle: string /** Enable PDF indexing */ PDFIndexing: boolean /** Enable Images indexing */ @@ -209,6 +211,21 @@ export class SettingsTab extends PluginSettingTab { }) }) + // Custom display title + new Setting(containerEl) + .setName('Set frontmatter property key as title') + .setDesc( + htmlDescription(`If you have a custom property in your notes that you want to use as the title in search results.
+ Leave empty to disable.`) + ) + .addText(component => { + component.setValue(settings.displayTitle).onChange(async v => { + await clearCacheDebounced() + settings.displayTitle = v + await saveSettings(this.plugin) + }) + }) + // Additional text files to index new Setting(containerEl) .setName('Additional TEXT files to index') @@ -737,6 +754,7 @@ export function getDefaultSettings(app: App): OmnisearchSettings { ignoreDiacritics: true, ignoreArabicDiacritics: false, indexedFileTypes: [] as string[], + displayTitle: '', PDFIndexing: false, officeIndexing: false, imagesIndexing: false,