diff --git a/src/components/ModalVault.svelte b/src/components/ModalVault.svelte
index eb91045..dd6f4b9 100644
--- a/src/components/ModalVault.svelte
+++ b/src/components/ModalVault.svelte
@@ -10,7 +10,8 @@
import { OmnisearchInFileModal, type OmnisearchVaultModal } from 'src/modals'
import ResultItemVault from './ResultItemVault.svelte'
import { Query } from 'src/query'
-import { saveSearchHistory, searchHistory } from 'src/search-history'
+ import { saveSearchHistory, searchHistory } from 'src/search-history'
+ import { SearchContextType, settings } from 'src/settings'
export let modal: OmnisearchVaultModal
let selectedIndex = 0
@@ -28,6 +29,7 @@ import { saveSearchHistory, searchHistory } from 'src/search-history'
}
onMount(async () => {
+ console.log('mount')
await reindexNotes()
searchQuery = searchHistory[historySearchIndex]
eventBus.enable('vault')
@@ -38,8 +40,9 @@ import { saveSearchHistory, searchHistory } from 'src/search-history'
eventBus.on('vault', 'tab', switchToInFileModal)
eventBus.on('vault', 'arrow-up', () => moveIndex(-1))
eventBus.on('vault', 'arrow-down', () => moveIndex(1))
- eventBus.on('vault', 'prev-search-history', () => prevSearchHistory())
- eventBus.on('vault', 'next-search-history', () => nextSearchHistory())
+ eventBus.on('vault', 'prev-search-history', prevSearchHistory)
+ eventBus.on('vault', 'next-search-history', nextSearchHistory)
+ eventBus.on('vault', 'toggle-context', toggleContext)
})
onDestroy(() => {
@@ -59,6 +62,16 @@ import { saveSearchHistory, searchHistory } from 'src/search-history'
searchQuery = searchHistory[historySearchIndex]
}
+ function toggleContext() {
+ settings.update(s => {
+ s.showContext =
+ s.showContext === SearchContextType.None
+ ? SearchContextType.Simple
+ : SearchContextType.None
+ return s
+ })
+ }
+
async function updateResults() {
query = new Query(searchQuery)
resultNotes = (await getSuggestions(query)).sort(
@@ -212,4 +225,10 @@ import { saveSearchHistory, searchHistory } from 'src/search-history'
escto close
+
+
+
+ ctrl+hto toggle context
+
diff --git a/src/components/ResultItemVault.svelte b/src/components/ResultItemVault.svelte
index d9ec50d..ff1eb77 100644
--- a/src/components/ResultItemVault.svelte
+++ b/src/components/ResultItemVault.svelte
@@ -1,6 +1,6 @@
@@ -28,7 +28,10 @@
{/if}
-
- {@html cleanedContent.replace(reg, highlighter)}
-
+
+ {#if $settings.showContext !== SearchContextType.None}
+
+ {@html cleanedContent.replace(reg, highlighter)}
+
+ {/if}
diff --git a/src/modals.ts b/src/modals.ts
index 23ee139..a393d4e 100644
--- a/src/modals.ts
+++ b/src/modals.ts
@@ -3,6 +3,7 @@ import ModalVault from './components/ModalVault.svelte'
import ModalInFile from './components/ModalInFile.svelte'
import { eventBus, isInputComposition } from './globals'
import { settings } from './settings'
+import { get } from 'svelte/store'
abstract class OmnisearchModal extends Modal {
constructor(app: App) {
@@ -37,7 +38,7 @@ abstract class OmnisearchModal extends Modal {
] as const) {
for (const modifier of ['Ctrl', 'Meta'] as const) {
this.scope.register([modifier], key.k, e => {
- if (settings.CtrlJK && this.app.vault.getConfig('vimMode')) {
+ if (get(settings).CtrlJK && this.app.vault.getConfig('vimMode')) {
e.preventDefault()
eventBus.emit('arrow-' + key.dir)
}
@@ -52,7 +53,7 @@ abstract class OmnisearchModal extends Modal {
] as const) {
for (const modifier of ['Ctrl', 'Meta'] as const) {
this.scope.register([modifier], key.k, e => {
- if (settings.CtrlNP && this.app.vault.getConfig('vimMode')) {
+ if (get(settings).CtrlNP && this.app.vault.getConfig('vimMode')) {
e.preventDefault()
eventBus.emit('arrow-' + key.dir)
}
@@ -98,6 +99,12 @@ abstract class OmnisearchModal extends Modal {
e.preventDefault()
eventBus.emit('prev-search-history')
})
+
+ // Context
+ this.scope.register(['Ctrl'], 'h', e => {
+ e.preventDefault()
+ eventBus.emit('toggle-context')
+ })
}
}
diff --git a/src/settings.ts b/src/settings.ts
index 2f349cc..8b5afa0 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -1,6 +1,7 @@
import { Plugin, PluginSettingTab, Setting, SliderComponent } from 'obsidian'
import { notesCacheFilePath, searchIndexFilePath } from './globals'
import type OmnisearchPlugin from './main'
+import { get, readable, writable } from 'svelte/store'
interface WeightingSettings {
weightBasename: number
@@ -15,11 +16,17 @@ export interface OmnisearchSettings extends WeightingSettings {
showIndexingNotices: boolean
ribbonIcon: boolean
showShortName: boolean
+ showContext: SearchContextType
CtrlJK: boolean
CtrlNP: boolean
storeIndexInFile: boolean
}
+export enum SearchContextType {
+ None,
+ Simple,
+}
+
export class SettingsTab extends PluginSettingTab {
plugin: OmnisearchPlugin
@@ -46,8 +53,11 @@ export class SettingsTab extends PluginSettingTab {
'Files that are in Obsidian\'s "Options > Files & Links > Excluded Files" list will be downranked in results.'
)
.addToggle(toggle =>
- toggle.setValue(settings.respectExcluded).onChange(async v => {
- settings.respectExcluded = v
+ toggle.setValue(get(settings).respectExcluded).onChange(async v => {
+ settings.update(s => {
+ s.respectExcluded = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -63,8 +73,11 @@ export class SettingsTab extends PluginSettingTab {
.setName('Ignore diacritics')
.setDesc(diacriticsDesc)
.addToggle(toggle =>
- toggle.setValue(settings.ignoreDiacritics).onChange(async v => {
- settings.ignoreDiacritics = v
+ toggle.setValue(get(settings).ignoreDiacritics).onChange(async v => {
+ settings.update(s => {
+ s.ignoreDiacritics = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -82,10 +95,13 @@ export class SettingsTab extends PluginSettingTab {
.setName('EXPERIMENTAL - Store index in file')
.setDesc(serializedIndexDesc)
.addToggle(toggle =>
- toggle.setValue(settings.storeIndexInFile).onChange(async v => {
+ toggle.setValue(get(settings).storeIndexInFile).onChange(async v => {
app.vault.adapter.remove(notesCacheFilePath)
app.vault.adapter.remove(searchIndexFilePath)
- settings.storeIndexInFile = v
+ settings.update(s => {
+ s.storeIndexInFile = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -103,8 +119,11 @@ export class SettingsTab extends PluginSettingTab {
'Add a button on the sidebar to open the Vault search modal. Needs a restart to remove the button.'
)
.addToggle(toggle =>
- toggle.setValue(settings.ribbonIcon).onChange(async v => {
- settings.ribbonIcon = v
+ toggle.setValue(get(settings).ribbonIcon).onChange(async v => {
+ settings.update(s => {
+ s.ribbonIcon = v
+ return s
+ })
await saveSettings(this.plugin)
if (v) {
this.plugin.addRibbonButton()
@@ -117,8 +136,11 @@ export class SettingsTab extends PluginSettingTab {
.setName('Show indexing notices')
.setDesc('Show a notice when indexing is done, usually at startup.')
.addToggle(toggle =>
- toggle.setValue(settings.showIndexingNotices).onChange(async v => {
- settings.showIndexingNotices = v
+ toggle.setValue(get(settings).showIndexingNotices).onChange(async v => {
+ settings.update(s => {
+ s.showIndexingNotices = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -130,8 +152,11 @@ export class SettingsTab extends PluginSettingTab {
'In the search results, only show the note name, without the full path.'
)
.addToggle(toggle =>
- toggle.setValue(settings.showShortName).onChange(async v => {
- settings.showShortName = v
+ toggle.setValue(get(settings).showShortName).onChange(async v => {
+ settings.update(s => {
+ s.showShortName = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -171,8 +196,11 @@ export class SettingsTab extends PluginSettingTab {
'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
+ toggle.setValue(get(settings).CtrlJK).onChange(async v => {
+ settings.update(s => {
+ s.CtrlJK = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -182,8 +210,11 @@ export class SettingsTab extends PluginSettingTab {
'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
+ toggle.setValue(get(settings).CtrlNP).onChange(async v => {
+ settings.update(s => {
+ s.CtrlNP = v
+ return s
+ })
await saveSettings(this.plugin)
})
)
@@ -193,10 +224,13 @@ export class SettingsTab extends PluginSettingTab {
weightSlider(cb: SliderComponent, key: keyof WeightingSettings): void {
cb.setLimits(1, 3, 0.1)
- cb.setValue(settings[key])
+ cb.setValue(get(settings)[key])
cb.setDynamicTooltip()
cb.onChange(v => {
- settings[key] = v
+ settings.update(s => {
+ s[key] = v
+ return s
+ })
saveSettings(this.plugin)
})
}
@@ -209,6 +243,7 @@ export const DEFAULT_SETTINGS: OmnisearchSettings = {
showIndexingNotices: false,
showShortName: false,
ribbonIcon: true,
+ showContext: SearchContextType.Simple,
weightBasename: 2,
weightH1: 1.5,
@@ -221,12 +256,14 @@ export const DEFAULT_SETTINGS: OmnisearchSettings = {
storeIndexInFile: false,
} as const
-export let settings: OmnisearchSettings = Object.assign({}, DEFAULT_SETTINGS)
+export const settings = writable(
+ Object.assign({}, DEFAULT_SETTINGS) as OmnisearchSettings
+)
export async function loadSettings(plugin: Plugin): Promise {
- settings = Object.assign({}, DEFAULT_SETTINGS, await plugin.loadData())
+ settings.set(Object.assign({}, DEFAULT_SETTINGS, await plugin.loadData()))
}
export async function saveSettings(plugin: Plugin): Promise {
- await plugin.saveData(settings)
+ await plugin.saveData(get(settings))
}