设置undo-tree-visualizer-diff后, 使用一次undo tree再退出就失效了

文字缩进 4 格
(use-package undo-tree
  :ensure t
        :diminish ""
        :config
        (global-undo-tree-mode)
        (setq undo-tree-visualizer-diff t))

这个diff window只能使用一次,C-x u进入undo tree,显示diff window,按q退出,再按C-x u,就没有diff window了。

这是为什么

bug, try this work around

这是个 issue,这样能解决

(defun undo-tree-visualizer-show-diff (&optional node)
    ;; show visualizer diff display
    (setq-local undo-tree-visualizer-diff t)
    (let ((buff (with-current-buffer undo-tree-visualizer-parent-buffer
                  (undo-tree-diff node)))
          (display-buffer-mark-dedicated 'soft)
          win)
      (setq win (split-window))
      (set-window-buffer win buff)
      (shrink-window-if-larger-than-buffer win)))

(defun undo-tree-visualizer-hide-diff ()
  ;; hide visualizer diff display
  (setq-local undo-tree-visualizer-diff nil)
  (let ((win (get-buffer-window undo-tree-diff-buffer-name)))
    (when win (with-selected-window win (kill-buffer-and-window)))))

或者更简单的方案:

  (make-variable-buffer-local 'undo-tree-visualizer-diff)
  (setq-default undo-tree-visualizer-diff t)

谢两位,已解决。简单方案很好用。

这个 bug 在目前最新的 undo-tree 应该已经修复了,不需要 Hack了。

目前在新版的 undo-tree 中,已经比较好用了。用下来唯一有问题的是,在Windows 系统下,新的 undo-tree-auto-save-history 开启时,如果打开的文件是 symlink 到 iCloud 下的文件,保存 xxx.~undo-tree~ 文件时会提示移动文件,选择“Yes”的话会造成文件丢失。

确实不需要这个hack了。谢谢!