diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 0000000..29f8f8c --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,29 @@ +#-------------------------------------------------------------------------------# +# Qodana analysis is configured by qodana.yaml file # +# https://www.jetbrains.com/help/qodana/qodana-yaml.html # +#-------------------------------------------------------------------------------# +version: "1.0" + +#Specify inspection profile for code analysis +profile: + name: qodana.starter + +#Enable inspections +#include: +# - name: + +#Disable inspections +#exclude: +# - name: +# paths: +# - + +#Execute shell command before Qodana execution (Applied in CI/CD pipeline) +#bootstrap: sh ./prepare-qodana.sh + +#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) +#plugins: +# - id: #(plugin id can be found at https://plugins.jetbrains.com) + +#Specify Qodana linter for analysis (Applied in CI/CD pipeline) +linter: jetbrains/qodana-js:latest diff --git a/src/components/ModalInFile.svelte b/src/components/ModalInFile.svelte index 5b8739a..6d64f55 100644 --- a/src/components/ModalInFile.svelte +++ b/src/components/ModalInFile.svelte @@ -35,11 +35,11 @@ onMount(() => { eventBus.enable('infile') - eventBus.on('infile', 'enter', openSelection) - eventBus.on('infile', 'open-in-new-pane', openSelectionInNewTab) - eventBus.on('infile', 'arrow-up', () => moveIndex(-1)) - eventBus.on('infile', 'arrow-down', () => moveIndex(1)) - eventBus.on('infile', 'tab', switchToVaultModal) + eventBus.on('infile', Action.Enter, openSelection) + eventBus.on('infile', Action.OpenInNewPane, openSelectionInNewTab) + eventBus.on('infile', Action.ArrowUp, () => moveIndex(-1)) + eventBus.on('infile', Action.ArrowDown, () => moveIndex(1)) + eventBus.on('infile', Action.Tab, switchToVaultModal) }) onDestroy(() => { diff --git a/src/components/ModalVault.svelte b/src/components/ModalVault.svelte index 9bbaf80..cc6a7d7 100644 --- a/src/components/ModalVault.svelte +++ b/src/components/ModalVault.svelte @@ -9,6 +9,7 @@ IndexingStepType, type ResultNote, SPACE_OR_PUNCTUATION, + Action, } from 'src/globals' import { createNote, openNote } from 'src/tools/notes' import { @@ -90,15 +91,16 @@ onMount(async () => { eventBus.enable('vault') - eventBus.on('vault', 'enter', openNoteAndCloseModal) - eventBus.on('vault', 'create-note', createNoteAndCloseModal) - eventBus.on('vault', 'open-in-new-pane', openNoteInNewPane) - eventBus.on('vault', 'insert-link', insertLink) - 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', Action.Enter, openNoteAndCloseModal) + eventBus.on('vault', Action.OpenInBackground, openNoteInBackground) + eventBus.on('vault', Action.CreateNote, createNoteAndCloseModal) + eventBus.on('vault', Action.OpenInNewPane, openNoteInNewPane) + eventBus.on('vault', Action.InsertLink, insertLink) + eventBus.on('vault', Action.Tab, switchToInFileModal) + eventBus.on('vault', Action.ArrowUp, () => moveIndex(-1)) + eventBus.on('vault', Action.ArrowDown, () => moveIndex(1)) + eventBus.on('vault', Action.PrevSearchHistory, prevSearchHistory) + eventBus.on('vault', Action.NextSearchHistory, nextSearchHistory) await NotesIndex.refreshIndex() if (settings.showPreviousQueryResults) { previousQuery = (await cacheManager.getSearchHistory())[0] @@ -162,6 +164,11 @@ modal.close() } + function openNoteInBackground(): void { + if (!selectedNote) return + openSearchResult(selectedNote, true) + } + function openNoteInNewPane(): void { if (!selectedNote) return openSearchResult(selectedNote, true) @@ -324,7 +331,8 @@ to cycle history
- {openInCurrentPaneKey}to open + {openInCurrentPaneKey} + to open
tab @@ -335,6 +343,12 @@ {openInNewPaneKey} to open in a new pane
+ +
+ alt o + to open in the background +
+
{createInCurrentPaneKey} to create @@ -349,7 +363,7 @@ to insert a link
- ctrl+h + ctrl h to toggle excerpts
diff --git a/src/components/modals.ts b/src/components/modals.ts index 238114f..032b6e8 100644 --- a/src/components/modals.ts +++ b/src/components/modals.ts @@ -2,7 +2,7 @@ import { App, Modal, TFile } from 'obsidian' import type { Modifier } from 'obsidian' import ModalVault from './ModalVault.svelte' import ModalInFile from './ModalInFile.svelte' -import { eventBus, EventNames, isInputComposition } from '../globals' +import { Action, eventBus, EventNames, isInputComposition } from '../globals' import { settings } from '../settings' abstract class OmnisearchModal extends Modal { @@ -24,11 +24,11 @@ abstract class OmnisearchModal extends Modal { this.scope.register([], 'ArrowDown', e => { e.preventDefault() - eventBus.emit('arrow-down') + eventBus.emit(Action.ArrowDown) }) this.scope.register([], 'ArrowUp', e => { e.preventDefault() - eventBus.emit('arrow-up') + eventBus.emit(Action.ArrowUp) }) // Ctrl+j/k @@ -82,23 +82,23 @@ abstract class OmnisearchModal extends Modal { // Open in new pane this.scope.register(openInNewPaneKey, 'Enter', e => { e.preventDefault() - eventBus.emit('open-in-new-pane') + eventBus.emit(Action.OpenInNewPane) }) // Insert link this.scope.register(['Alt'], 'Enter', e => { e.preventDefault() - eventBus.emit('insert-link') + eventBus.emit(Action.InsertLink) }) // Create a new note this.scope.register(createInCurrentPaneKey, 'Enter', e => { e.preventDefault() - eventBus.emit('create-note') + eventBus.emit(Action.CreateNote) }) this.scope.register(createInNewPaneKey, 'Enter', e => { e.preventDefault() - eventBus.emit('create-note', { newLeaf: true }) + eventBus.emit(Action.CreateNote, { newLeaf: true }) }) // Open in current pane @@ -106,23 +106,32 @@ abstract class OmnisearchModal extends Modal { if (!isInputComposition()) { // Check if the user is still typing e.preventDefault() - eventBus.emit('enter') + eventBus.emit(Action.Enter) + } + }) + + // Open in background + this.scope.register(['Alt'], 'O', e => { + if (!isInputComposition()) { + // Check if the user is still typing + e.preventDefault() + eventBus.emit(Action.OpenInBackground) } }) this.scope.register([], 'Tab', e => { e.preventDefault() - eventBus.emit('tab') // Switch context + eventBus.emit(Action.Tab) // Switch context }) // Search history this.scope.register(['Alt'], 'ArrowDown', e => { e.preventDefault() - eventBus.emit('next-search-history') + eventBus.emit(Action.NextSearchHistory) }) this.scope.register(['Alt'], 'ArrowUp', e => { e.preventDefault() - eventBus.emit('prev-search-history') + eventBus.emit(Action.PrevSearchHistory) }) // Context diff --git a/src/globals.ts b/src/globals.ts index 7f977a5..e3b0cb8 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -32,6 +32,19 @@ export const enum IndexingStepType { WritingCache, } +export const enum Action { + Enter = 'enter', + OpenInBackground = 'open-in-background', + CreateNote = 'create-note', + OpenInNewPane = 'open-in-new-pane', + InsertLink = 'insert-link', + Tab = 'tab', + ArrowUp = 'arrow-up', + ArrowDown = 'arrow-down', + PrevSearchHistory = 'prev-search-history', + NextSearchHistory = 'next-search-history', +} + export type DocumentRef = { path: string; mtime: number } export type IndexedDocument = {