diff --git a/src/search.ts b/src/search.ts index 74bcd37..30736ea 100644 --- a/src/search.ts +++ b/src/search.ts @@ -10,6 +10,7 @@ import { import { extractHeadingsFromCache, getAliasesFromMetadata, + removeDiacritics, stringsToRegex, stripMarkdownCharacters, wait, @@ -48,6 +49,8 @@ export async function initGlobalSearchIndex(): Promise { resetNotesCache() minisearchInstance = new MiniSearch({ tokenize, + processTerm: term => + settings.ignoreDiacritics ? removeDiacritics(term) : term, idField: 'path', fields: [ 'basename', diff --git a/src/settings.ts b/src/settings.ts index 5c5a836..c284629 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -11,6 +11,7 @@ interface WeightingSettings { export interface OmnisearchSettings extends WeightingSettings { respectExcluded: boolean reindexInRealTime: boolean + ignoreDiacritics: boolean showIndexingNotices: boolean showShortName: boolean CtrlJK: boolean @@ -68,6 +69,19 @@ export class SettingsTab extends PluginSettingTab { }), ) + // Ignore diacritics + // new Setting(containerEl) + // .setName('Ignore diacritics') + // .setDesc( + // 'Normalize diacritics in search terms. Words like "brûlée" or "žluťoučký" will be indexed as "brulee" and "zlutoucky". Needs a restart to take effect.', + // ) + // .addToggle(toggle => + // toggle.setValue(settings.ignoreDiacritics).onChange(async v => { + // settings.ignoreDiacritics = v + // await saveSettings(this.plugin) + // }), + // ) + // #endregion Behavior // #region User Interface @@ -129,7 +143,9 @@ export class SettingsTab extends PluginSettingTab { new Setting(containerEl).setName('Shortcuts').setHeading() new Setting(containerEl) - .setName('Use [Ctrl/Cmd]+j/k to navigate up/down in the results, if Vim mode is enabled') + .setName( + 'Use [Ctrl/Cmd]+j/k to navigate up/down in the results, if Vim mode is enabled', + ) .addToggle(toggle => toggle.setValue(settings.CtrlJK).onChange(async v => { settings.CtrlJK = v @@ -138,7 +154,9 @@ export class SettingsTab extends PluginSettingTab { ) new Setting(containerEl) - .setName('Use [Ctrl/Cmd]+n/p to navigate up/down in the results, if Vim mode is enabled') + .setName( + 'Use [Ctrl/Cmd]+n/p to navigate up/down in the results, if Vim mode is enabled', + ) .addToggle(toggle => toggle.setValue(settings.CtrlNP).onChange(async v => { settings.CtrlNP = v @@ -163,6 +181,7 @@ export class SettingsTab extends PluginSettingTab { export const DEFAULT_SETTINGS: OmnisearchSettings = { respectExcluded: true, reindexInRealTime: false, + ignoreDiacritics: true, showIndexingNotices: false, showShortName: false, diff --git a/src/utils.ts b/src/utils.ts index 5b7c742..3b1748c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -143,3 +143,10 @@ export function getAliasesFromMetadata( .map(s => (s ? s.trim() : s)) .filter(s => !!s) } + +/** + * https://stackoverflow.com/a/37511463 + */ +export function removeDiacritics(str: string): string { + return str.normalize('NFD').replace(/\p{Diacritic}/gu, '') +}