siyuan-note / siyuan

A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang.
https://b3log.org/siyuan
GNU Affero General Public License v3.0
22.28k stars 1.58k forks source link

支持保存窗口工作区 #10809

Open UFDXD opened 7 months ago

UFDXD commented 7 months ago

释放新窗口功能潜力,支持记忆新窗口布局,支持多新窗口工作流

In what scenarios do you need this feature?

最近 新窗口功能 加强https://github.com/siyuan-note/siyuan/issues/10773 和布局保持功能增强https://github.com/siyuan-note/siyuan/issues/10783 https://github.com/siyuan-note/siyuan/issues/10782 我觉得可以释放新窗口的更多的潜力,如可以新窗口支持保存布局,布局配置在主窗口一个列表显示可以记录多个新窗口配置。下次要打开想要布局的新窗口自己在主窗口点击布局配置就可以,免得下此以腾出分屏窗口到新窗口在新窗口重新拖动分屏。(新窗口支持内部分屏,我觉得保存新窗口配置是可能的) 这样的好处就是将主窗口的一些工作流布局完全转移到新窗口,这样可以多配置多打开工作流程更加方便。而且最重要的可以优化主窗口软件性能,分担优化性能,如多分屏的主窗口dom太大性能肯定不太好的比如拖动等。这样部分窗口工作流转到新窗口就很好。(有些在主窗口因为打开了很多文档和风分屏的情况下拖动性能不好的文档,我会打开到新窗口,确实发现性能得到提升,新窗口支持记忆布局可以分担主窗口前端性能压力)

Describe the optimal solution

希望得到支持,释放思源新窗口强大的潜力,更令人爱不释手,实用性突破大气层。(不需要在需要新开窗口工作流情形下,繁琐的找文档新开窗口再拖文档布局)

Describe the candidate solution

新窗口下可以点击按钮保存布局,在新窗口关闭后,在主窗口布局选项下多一个子窗口配置项,这个配置可以有多个,下次要用到这个新窗口配置,直接点击配置项就打开窗口同时新窗口有保存的布局。

Other information

下次打开新窗口入口在主窗口的布局下面,下次要打开保存布局窗口直接选中点击 image

UFDXD commented 7 months ago

正经建议,希望考虑

UFDXD commented 7 months ago

支持新窗口布局保存的话最常用的应该是研学党,可能会打开一份pdf和一份pdf备注文档。下次要读这份pdf和备注的时候可以一键打开,我觉得可以解决 https://github.com/siyuan-note/siyuan/issues/10807 的问题,这样会更加方便。

88250 commented 7 months ago

你好,我没看明白这个和 #10807 的区别是?

UFDXD commented 7 months ago

@88250 区别这个单独保存新窗口系列布局配置,不和保存主窗口布局功能耦合。不要改动现有代码,功能分开独立,使用时可以相互配合。

而且赋予思源工作区概念 比如将这个整个笔记工作空间比作工作区的话,工作区可以还有自己的工作区,可以单独保存布局的新窗口就是工作区的工作区,这比再开一个整个笔记工作空间更轻量更好。列如建立一个读书笔记新窗口工作区,主窗口可以完全不需要读书笔记相关页签文档,直接点击已有配置新窗口就可以,打开后PDF页签和备注文档都在。这样主窗口可以关注主窗口更加关注的事情,如建立一个好看的主页(花里胡哨)、MOC管理、等等。

简单的说就是,与https://github.com/siyuan-note/siyuan/issues/10807 有差别,但我的更方便更好。且从根本上我的目的是新窗口工作区从概念上与它有歧义的差别,且我的阐述更明确,所以我开了这个issue

5kyfkr commented 7 months ago

工作区可以还有自己的工作区,可以单独保存布局的新窗口就是工作区的工作区,这比再开一个整个笔记工作空间更轻量更好。列如建立一个读书笔记新窗口工作区,主窗口可以完全不需要读书笔记相关页签文档,直接点击已有配置新窗口就可以,打开后PDF页签和备注文档都在。这样主窗口可以关注主窗口更加关注的事情

