add "open workspace in tab" command

This commit is contained in:
Nystik
2026-04-03 12:19:24 +02:00
parent 6865c049a3
commit bd6161bd31
3 changed files with 52 additions and 0 deletions

View File

@@ -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) {

View 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 };

View File

@@ -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)");
});