左侧文件树
- 关联当前页面 30218e5
- 操作菜单
- 冲突标记、解决、外部工具
- 路径复制
- tooltip 显示快捷键
在标题栏增加:全部展开全部折叠两个按钮。69fdba1
- 再将新建文件、文件夹、刷新三个功能移动到这里来。
- 新增显示空文件夹选项
- 梳理 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:在文件树中用键盘导航有的时候就会莫名其妙的丢失焦点,然后上下键就变成了滚动文件树。
比较文件
- 当选择的文件是两个时可用,调用 VS Code 进行文件比较。
- codex://threads/01a10032-4ed4-7f83-b57e-8ea782338b2f
- 文件整理与导航
- vscode merge 三方合并
文件树:删除、撤销都很慢,加入日志输出
- codex://threads/01a0f693-4220-7482-b442-0c8ca77dd897
- codex://threads/01a0f6c8-9e09-7100-af89-90cac8abaed1
- vscode-delete-file.md
vscode的基础上优化:vscode是直接跳过
- 加入了重试、取消、跳过
- 原路径已恢复时,把这条历史识别为已由外部撤销;原路径被其他内容占用或回收站项目被移走时,
批量删除非常的慢
- 多选删除,redo/undo 时一次性操作,不要一个一个操作 codex://threads/01a0f775-921b-7e00-b585-69c38779d10e
总结
和系统的回收系统结合起来,看样子不是一个很好的方案。最好的应该还是实现自己的回收系统。
- 因为windows自己的撤销包括:新建、复制、移动、重命名、删除,是一个整体
- 现在mynote的删除走系统,其他又自己维护
回收站的数量倒不用担心,很多,因为删除一个包含很多文件的文件夹回收站的数量只会增一。
TODO:
- 考虑删除不支持文件树内撤销?
- 没有进度提示
windows api 方案
当前 Electron 的 shell.trashItem() 只返回 Promise
- cbf150fe368557dd2cd849b3574350d86b22b625
- 因为要使用辅助的 exe 程序,不管是 C++ 还是 C# 到时部署都会有问题,故没有使用这个提交。