感觉这个相当于edge里左上角的工作区功能,或者说是win系统的不同桌面空间,前提是要思源能支持不同窗口下也能像主窗口一样有标签页,且也能左右分屏排布等,不然就会是单独几个窗口不规则排布,或者能多个窗口记忆绑定位置也可以,如果D大V姐能做到这个程度那我当然是相当支持的,现在工作空间这个功能说实话我用不上,更像是win或者浏览器里面切换不同用户,因为配置都是完全不一样的。

UFDXD commented 7 months ago

@5kyfkr 不需要想得太复杂,点击已有配置打开新窗口就行,若是真的要实用自己就无意识拖动排列了或使用win自带的窗口布局,思源不需要支持到如此地步。

fbfaaf6ddeac319f16b362c9563c204b

UFDXD commented 7 months ago

前提是要思源能支持不同窗口下也能像主窗口一样有标签页,且也能左右分屏排布等,不然就会是单独几个窗口不规则排布

@5kyfkr 抱歉上一个回答我有些理解错误。不过新开的窗口本身就可以内部分屏的,这个不要担心

https://github.com/siyuan-note/siyuan/assets/97731736/f8a2108c-5a60-47cb-ade4-9cdfcd386568

5kyfkr commented 7 months ago

@5kyfkr 抱歉上一个回答我有些理解错误。不过新开的窗口本身就可以内部分屏的,这个不要担心

我也没怎么用过多窗口看笔记,基本上看PDF才会移出来,试了确实可以有页签。 那就是相当于保存单独的窗口组了,那这个也可以,路线相当于先实现多窗口(主窗口以外的窗口)保存,然后实现能保存多窗口组的分类,然后在布局外多一个多窗口组的打开的位置

有个问题就是布局包不包含这个窗口组,如果不包含那布局要改名字为“主窗口布局”会好点,如果包含进去可能自由度会差一点

UFDXD commented 7 months ago

@5kyfkr 抱歉上一个回答我有些理解错误。不过新开的窗口本身就可以内部分屏的,这个不要担心

我也没怎么用过多窗口看笔记,基本上看PDF才会移出来,试了确实可以有页签。 那就是相当于保存单独的窗口组了,那这个也可以,路线相当于先实现多窗口(主窗口以外的窗口)保存,然后实现能保存多窗口组的分类,然后在布局外多一个多窗口组的打开的位置。

这样 单独的窗口负责单独的工作任务。读书笔记 就只读书笔记,你可以打开PDF和笔记文件。甚至在新窗口本身可以内部分屏的基础上,你可以打开很多的PDF和很多的读书笔记。这只需要一个窗口,而不需要更多的。

5kyfkr commented 7 months ago

这样 单独的窗口负责单独的工作任务。读书笔记 就只读书笔记,你可以打开PDF和笔记文件。甚至带新新窗口本身可以内部分屏的基础上,你可以打开很多的PDF和很多的读书笔记。这只需要一个窗口,而不需要更多的。

是的,其实相当于多窗口的布局独立出来保存,不影响主窗口

UFDXD commented 7 months ago

有个问题就是布局包不包含这个窗口组,如果不包含那布局要改名字为“主窗口布局”会好点,如果包含进去可能自由度会差一点

@5kyfkr 是的包含进去会和现有功能耦合。

5kyfkr commented 7 months ago

@5kyfkr 是的包含进去会和现有功能耦合。

我觉得不耦合自由度会高一点,我那个issues就是暗含现有耦合的路线 1.不耦合路线:实现多窗口(主窗口以外的窗口)保存,然后实现能保存多窗口组的分类,然后在布局外多一个多窗口组的打开的位置。 2.耦合路线:实现多窗口(主窗口以外的窗口)保存,与布局一同保存

@88250 D大看看,能搞就搞路线1,上限高挺多,也能盘活现在多窗口的功能

5kyfkr commented 7 months ago

