-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
统一块剪切粘贴逻辑为生成新块 #6807
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
那我这么保留移动呢? |
别跟我说拖动,拖动大文档卡爆,而且平板便携设备,怎么拖? |
|
移动就是直接插在末尾,如果我需要插入到容器怎么办? |
生成新 ID,不处理已有引用。 |
那我要剪切何用?我剪切一个块,这个块绑定了很多的引用连接,我一剪切,所有的联系都没了。剪切本来就是高频操作,现在高频操作前都要“三思一下“是否存在风险了。 |
基本是这样的,我粗略看了其他几个双链笔记产品都是如此,想了下似乎也没有更好的处理方案,如果你有建议欢迎讨论。 |
我看了一下问题帖子,似乎快捷键剪切和右键,没有什么问题,不知道为什么会说逻辑缺陷? |
剪切粘贴保留块 ID 有逻辑缺陷,会导致 ID 重复。 |
呃……难道拖动操作的逻辑不是过程中多了一个定位然后剪切过去吗?,基本逻辑共通的吧?,如果不共通,那将拖动的逻辑改一下,模拟剪切不行吗?, |
然后第一次剪切保留ID,重复粘贴生成新块 |
不行的,因为还要考虑撤销操作,比如第一次粘贴使用了原 ID,那么在剪切处撤销以后还是会导致 ID 重复。 |
撤销操作难道是“先恢复”然后再“去除粘贴”吗?此时会出现两个同样ID块,这样的确是会重复。 |
哎……总之引用关系很重要,如果因剪切就丢掉引用,这会让人崩溃的。 |
撤销操作是还原之前的操作,ID 记录下以后就不会变了。 引用关系确实重要,但是似乎主流产品中也没有解决这个问题,也许是我看漏了,如果有方案麻烦告诉我,谢谢。 |
如果找不到办法,这个问题请暂时搁置,因为目前还是可以用的。因为目前已经重度用思源了,不想因为这个放弃了,不想回到txt、word文档管理时代了。 |
这是个较为严重的逻辑问题,我们不能搁置,得尽快解决才行,不然会导致潜在的 ID 重复数据。 |
剪切是比较高频的操作,频繁提示恐怕不妥。这个是否是必要的我们后面收集反馈后再看,谢谢。 |
如果实现了跨页面撤销,是否能够恢复剪切的这个功能? |
@zxhd863943427 实现了跨文档撤销也不能解决这个逻辑问题的。 |
@88250 这个的逻辑问题不是需要确保 id 唯一,但是剪切粘贴时如果保留 ID,在原文档进行撤销操作后出现重复的 ID 吗? 如果能实现跨页面撤销,那么在原文档撤销后,应该能删除被剪切粘贴到另一个文档的 ID,同时在文档的原位置恢复 ID,这样 ID 不是依然唯一吗? 我并没有用过这个功能,但我认为它确实有价值,想理解它出现严重逻辑问题的原因。 因为就我自己测试,只有粘贴出去的第一个块会携带原 ID,再次粘贴会生成新的 ID,所以冲突应该只会出现在原位置和第一个粘贴的位置上。 |
@zxhd863943427 即使实现了跨文档撤销也不能彻底解决这个问题,因为存在多个客户端实例的情况,比如浏览器端和桌面端同时使用一个内核伺服的情况下,浏览器端和桌面端同时剪切一个块然后粘贴,不生成新 ID 的话就重复了。所以粘贴生成新 ID 是更稳妥的做法。 |
|
@apiggg 优先解决稳定性相关问题,易用性后面再考虑。 |
这一点不得不承认是存在的,那么从稳定性考虑确实应该先去掉剪切的这个功能。 不过很多人之所以对这个功能留恋无非就是这个是目前最通用、便捷的块转移方案,之后有没有提升块转移体验的计划? |
改进计划目前没有时间考虑,欢迎大家帮忙讨论,集思广益。 |
D大看看这个方案可不可行: 拖拽的问题在于,容易一不小心拖成一个超级块, 如果用一个不用按住鼠标控制的过程来实现拖拽,操作起来就能方便得多(群里大家一起想的) 由于是直接用的拖拽的逻辑,所以不会有重复id的问题,也不需要重做太多逻辑 |
@1995hanjian 我没太看明白这个和 Ctrl+X/Ctrl+V 的区别,一样需要写入剪切板的吧? |
嗯,可能需要跟D大请教一下拖拽是怎么实现的, 如果是这样,我希望 |
忽然想到了一个可行的逻辑,但是需要对于思源的菜单和识别粘贴内容进行改造,加上一个“移动块”和识别类似于(move <id>)之类的标记
这样子是否可行? |
我也来贡献一个方案: |
@Zuoqiu-Yingyi 这个可能可行,后续考虑下细节。 |
估计得支持跨文档撤销 #4866 后再考虑改进剪切粘贴保留 ID,否则目前已知的方案在撤销操作时还是会导致 ID 重复的。 |
其实类似Word处理黏贴的机制就挺好的,黏贴时给用户选择是黏贴为纯文本,还是黏贴为带格式的原文本。思源可否给一个选择,黏贴为新id块,还是新的id的块。 |
@wuyigui323 加入这样的选项的话解决不了上面提到的 ID 重复问题,反而更容易重复哦。 |
这个方案确实可能是目前最优解,也解答了我对于密码管理软件 keeppass 的一个功能的好奇: 我之前一直好奇是如何做到的,现在看来应该也是有一个类似内核的在调度:双击密码的时候其实并没有复制到系统的剪切板(我win+V键看了一下系统剪切板,没有发现对应内容),而是keeppass在后台等待着,如果在这12秒内进行Ctrl+V粘贴,可以把密码粘贴到输入框中,但是超过这个12秒之后,再Ctrl+V粘贴,什么内容也没有(即使双击密码之前复制过其它文本内容,此时Ctrl+V也是没有任何内容的),整个过程中win+V查看剪切板,没有丝毫受到keeppass的影响,这样做避免了密码泄露(比如其它可以读取剪切板内容的软件),对于这个机制,不知道思源有什么可以借鉴的没? 我有一个简单的方法:
Ctrl+X、Ctrl+V 是一个很频繁的使用场景。看过一些大佬讲解记笔记的理论,我对“无压”记笔记的理解是,把自己的所有想法都记下下来,不用考虑逻辑,先记下来再说(尽量按照大的专题),然后再进行逻辑整理(可以是当下,也可以是日后),这样的话,笔记软件就可以充当“硬盘+部分内存”的功能,人脑有更多的精力担任CPU的功能,在整理过程中Ctrl+X、Ctrl+V 会被高频使用。 我最初看中思源笔记的很大原因是双链功能,而 siyuan:// 使得这种双链功能不仅仅困在思源笔记内部,在整个电脑系统都可以调用,可以和其他软件联用,这就达到了“1+1>2”的目的。 目前为了防止已经被双链的块改变ID,可以考虑 使用 “复制该块为引用块”然后粘贴,“转换为-定义块及其子块” 这个流程,但是这个流程会让思源“转圈”、还需要把多余的双链删除,这样的话,整理笔记过程就很不丝滑了。 |
思源笔记版本 v2.5.5,dark+主题进行测试
|
I'd like to urge the maintainers to re-open this issue. I believe the solution is a basic validation that should be applied any time content is inserted into a note, whether by pasting or otherwise: simply disallow insertion of duplicate IDs. In other words, any time text will be inserted into a note, check first to see if any of the IDs in the payload are already present. If so, generate new IDs to overwrite the would-be duplicates prior to the insertion. By assigning new IDs as needed, the possibility of duplicates is completely avoided. This way, users can freely cut, copy, paste, and undo, keeping all references intact, without any concerns. 我想敦促维护者重新打开这个问题。 我相信解决方案是一个基本的验证,无论是通过粘贴还是其他方式,都应该在任何时候应用内容插入笔记:简单地不允许插入重复的Id。 换句话说,任何时候文本将被插入到注释中,首先检查以查看有效负载中的任何Id是否已经存在。 如果是这样,请生成新Id以复盖插入之前的重复项。 通过根据需要分配新的Id,完全避免了重复的可能性。 这样,用户可以自由地剪切,复制,粘贴和撤消,保持所有引用完整,没有任何顾虑。 |
剪切粘贴保留块 ID 有逻辑缺陷,会导致 ID 重复。改进为粘贴时生成新 ID,避免 ID 重复。
The text was updated successfully, but these errors were encountered: