diff --git a/manifest.json b/manifest.json index c4d2a38..7bdcedd 100644 --- a/manifest.json +++ b/manifest.json @@ -5,5 +5,5 @@ "author": "lazyloong", "minAppVersion": "1.0.0", - "version": "2.22.1" + "version": "2.22.2" } diff --git a/obsidian.d.ts b/obsidian.d.ts index d32428a..575cd2e 100644 --- a/obsidian.d.ts +++ b/obsidian.d.ts @@ -1,6 +1,27 @@ -import { EditorSuggest } from "obsidian"; +import NavboxManager from "./src/manager"; declare module "obsidian" { + interface MarkdownView { + navboxManager: NavboxManager; + } + interface WorkspaceLeaf { + openLinkText: (link: string, currentPath: string, unknown = undefined) => void; + parent: WorkspaceParent; + } + interface Workspace { + handleLinkContextMenu: ( + menu: Menu, + path: string, + currentPath: string, + unknown = undefined + ) => void; + editorSuggest: { + currentSuggest: EditorSuggest | null; + suggests: EditorSuggest[]; + removeSuggest(suggest: EditorSuggest): void; + }; + createLeafInTabGroup(root: WorkspaceParent): WorkspaceLeaf; + } interface App { hotkeyManager: { printHotkeyForCommand(command_id: string): string; @@ -12,6 +33,7 @@ declare module "obsidian" { plugins: Plugin[]; }; commands: { + registerCommand(command: string, callback: () => void): void; executeCommand(command: Command); listCommands(): Command[]; }; @@ -20,22 +42,17 @@ declare module "obsidian" { openTabById(id: string): { setQuery(query: string): void }; }; } + interface DataAdapter { + getBasePath: () => string; + } + interface Menu { + addSections: (sections: string[]) => this; + setParentElement: (element: HTMLElement) => this; + } interface MetadataCache { getTags(): { [k: `#${string}`]: number }; userIgnoreFilterCache: { [k: string]: boolean }; } - interface Workspace { - editorSuggest: { - currentSuggest: EditorSuggest | null; - suggests: EditorSuggest[]; - removeSuggest(suggest: EditorSuggest): void; - }; - createLeafInTabGroup(root: WorkspaceParent): WorkspaceLeaf; - } - interface WorkspaceLeaf { - parent: WorkspaceParent; - openLinkText(linktext: string, source: string): void; - } interface WorkspaceParent { id: string; } diff --git a/src/modal/fileModal.ts b/src/modal/fileModal.ts index e9b6f2e..b2a1661 100644 --- a/src/modal/fileModal.ts +++ b/src/modal/fileModal.ts @@ -1,4 +1,12 @@ -import { TFile, App, WorkspaceLeaf, TAbstractFile, CachedMetadata, TextComponent } from "obsidian"; +import { + TFile, + App, + WorkspaceLeaf, + TAbstractFile, + CachedMetadata, + TextComponent, + Menu, +} from "obsidian"; import { Pinyin, PinyinIndex as PI, @@ -48,11 +56,12 @@ export default class FuzzyFileModal extends FuzzyModal { this.emptyStateText = "未发现该笔记,按下回车创建。"; this.setPlaceholder("输入以切换或创建文件……"); - var i = { + let i = { scope: this.scope, modifiers: null, key: "Enter", func: async (e: KeyboardEvent) => { + e.preventDefault(); const modKey = e.ctrlKey || e.metaKey; const altKey = e.altKey; const shiftKey = e.shiftKey; @@ -76,6 +85,34 @@ export default class FuzzyFileModal extends FuzzyModal { }, }; this.scope.keys.unshift(i); + this.scope.register([], "ContextMenu", async (event: KeyboardEvent) => { + event.preventDefault(); + event.stopPropagation(); + console.log(this); + let item = this.getChoosenItem(); + if (item.type == "unresolvedLink") return; + let menu = new Menu().addSections([ + "title", + "correction", + "spellcheck", + "open", + "selection-link", + "selection", + "insert", + "clipboard", + "action", + "view", + "info", + "", + "danger", + ]); + this.plugin.app.workspace.handleLinkContextMenu(menu, item.file.path, ""); + let element = this.chooser.suggestions[this.chooser.selectedItem]; + menu.setParentElement(element).showAtPosition({ + x: element.offsetLeft, + y: element.offsetTop + element.offsetHeight, + }); + }); let prompt = [ { command: "ctrl ↵",