本文不是介绍vc 及vc-dir 的用法的,我的想法就是,尝试用自带的包替换部分比较大的外部包, 这次心血来潮,想试着替换掉magit, 目前改造还在进行中,处于边试用边调整的阶段, 主要代码在这两个配置文件中:
目前我想实现的功能是:
- 将Unpushed/Unpulled 的commit 插入到vc-dir 中,且能对这些commit 进行diff/rebase/revert等操作
- 可以只提交部分hunk, (这是vc已经支持的功能) vc 也可以实现类似的功能,先产生一个diff-mode 的buffer ,然后通过编辑diff-mode 如通过M-k 删除一个hunk ,C-cC-s 分隔一个hunk 从而更精细的只提交某一部分hunk 然后在这个diff-mode 中进行C-xvv 即可只提交diff-mode 中的变更
- 在 log-view-mode 中可以对commit 进行revert/reset/rebase/diff 等操作
- M-n/M-p 遍历当前文件的历史,其实可以用git-timemachine 来替代,但我还是用vc中的代码又实现了一 遍
- 在diff-mode 中 可以tab折叠hunk/file 等(diff=mode配合outline-minor-mode)就可实现
目前实现的效果如下图:
已经能将 Unpulled/Unpushed 的log 放进vc-dir 中了,且可以使用log-view-mode 中的keybinding 对这部分 commit 进行操作,如rebase/reset/revert/rebase -i/diff等,目前这些commit 还没染色,比较丑(还没找到办法怎么着色)
通过自来的which-key 也可以实现 magit 的 bb/ff/pp/ll 等keybinding, 唯一少的功能是无法动态调整一些开关但这恰好是我很少用的的