Compare commits
6 Commits
282fd1be13
...
921a72b015
Author | SHA1 | Date | |
---|---|---|---|
921a72b015 | |||
92a7af6ec5 | |||
52ada90150 | |||
d3c7e7ea8e | |||
99fd363c22 | |||
dd7d7a367d |
11
README.md
11
README.md
|
@ -1,10 +1,13 @@
|
|||
> [!CAUTION]
|
||||
> This project is a heavy work-in-progress, there are bugs, and features may change or disappear.
|
||||
|
||||
# Locator for Obsidian
|
||||
|
||||
[](https://github.com/sponsors/scambier)
|
||||
|
||||
---
|
||||
|
||||
**Locator** is an Obsidian plugin that lets you locate your files in a few keystrokes. It is a lightweight, experimental version of Omnisearch.
|
||||
**Locator** is an Obsidian plugin that lets you locate your files in a few keystrokes. It is an experimental fork of Omnisearch.
|
||||
|
||||
It always instantly shows you the most relevant results, thanks to its smart weighting algorithm.
|
||||
|
||||
|
@ -39,15 +42,13 @@ You can check the [CHANGELOG](./CHANGELOG.md) for more information on the differ
|
|||
- Directly Insert a `[[link]]` from the search results
|
||||
- Supports Vim navigation keys
|
||||
|
||||
**Note:** support of Chinese depends
|
||||
on [this additional plugin](https://github.com/aidenlx/cm-chs-patch) (also you may need to clear search cache data to apply new Chinese index). Please read its documentation for more
|
||||
information.
|
||||
|
||||
## Issues & Feature Requests
|
||||
|
||||
If you're reading this README from the [repository's page](https://git.scambier.xyz/scambier/obsidian-locator), you'll notice it is hosted on a private forge without account registration.
|
||||
Locator is a personal hobby project, tailored for my own needs. It is publicly available because you may find it useful too, but I'm not interested in your issues or pull requests.
|
||||
|
||||
If you'd like to participate in a similar project (thank you!), I'll be glad to review your pull requests for [**Omnisearch**](https://github.com/scambier/obsidian-omnisearch)
|
||||
|
||||
Thank you for your understanding.
|
||||
|
||||
## LICENSE
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
<script lang="ts">
|
||||
import type { ResultNote } from '../globals'
|
||||
import ResultItemContainer from './ResultItemContainer.svelte'
|
||||
import type LocatorPlugin from '../main'
|
||||
|
||||
export let plugin: LocatorPlugin
|
||||
export let offset: number
|
||||
export let note: ResultNote
|
||||
export let index = 0
|
||||
export let selected = false
|
||||
|
||||
$: cleanedContent = plugin.textProcessor.makeExcerpt(note?.content ?? '', offset)
|
||||
</script>
|
||||
|
||||
<ResultItemContainer
|
||||
id="{index.toString()}"
|
||||
on:auxclick
|
||||
on:click
|
||||
on:mousemove
|
||||
selected="{selected}">
|
||||
<div class="omnisearch-result__body">
|
||||
{@html plugin.textProcessor.highlightText(cleanedContent, note.matches)}
|
||||
</div>
|
||||
</ResultItemContainer>
|
|
@ -5,7 +5,7 @@ import { Notice } from 'obsidian'
|
|||
import type LocatorPlugin from './main'
|
||||
|
||||
export class Database extends Dexie {
|
||||
public static readonly dbVersion = 10
|
||||
public static readonly dbVersion = 1
|
||||
searchHistory!: Dexie.Table<{ id?: number; query: string }, number>
|
||||
minisearch!: Dexie.Table<
|
||||
{
|
||||
|
|
|
@ -190,15 +190,16 @@ export class SearchEngine {
|
|||
}
|
||||
const mtime = storedFields?.mtime as number
|
||||
const now = new Date().valueOf()
|
||||
const daysElapsed = (now - mtime) / (24 * 3600)
|
||||
|
||||
const daysElapsed = (now - mtime) / (24 * 3600_000)
|
||||
// Documents boost
|
||||
const cutoff = {
|
||||
[RecencyCutoff.Day]: -3,
|
||||
[RecencyCutoff.Week]: -0.3,
|
||||
[RecencyCutoff.Month]: -0.1,
|
||||
} as const
|
||||
return 1 + Math.exp(cutoff[settings.recencyBoost] * daysElapsed)
|
||||
return (
|
||||
1 + Math.exp(cutoff[settings.recencyBoost] * (daysElapsed / 1000))
|
||||
)
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
import { App, Plugin, PluginSettingTab, Setting } from 'obsidian'
|
||||
import { RecencyCutoff } from '../globals'
|
||||
import type LocatorPlugin from '../main'
|
||||
import { enableVerboseLogging } from '../tools/utils'
|
||||
import { injectSettingsBehavior } from './settings-behavior'
|
||||
import { injectSettingsDanger } from './settings-danger'
|
||||
import { injectSettingsHttp } from './settings-http'
|
||||
|
@ -64,7 +63,6 @@ export class SettingsTab extends PluginSettingTab {
|
|||
.addToggle(toggle =>
|
||||
toggle.setValue(settings.verboseLogging).onChange(async v => {
|
||||
settings.verboseLogging = v
|
||||
enableVerboseLogging(v)
|
||||
await saveSettings(this.plugin)
|
||||
})
|
||||
)
|
||||
|
@ -137,6 +135,5 @@ export async function loadSettings(plugin: Plugin): Promise<LocatorSettings> {
|
|||
await plugin.loadData()
|
||||
)
|
||||
showExcerpt.set(settings.showExcerpt)
|
||||
enableVerboseLogging(settings.verboseLogging)
|
||||
return settings
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import {
|
|||
import { md5 } from 'pure-md5'
|
||||
import { eng, fra } from 'stopword'
|
||||
import { isSearchMatch, type SearchMatch } from '../globals'
|
||||
import { settings } from 'src/settings'
|
||||
|
||||
export function pathWithoutFilename(path: string): string {
|
||||
const split = path.split('/')
|
||||
|
@ -121,11 +122,12 @@ export function removeDiacritics(str: string, arabic = true): string {
|
|||
return ''
|
||||
}
|
||||
|
||||
// TODO: add a global setting to toggle this, this impacts performances
|
||||
if (arabic) {
|
||||
// Arabic diacritics
|
||||
// https://stackoverflow.com/a/40959537
|
||||
str = str
|
||||
.replace(/([^\u0621-\u063A\u0641-\u064A\u0660-\u0669a-zA-Z 0-9])/g, '')
|
||||
// .replace(/([^\u0621-\u063A\u0641-\u064A\u0660-\u0669a-zA-Z 0-9])/g, '')
|
||||
.replace(/(آ|إ|أ)/g, 'ا')
|
||||
.replace(/(ة)/g, 'ه')
|
||||
.replace(/(ئ|ؤ)/g, 'ء')
|
||||
|
@ -144,6 +146,7 @@ export function removeDiacritics(str: string, arabic = true): string {
|
|||
str = str.normalize('NFD').replace(diacriticsRegex, '').normalize('NFC')
|
||||
str = str.replaceAll('[__locator__backtick__]', '`')
|
||||
str = str.replaceAll('[__locator__caret__]', '^')
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
|
@ -250,13 +253,8 @@ export function warnVerbose(...args: any[]): void {
|
|||
printVerbose(console.warn, ...args)
|
||||
}
|
||||
|
||||
let verboseLoggingEnabled = false
|
||||
export function enableVerboseLogging(enable: boolean): void {
|
||||
verboseLoggingEnabled = enable
|
||||
}
|
||||
|
||||
function printVerbose(fn: (...args: any[]) => any, ...args: any[]): void {
|
||||
if (verboseLoggingEnabled) {
|
||||
if (settings.verboseLogging) {
|
||||
fn(...args)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user