mirror of
https://github.com/Nystik-gh/ignis.git
synced 2026-06-17 04:35:53 +00:00
add "open workspace in tab" command
This commit is contained in:
@@ -3,6 +3,7 @@ const { showFilePicker, addFileMenuItems, addFolderMenuItems } = require("./file
|
||||
const { patchSettingsModal, unpatchSettingsModal } = require("./settings/inject");
|
||||
const pluginRegistry = require("./plugin-registry");
|
||||
const { initStatusBar } = require("./status-bar");
|
||||
const { WorkspacePickerModal } = require("./workspace-picker");
|
||||
|
||||
window.__obsidianAPI = require("obsidian");
|
||||
|
||||
@@ -18,6 +19,14 @@ class IgnisBridgePlugin extends Plugin {
|
||||
showFilePicker(this.app);
|
||||
});
|
||||
|
||||
this.addCommand({
|
||||
id: "open-workspace-in-new-tab",
|
||||
name: "Open workspace in new tab",
|
||||
callback: () => {
|
||||
new WorkspacePickerModal(this.app).open();
|
||||
},
|
||||
});
|
||||
|
||||
this.registerEvent(
|
||||
this.app.workspace.on("file-menu", (menu, file) => {
|
||||
if (file instanceof TFile) {
|
||||
|
||||
31
plugin/src/workspace-picker.js
Normal file
31
plugin/src/workspace-picker.js
Normal file
@@ -0,0 +1,31 @@
|
||||
const { FuzzySuggestModal } = require("obsidian");
|
||||
|
||||
class WorkspacePickerModal extends FuzzySuggestModal {
|
||||
constructor(app) {
|
||||
super(app);
|
||||
this.setPlaceholder("Open workspace in new tab");
|
||||
}
|
||||
|
||||
getItems() {
|
||||
const plugin = this.app.internalPlugins.plugins.workspaces;
|
||||
|
||||
if (!plugin || !plugin.enabled || !plugin.instance) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return Object.keys(plugin.instance.workspaces);
|
||||
}
|
||||
|
||||
getItemText(item) {
|
||||
return item;
|
||||
}
|
||||
|
||||
onChooseItem(item) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
url.searchParams.set("workspace", item);
|
||||
window.open(url.toString(), "_blank");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { WorkspacePickerModal };
|
||||
@@ -178,6 +178,18 @@ export function initWorkspacePatch() {
|
||||
return data;
|
||||
});
|
||||
|
||||
// Relay watcher events for workspaces.json to the plugin's config change handler,
|
||||
// so creating/deleting workspaces in one tab updates the menu in other tabs.
|
||||
fsShim.watch(".obsidian", (eventType, filename) => {
|
||||
if (filename === "workspaces.json") {
|
||||
plugin.loadData().then((data) => {
|
||||
if (data) {
|
||||
instance.workspaces = data.workspaces || {};
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
console.log("[ignis] Workspaces plugin patched, workspace:", window.__workspaceName || "(none)");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user