还有个问题,不耦合窗口组如果要批量关闭怎么办,只能一个个点了有点小麻烦,和布局耦合就可以直接切换成默认布局再关,会快很多

UFDXD commented 7 months ago

@5kyfkr 我觉得你没有理解新窗口的页签和内部分屏的功能,你可以将更多列如读书有关的文档PDF全部丢到一个窗口,以页签形式存在,以分屏形式存在。这样你打开读书笔记新窗口,完全不需要更多的新窗口。如果你觉得一个窗口负担太重你可以创建第二个。但这种情况应该不会太多,因为人同时只能专注一件事情。所以你即使打开了多个读书笔记新窗口,那不会太多,手点关闭不会麻烦。

UFDXD commented 7 months ago

还有个问题,不耦合窗口组如果要批量关闭怎么办,只能一个个点了有点小麻烦,和布局耦合就可以直接切换成默认布局再关,会快很多

不会涉及“组”的概念,因为新窗口可以任意布局,一个窗口就可以是一个组

5kyfkr commented 7 months ago

@5kyfkr 我觉得你没有理解新窗口的页签和内部分屏的功能,你可以将更多列如读书有关的文档PDF全部丢到一个窗口,以页签形式存在,以分屏形式存在。这样你打开读书笔记新窗口,完全不需要更多的新窗口。如果你觉得一个窗口负担太总你可以创建第二个。但这种情况应该不会太多,因为人同时只能专注一件事情。所以你即使打开了多个读书笔记新窗口,那不会太多,手点关闭不会麻烦。

也可以,像浏览器分屏也是一个个关,我只是设想到可能会不小心打开了多个窗口布局,然后前面的窗口布局没关,就会叠加上去,担心造成混乱,想想应该不至于,关掉就好了,还是不耦合自由点。 其实是这样一个问题,保存的窗口能不能同时打开多个,还是每次像布局一样只能打开一个

UFDXD commented 7 months ago

其实是这样一个问题,保存的窗口组能不能同时打开多个,还是每次像布局一样只能打开一个

在思源中新窗口可以有很多个

5kyfkr commented 7 months ago

其实是这样一个问题,保存的窗口组能不能同时打开多个,还是每次像布局一样只能打开一个

在思源中新窗口可以有很多个

比如读书笔记里有三四个窗口一组,再打开一组写作的三四个窗口,两者同时显示出来还是替换掉

UFDXD commented 7 months ago

同时存在

UFDXD commented 7 months ago

我打开了很多新窗口,仔细看它们都是同一个文档。 image 不会有谁替换谁,也不会有那个窗口替换那个窗口

5kyfkr commented 7 months ago

同时存在

了解,多窗口的布局也要有刚做出来的视图更新功能,这样变动了也好更新,但是要怎么区分更新视图的时候要更新哪些窗口,如果此时又打开了几个新窗口。如果和布局耦合就没这个问题,一起保存了

UFDXD commented 7 months ago

@5kyfkr 你说的应该是数据库。对于数据库我没有多用。只能尝试理解你的问题

在思源中一切基于块。一个块变动另一个同样ID的块也会变动,不管是在那个窗口

5kyfkr commented 7 months ago

@5kyfkr 你说的应该是数据库。对于数据库我没有多用。只能尝试理解你的问题

在思源中一切基于块。一个块变动另一个同样ID的块也会变动,不管是在那个窗口

https://github.com/siyuan-note/siyuan/issues/10783 指的是这个布局保存功能要不要在多窗口保存的时候也有,如果有要怎么确认哪些窗口要保存

UFDXD commented 7 months ago

不太理解,你说的多窗口保存,你想一键打开多个窗口?就是你说的“组”?

5kyfkr commented 7 months ago

不太理解,你说的多窗口保存,你想一键打开多个窗口?就是你说的“组”?

指保存更新阅读和编辑查看的位置,如果不耦合布局功能,那多窗口阅读的位置如何保存,应该也要有个布局保存才行吧

