Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

左侧文件树

  • 关联当前页面 30218e5
  • 操作菜单
  • 冲突标记、解决、外部工具
  • 路径复制
  • tooltip 显示快捷键

在标题栏增加:全部展开全部折叠两个按钮。69fdba1

  • 再将新建文件、文件夹、刷新三个功能移动到这里来。
  • 新增显示空文件夹选项

时间过滤 & 差异 diff

  • 梳理 tree-controls 代码分布 codex://threads/01a12924-4934-7e53-b3f1-1c6b91f13270

文件树遍历

右键菜单加入向前、后遍历文件,在当前选择文件的基础上前后导航(时间过滤掉的不参与导航)

  • codex://threads/01a09fe9-9975-7922-9691-94e982418686
  • 遍历通过 preview 方式打开(如果 preview 启用的前提下)
  • 快捷键:alt + page up、down
  • 支持在最前、后一个文件时折返

支持拖拽移动文件,加 ctrl/cmd 则为复制

  • 可以拖到文件上,获取其parent作为目标文件夹
    • codex://threads/01a0a376-ed0c-7cf3-84db-852c226feb18
  • TODO: mac 下复制有问题

文件树 misc 优化

  • codex://threads/01a0e2ca-eae9-7c83-9686-4eaad548d7bd
  • 文件树:空文件夹在什么时候被过滤?选择了“显示空文件夹”,在有时间过滤时被过滤了

文件树 多选、混选

codex://threads/01a0e39e-66eb-78c2-9d45-7ffac518ad7a

  • 多选操作支持:拖动、剪切、复制、粘贴、删除等
  • 可以混选文件、文件夹
  • 隐藏的处理:文件夹内未显示的文件(包括非 Markdown 文件)也会移入回收站。这个改为二次确认。即一开始不显示,确认删除时如果发现有未显示的文件时再提示。
  • 移动有编辑的也不要提示

文件树:复制、剪切、粘贴等操作重写

  • codex://threads/01a0e306-cf30-7d33-80dc-6f74183082d2
  • 参考vscode
  • 复制:界面无任何变化,可以在任意文件或者文件夹节点点击粘贴。如果粘贴的是文件,则将此文件的 parent 作为 target
  • 剪切,现在的文案是移动,改为剪切。触发后所选择的项目变为半透明,表示处于待剪切状态。选择 target 粘贴之后移动文件(夹)恢复不透明状态。
  • Target 的算法同拖动可以复用。
  • rename 的处理优化:确认后已经打开的 tab 更新 title、path 等信息,而不是弹窗说文件已经被删除了。
    • 有修改也可以rename
  • 外部删除文件的逻辑参考 VSCode, 通过中划线表明文件已被外部删除。然后用户可以继续编辑或者保存,保存的话直接用原路径保存即可,不要弹出文件不存在的错误
    • 关闭时如果相对于最初加载的内容没有变化,则不提示保存,直接关闭
    • 剪贴板图片

支持 redo、undo

  • codex://threads/01a0e545-5787-7980-8bed-eb03fed84fee
  • vscode 是和编辑混合在一起的。
  • 参考 VS Code 的文件树行为:焦点在文件树时,撤销和重做文件操作;焦点在编辑器时,仍处理正文编辑。历史仅在当前窗口会话内有效,切换笔记库后清空。
  • vscode的删除应该是用的系统的删除和回收站,不用自己保存副本
  • 也必须支持撤销

文件树焦点问题

点击切换文件后(不管是普通还是preivew),焦点都要停了在文件树

  • codex://threads/01a0de04-79ab-78e0-82cd-f6acea52ce0b
  • mac:在文件树中用键盘导航有的时候就会莫名其妙的丢失焦点,然后上下键就变成了滚动文件树。

比较文件

文件树:删除、撤销都很慢,加入日志输出

  • codex://threads/01a0f693-4220-7482-b442-0c8ca77dd897
  • codex://threads/01a0f6c8-9e09-7100-af89-90cac8abaed1
  • vscode-delete-file.md

vscode的基础上优化:vscode是直接跳过

  • 加入了重试、取消、跳过
    • 原路径已恢复时,把这条历史识别为已由外部撤销;原路径被其他内容占用或回收站项目被移走时,

file-tree-test-cases.md

批量删除非常的慢

  • 多选删除,redo/undo 时一次性操作,不要一个一个操作 codex://threads/01a0f775-921b-7e00-b585-69c38779d10e

总结

和系统的回收系统结合起来,看样子不是一个很好的方案。最好的应该还是实现自己的回收系统。

  • 因为windows自己的撤销包括:新建、复制、移动、重命名、删除,是一个整体
  • 现在mynote的删除走系统,其他又自己维护

回收站的数量倒不用担心,很多,因为删除一个包含很多文件的文件夹回收站的数量只会增一。

TODO:

  • 考虑删除不支持文件树内撤销?
  • 没有进度提示

windows api 方案

当前 Electron 的 shell.trashItem() 只返回 Promise,拿不到本次删除的回收站项目。要使用你标注的 Windows 回调,需要接管 Windows 删除流程,实现 IFileOperation 和回调,并验证打包后的行为。现有文件 ID 匹配仍保留那段极窄的并发窗口。

  • cbf150fe368557dd2cd849b3574350d86b22b625
  • 因为要使用辅助的 exe 程序,不管是 C++ 还是 C# 到时部署都会有问题,故没有使用这个提交。

codes

misc

点赞(0) 阅读(14) 举报
目录
标题