diff --git a/src/main.ts b/src/main.ts index 19b2860..f5ea6a4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,11 +7,13 @@ import { } from './search' import { OmnisearchInFileModal, OmnisearchVaultModal } from './modals' import { loadSettings, SettingsTab } from './settings' +import { OmnisearchSuggest } from './suggestions' export default class OmnisearchPlugin extends Plugin { async onload(): Promise { await loadSettings(this) this.addSettingTab(new SettingsTab(this)) + this.registerEditorSuggest(new OmnisearchSuggest(app)) // Commands to display Omnisearch modals this.addCommand({ diff --git a/src/suggestions.ts b/src/suggestions.ts new file mode 100644 index 0000000..c59d800 --- /dev/null +++ b/src/suggestions.ts @@ -0,0 +1,38 @@ +import { + Editor, + EditorSuggest, + TFile, + type EditorPosition, + type EditorSuggestContext, + type EditorSuggestTriggerInfo, +} from 'obsidian' + +export class OmnisearchSuggest extends EditorSuggest { + onTrigger( + cursor: EditorPosition, + editor: Editor, + file: TFile, + ): EditorSuggestTriggerInfo | null { + const last2Chars = editor.getLine(cursor.line).slice(-2, cursor.ch) + if (last2Chars === '@@') { + return { + start: cursor, + end: cursor, + query: 'foo', + } + } + return null + } + + getSuggestions(context: EditorSuggestContext): string[] | Promise { + return ['foo', 'bar'] + } + + renderSuggestion(value: string, el: HTMLElement): void { + el.createSpan({ text: value }) + } + + selectSuggestion(value: string, evt: MouseEvent | KeyboardEvent): void { + throw new Error('Method not implemented.') + } +}