typora_plugin icon indicating copy to clipboard operation
typora_plugin copied to clipboard

window_tab 改进建议

Open aldol-reaction opened this issue 1 year ago • 6 comments

ctrl+n 是否可以设置为新建空白标签页,目前还是typora默认的新建一个空白窗口。

aldol-reaction avatar Jan 31 '24 04:01 aldol-reaction

还有是,两个窗口的标签页可以支持拖拽吗。 ctrl+o打开的文件是否也可以在当前窗口再增加标签页而不是新打开一个窗口。

aldol-reaction avatar Jan 31 '24 04:01 aldol-reaction

ctrl+n 是否可以设置为新建空白标签页,目前还是typora默认的新建一个空白窗口。 我的也是,打开新文件都变成了新窗口打开,不知道为什么?版本是win11,Typora是1.8.9版本,插件是1.7.42

Ignorant12321 avatar Jan 31 '24 14:01 Ignorant12321

+1,找多标签找到了这里来了。 插件做的非常好。 期望的多标签是可以支持不同路径的文档多标签页,原版好像不行,不知道插件作者这边是否可以?

BlueNoob avatar Mar 24 '24 22:03 BlueNoob

我还有个建议: 可否增加一个 不显示标签页右边的叉叉 的功能, 容易误点. 因为一般用快捷键 Ctrl+W 就很快关闭了. 希望考虑, 谢谢!

constwill22 avatar May 20 '24 23:05 constwill22

@constwill22

有这个功能,不过默认是关闭的,需要您手动开启,在 plugin/global/settings/settings.user.toml 添加下面内容即可:

[window_tab]
# 显示tab的关闭按钮
SHOW_TAB_CLOSE_BUTTON = false

参考:如何修改配置

obgnail avatar May 21 '24 01:05 obgnail

@constwill22

有这个功能,不过默认是关闭的,需要您手动开启,在 plugin/global/settings/settings.user.toml 添加下面内容即可:

[window_tab]
# 显示tab的关闭按钮
SHOW_TAB_CLOSE_BUTTON = false

参考:如何修改配置

谢谢!

constwill22 avatar May 22 '24 09:05 constwill22

作者你好,已经 star 了这个实用的插件,感谢。但是对于 windows tab 的实现能请教下吗,就是可以做到那种多 tab 间关联吗,在 tab1 上打开了 tab2,如果此时关闭 tab2,在 tab1 要监听识别到 tab2 的关闭,这种你知道怎么实现吗?

liang-happy avatar Sep 30 '24 08:09 liang-happy

@liang-happy

你是要自己写插件吗?

window_tab 有一个 tabUtil 对象用于维护标签页相关数据,通过 window_tab.tabUtil.tabs 就可以得到当前全部的 tabs。

你有两种选择,

  1. 一种是使用 Proxy 去监听 window_tab.tabUtil.tabs 的底层数据变动
  2. 另一种是使用装饰器去监听业务函数,实现一个钩子函数。

我这里介绍第二种,目前关闭标签页有五个业务函数 closeTab、closeActiveTab、closeOtherTabs、closeLeftTabs、closeRightTabs,所以你只要装饰一下这五个函数就可以获取对应的数据

tempFeat = () => {
    // 在这里写你的业务的代码
    // 钩子函数,会在关闭标签的时候自动调用
    const onTabChange = (oldTabs, curTabs) => {
        console.log("oldTabs", oldTabs);  // 关闭前的Tab列表
        console.log("curTabs", curTabs);  // 关闭后的Tab列表
    }

    this.utils.eventHub.addEventListener(this.utils.eventHub.eventType.allPluginsHadInjected, () => {
        const plugin = this.utils.getPlugin("window_tab");
        if (!plugin) {
            throw new Error("window_tab is closed")
        }

        let oldTabs = [];
        const beforeTabClose = () => oldTabs = [...plugin.tabUtil.tabs];
        const afterTabClose = () => {
            onTabChange(oldTabs, [...plugin.tabUtil.tabs]);
            oldTabs = [];
        }
        const funcList = ["closeTab", "closeActiveTab", "closeOtherTabs", "closeLeftTabs", "closeRightTabs"];
        funcList.forEach(f => this.utils.decorate(() => plugin, f, beforeTabClose, afterTabClose));
    })
}

obgnail avatar Sep 30 '24 10:09 obgnail

@obgnail 感谢作者回复。其实也不是自己写插件,如果有现成能用能满足的插件最好。你说的 window_tab 是一个现成的插件么? 其实我想要实现的就是在 tab1 上使用类似的 window.open 打开一个新 tab2,然后在 tab2 关闭时 tab1 能够监测得到。主要是想在 electron 上实现,因为 electron 上只有多窗口没有这种多 tab 模式。恰好 typora 应该也是用的 electron 来开发的吧,所以就想请教一下你是怎么实现的。

liang-happy avatar Oct 08 '24 01:10 liang-happy