UFDXD commented 7 months ago

或许我没有深入的使用到,可以描绘一下或说的更具体吗?因为我不太清楚这个和新窗口内布局保存有没有关系。

5kyfkr commented 7 months ago

或许我没有深入的使用到,可以描绘一下或说的更具体吗?因为我不太清楚这个和新窗口内布局保存有没有关系。

现在布局功能会保存pdf看到的页数位置和笔记编辑的位置,今天第一章看完保存了布局,明天看了第二章就需要再保存更新一下对应的pdf页面位置和笔记视图布局

UFDXD commented 7 months ago

@5kyfkr 这个有些偏离主题了,因为这一切得建立在这个issue被开发者实现后,想要功能更加完善后才可以有。那时或许可以是一个新的issue?相信新窗口布局保存功能实现后受到欢迎那时候会有人提的。

不过我相信若是在主窗口可以记录阅读位置的话,在新窗口实现也不太困难。思源的代码很优秀

5kyfkr commented 7 months ago

@5kyfkr 这个有些偏离主题了,因为这一切得建立在这个issue被开发者实现后,想要功能更加完善后才可以有。那时或许可以是一个新的issue?相信新窗口布局保存功能实现后受到欢迎那时候会有人提的。

不过我相信这不太困难。

个人觉得如果耦合就没有这个问题,如果不耦合有时候相当于要保存两遍,主界面更新一遍,多窗口更新一遍,当然也能做个一键保存啥的,就怕复杂化了,看D大了,我都行

UFDXD commented 7 months ago

一个新窗口如果担任更多重任的话开辟了思源一条新的可能性的话,我觉得多一些缓存数据是必然的,因为记录新窗口布局这些本身就是临时数据。所以不需要窗口的配置项的时候连这些临时数据一起删除就好。

UFDXD commented 7 months ago

现在布局功能会保存pdf看到的页数位置和笔记编辑的位置,今天第一章看完保存了布局,明天看了第二章就需要再保存更新一下对应的pdf页面位置和笔记视图布局

@5kyfkr 你进行了文字更新,说的更明白了,我明白了你的意思,但这是一个小问题。由这个问题引发我想到了另一个问题,如在已经记录布局的一个新窗口内进行分屏或页签改动需要重新更新布局的问题。这种情况下手动更新布局是麻烦的。我觉得这时候新窗口布局应该在改动页签增加页签或分屏时自动更新布局数据,这样一来新窗口布局保存就更接近我说的工作区概念了,应该叫子工作区。这样主窗口的布局名称还是布局不变,在布局下选项面添加子工作区或“工作区”选项。 image

5kyfkr commented 7 months ago

@5kyfkr 你进行了文字更新,说的更明白了,我明白了你的意思,但这是一个小问题。由这个问题引发我想到了另一个问题,如在已经记录布局的一个新窗口内进行分屏或页签改动需要重新更新布局的问题。这种情况下手动更新布局是麻烦的。我觉得这时候新窗口布局应该在改动页签增加页签或分屏时自动更新布局数据,这样一来新窗口布局保存就更接近我说的工作区概念了,应该叫子工作区。这样主窗口的布局名称还是布局不变,在布局下选项面添加子工作区或“工作区”选项。

应该是这样吧 image

UFDXD commented 7 months ago

@5kyfkr 你想的太麻烦了,令我困扰,一个工作区就一个窗口,窗口可以有页签和可以内分屏。在这个新窗口上提供一个按钮点击保存这个窗口工作区。 按钮在右边新建文档+这里 image

在主窗口左上角菜单列表布局下出现你保存的工作区配置项目。

image

下一次使用这个新窗口直接在这里点击配置项。

接下来如果在这个新窗口工作区有任意页签或分屏改动,和主窗口逻辑一样思源内部后端自动进行布局数据更新不需要自己更新干预(包括阅读记录)。这样一来,无论怎样下次打开的都是更新后的工作区。

5kyfkr commented 7 months ago

