add "open workspace in tab" command
This commit is contained in:
parent
6865c049a3
commit
bd6161bd31
3 changed files with 52 additions and 0 deletions
|
|
@ -3,6 +3,7 @@ const { showFilePicker, addFileMenuItems, addFolderMenuItems } = require("./file
|
||||||
const { patchSettingsModal, unpatchSettingsModal } = require("./settings/inject");
|
const { patchSettingsModal, unpatchSettingsModal } = require("./settings/inject");
|
||||||
const pluginRegistry = require("./plugin-registry");
|
const pluginRegistry = require("./plugin-registry");
|
||||||
const { initStatusBar } = require("./status-bar");
|
const { initStatusBar } = require("./status-bar");
|
||||||
|
const { WorkspacePickerModal } = require("./workspace-picker");
|
||||||
|
|
||||||
window.__obsidianAPI = require("obsidian");
|
window.__obsidianAPI = require("obsidian");
|
||||||
|
|
||||||
|
|
@ -18,6 +19,14 @@ class IgnisBridgePlugin extends Plugin {
|
||||||
showFilePicker(this.app);
|
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.registerEvent(
|
||||||
this.app.workspace.on("file-menu", (menu, file) => {
|
this.app.workspace.on("file-menu", (menu, file) => {
|
||||||
if (file instanceof TFile) {
|
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;
|
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)");
|
console.log("[ignis] Workspaces plugin patched, workspace:", window.__workspaceName || "(none)");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue