Fixed #26 - Added ctrl+j/k and ctrl+n/p support
This commit is contained in:
@@ -2,6 +2,7 @@ import { App, Modal, TFile } from 'obsidian'
|
|||||||
import ModalVault from './components/ModalVault.svelte'
|
import ModalVault from './components/ModalVault.svelte'
|
||||||
import ModalInFile from './components/ModalInFile.svelte'
|
import ModalInFile from './components/ModalInFile.svelte'
|
||||||
import { eventBus, isInputComposition } from './globals'
|
import { eventBus, isInputComposition } from './globals'
|
||||||
|
import { settings } from './settings'
|
||||||
|
|
||||||
abstract class OmnisearchModal extends Modal {
|
abstract class OmnisearchModal extends Modal {
|
||||||
constructor(app: App) {
|
constructor(app: App) {
|
||||||
@@ -17,6 +18,9 @@ abstract class OmnisearchModal extends Modal {
|
|||||||
this.modalEl.tabIndex = -1
|
this.modalEl.tabIndex = -1
|
||||||
|
|
||||||
// Setup events that can be listened through the event bus
|
// Setup events that can be listened through the event bus
|
||||||
|
|
||||||
|
// #region Up/Down navigation
|
||||||
|
|
||||||
this.scope.register([], 'ArrowDown', e => {
|
this.scope.register([], 'ArrowDown', e => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('arrow-down')
|
eventBus.emit('arrow-down')
|
||||||
@@ -25,6 +29,39 @@ abstract class OmnisearchModal extends Modal {
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('arrow-up')
|
eventBus.emit('arrow-up')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Ctrl+j/k
|
||||||
|
for (const key of [
|
||||||
|
{ k: 'j', dir: 'down' },
|
||||||
|
{ k: 'k', dir: 'up' },
|
||||||
|
] as const) {
|
||||||
|
for (const modifier of ['Ctrl', 'Meta'] as const) {
|
||||||
|
this.scope.register([modifier], key.k, e => {
|
||||||
|
if (settings.CtrlJK) {
|
||||||
|
e.preventDefault()
|
||||||
|
eventBus.emit('arrow-' + key.dir)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ctrl+n/p
|
||||||
|
for (const key of [
|
||||||
|
{ k: 'n', dir: 'down' },
|
||||||
|
{ k: 'p', dir: 'up' },
|
||||||
|
] as const) {
|
||||||
|
for (const modifier of ['Ctrl', 'Meta'] as const) {
|
||||||
|
this.scope.register([modifier], key.k, e => {
|
||||||
|
if (settings.CtrlNP) {
|
||||||
|
e.preventDefault()
|
||||||
|
eventBus.emit('arrow-' + key.dir)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// #endregion Up/Down navigation
|
||||||
|
|
||||||
this.scope.register(['Ctrl'], 'Enter', e => {
|
this.scope.register(['Ctrl'], 'Enter', e => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('ctrl-enter') // Open in new pane
|
eventBus.emit('ctrl-enter') // Open in new pane
|
||||||
@@ -33,16 +70,20 @@ abstract class OmnisearchModal extends Modal {
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('ctrl-enter') // Open in new pane (but on Mac)
|
eventBus.emit('ctrl-enter') // Open in new pane (but on Mac)
|
||||||
})
|
})
|
||||||
|
|
||||||
this.scope.register(['Alt'], 'Enter', e => {
|
this.scope.register(['Alt'], 'Enter', e => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('alt-enter') // Open the InFile modal
|
eventBus.emit('alt-enter') // Open the InFile modal
|
||||||
})
|
})
|
||||||
|
|
||||||
this.scope.register(['Shift'], 'Enter', e => {
|
this.scope.register(['Shift'], 'Enter', e => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('shift-enter') // Create a new note
|
eventBus.emit('shift-enter') // Create a new note
|
||||||
})
|
})
|
||||||
|
|
||||||
this.scope.register([], 'Enter', e => {
|
this.scope.register([], 'Enter', e => {
|
||||||
if (!isInputComposition()) { // Check if the user is still typing
|
if (!isInputComposition()) {
|
||||||
|
// Check if the user is still typing
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
eventBus.emit('enter') // Open in current pane
|
eventBus.emit('enter') // Open in current pane
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ export interface OmnisearchSettings extends WeightingSettings {
|
|||||||
showIndexingNotices: boolean
|
showIndexingNotices: boolean
|
||||||
respectExcluded: boolean
|
respectExcluded: boolean
|
||||||
reindexInRealTime: boolean
|
reindexInRealTime: boolean
|
||||||
|
CtrlJK: boolean
|
||||||
|
CtrlNP: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SettingsTab extends PluginSettingTab {
|
export class SettingsTab extends PluginSettingTab {
|
||||||
@@ -72,6 +74,8 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
settings.reindexInRealTime = false
|
settings.reindexInRealTime = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #region Results Weighting
|
||||||
|
|
||||||
new Setting(containerEl).setName('Results weighting').setHeading()
|
new Setting(containerEl).setName('Results weighting').setHeading()
|
||||||
|
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
@@ -91,6 +95,32 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName(`Headings level 3 (default: ${DEFAULT_SETTINGS.weightH3})`)
|
.setName(`Headings level 3 (default: ${DEFAULT_SETTINGS.weightH3})`)
|
||||||
.addSlider(cb => this.weightSlider(cb, 'weightH3'))
|
.addSlider(cb => this.weightSlider(cb, 'weightH3'))
|
||||||
|
|
||||||
|
// #endregion Results Weighting
|
||||||
|
|
||||||
|
// #region Shortcuts
|
||||||
|
|
||||||
|
new Setting(containerEl).setName('Shortcuts').setHeading()
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName('Use [Ctrl/Cmd]+j/k to navigate up/down in the results')
|
||||||
|
.addToggle(toggle =>
|
||||||
|
toggle.setValue(settings.CtrlJK).onChange(async v => {
|
||||||
|
settings.CtrlJK = v
|
||||||
|
await saveSettings(this.plugin)
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName('Use [Ctrl/Cmd]+n/p to navigate up/down in the results')
|
||||||
|
.addToggle(toggle =>
|
||||||
|
toggle.setValue(settings.CtrlNP).onChange(async v => {
|
||||||
|
settings.CtrlNP = v
|
||||||
|
await saveSettings(this.plugin)
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
|
// #endregion Shortcuts
|
||||||
}
|
}
|
||||||
|
|
||||||
weightSlider(cb: SliderComponent, key: keyof WeightingSettings): void {
|
weightSlider(cb: SliderComponent, key: keyof WeightingSettings): void {
|
||||||
@@ -108,10 +138,14 @@ export const DEFAULT_SETTINGS: OmnisearchSettings = {
|
|||||||
showIndexingNotices: false,
|
showIndexingNotices: false,
|
||||||
respectExcluded: true,
|
respectExcluded: true,
|
||||||
reindexInRealTime: false,
|
reindexInRealTime: false,
|
||||||
|
|
||||||
weightBasename: 2,
|
weightBasename: 2,
|
||||||
weightH1: 1.5,
|
weightH1: 1.5,
|
||||||
weightH2: 1.3,
|
weightH2: 1.3,
|
||||||
weightH3: 1.1,
|
weightH3: 1.1,
|
||||||
|
|
||||||
|
CtrlJK: false,
|
||||||
|
CtrlNP: false,
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export let settings: OmnisearchSettings = Object.assign({}, DEFAULT_SETTINGS)
|
export let settings: OmnisearchSettings = Object.assign({}, DEFAULT_SETTINGS)
|
||||||
|
|||||||
Reference in New Issue
Block a user