@5kyfkr 你想的太麻烦了,令我困扰,一个工作区就一个窗口,窗口可以有页签和可以内分屏。在这个新窗口上提供一个按钮点击保存这个窗口工作区。

我图里的意思和你的一样,工作区就是一个窗口,图里演示的是同时打开两个工作区窗口的情况(考虑功能所有可能的场景),保存可以自动保存也可以手动保存

UFDXD commented 7 months ago

@5kyfkr 抱歉,是我理解错了,可能是因为我思考太多。那么我们就没问题了。现在是呼叫开发者的时候了 @88250 ,无论他是否考虑支持这个新功能特性,不然的话我们讨论再多都是无用的。

88250 commented 7 months ago

@UFDXD 麻烦再梳理总结一下需求,最好能有界面示意图,谢谢。

UFDXD commented 7 months ago

@88250 嗯嗯

UFDXD commented 7 months ago

@88250

UI方面

新窗口界面

  1. 新按钮

    在新窗口界面钉住的左边或右边添加“新按钮”

    image

  2. 提示文字

    “创建保存工作区”

    image

  3. 按钮作用

    将这个新窗口布局的配置文件保存,如文档页签、分屏布局等。

主窗口界面

  1. 新的列表项

    用于保存的工作区再次打开的入口。

  2. 入口位置

    在“工作空间”或“布局”元素下。

image

  1. 入口列表

    样式参考布局,但是没有保存,只有删除,点击功能。

    文字是“工作区”

    image

实现逻辑方面

  1. 创建新工作区

    1. 点击新窗口的“创建保存工作区”按钮后,弹出工作区命名。
    2. 命名结束后,创建这个窗口的临时配置文件,配置文件就是类似主窗口的布局文件。主窗口出现可选列表项。

      image

  2. 删除工作区

    1. 删除可以在主窗口工作区列表中点击image删除,删除工作区同时删掉工作区临时配置文件
  3. 重命名工作区

    1. 方法1:在工作区(新窗口)修改,复用“创建保存工作区”按钮触发重命名事件
    2. 方法2:在主窗口工作区列表项修改,需要提交数据创建表单。
  4. 在工作区使用中自动保存修改布局

    1. 方法1:在工作区使用中有页签改动或分屏,触发保存一次窗口布局修改配置文件
    2. 方法2:在窗口关闭退出时触发保存一次窗口布局修改配置文件。坏处是若是异常退出无法触发保存,但这问题不大。

只是肤浅与表面,用于参考。如配置文件方面,不太懂结构,可能浏览位置数据需要和主窗口分开,或不分开也可以(共用一份)开发者可能需要自己考量一下。

88250 commented 7 months ago

我确认下,一个工作区 对应的是 一个新窗口 对吧?

5kyfkr commented 7 months ago

我确认下,一个工作区 对应的是 一个新窗口 对吧?

没错的,一个工作区就是一个窗口,如果是两个窗口就等于两个工作区了,因为不是一一对应就无法识别要保存和更新的范围了,类似edge浏览器里面打开一个工作区也是一个新窗口打开一组标签页 image

88250 commented 7 months ago

好的,明白了,感谢两位。

TCOTC commented 7 months ago

支持。希望能用多窗口分散多页签,让多页签编辑的时候更流畅

5kyfkr commented 6 months ago

https://ld246.com/article/1713460747947 需求+1

TCOTC commented 6 months ago

目前文档移动到新窗口后,保存布局不会保存新窗口,所以我有点需要这个功能了

5kyfkr commented 6 months ago

目前文档移动到新窗口后,保存布局不会保存新窗口,所以我有点需要这个功能了

是的,我一开始也是https://github.com/siyuan-note/siyuan/issues/10807 这个issue合并过来的

5kyfkr commented 1 month ago

文档树状态能固定了,窗口管理就差这个了,在这里已经合并了六七个issue了,说是刚需应该不过分,可以极大提升多窗口分屏对比的便利性,盼D大V姐早日开整。