diff --git a/src/CmpInput.svelte b/src/CmpInput.svelte index 0086ef2..2d58aca 100644 --- a/src/CmpInput.svelte +++ b/src/CmpInput.svelte @@ -9,6 +9,7 @@ const dispatch = createEventDispatcher() onMount(async () => { await tick() input.focus() + input.select() }) selectedNote.subscribe((note) => { @@ -33,7 +34,16 @@ function moveNoteSelection(ev: KeyboardEvent): void { break case "Enter": - dispatch("enter", $selectedNote) + if (ev.ctrlKey || ev.metaKey) { + // Open in a new pane + dispatch("ctrl-enter", $selectedNote) + } else if (ev.shiftKey) { + // Create a new note + dispatch("shift-enter", $selectedNote) + } else { + // Open in current pane + dispatch("enter", $selectedNote) + } break } } diff --git a/src/CmpModal.svelte b/src/CmpModal.svelte index 124e9c9..eebe4e5 100644 --- a/src/CmpModal.svelte +++ b/src/CmpModal.svelte @@ -81,7 +81,7 @@ function getSuggestions(query: string): ResultNote[] { return suggestions } -async function onChooseSuggestion(item: ResultNote): Promise { +async function openNote(item: ResultNote, newPane = false): Promise { const file = plugin.app.vault.getAbstractFileByPath(item.path) as TFile // const fileCache = this.app.metadataCache.getFileCache(file) // console.log(fileCache) @@ -89,7 +89,7 @@ async function onChooseSuggestion(item: ResultNote): Promise { const offset = content.indexOf( item.matches[item.occurence].match.toLowerCase() ) - await plugin.app.workspace.openLinkText(item.path, "") + await plugin.app.workspace.openLinkText(item.path, "", newPane) const view = plugin.app.workspace.getActiveViewOfType(MarkdownView) if (!view) { @@ -105,16 +105,47 @@ async function onChooseSuggestion(item: ResultNote): Promise { }) } -function openNote(event: CustomEvent): void { - onChooseSuggestion(event.detail) +async function createOrOpenNote(item: ResultNote): Promise { + try { + const file = await plugin.app.vault.create( + $searchQuery + ".md", + "# " + $searchQuery + ) + await plugin.app.workspace.openLinkText(file.path, "") + } catch (e) { + if (e instanceof Error && e.message === "File already exists.") { + // Open the existing file instead of creating it + await openNote(item) + } else { + console.error(e) + } + } +} + +function onInputEnter(event: CustomEvent): void { + openNote(event.detail) + modal.close() +} + +function onInputCtrlEnter(event: CustomEvent): void { + openNote(event.detail, true) + modal.close() +} + +function onInputShiftEnter(event: CustomEvent): void { + createOrOpenNote(event.detail) modal.close() } - +
- {#each $resultNotes as result (result.path)} + {#each $resultNotes as result} {/each}