diff --git a/config.org b/config.org index e8ccbe1..420e49a 100644 --- a/config.org +++ b/config.org @@ -522,12 +522,32 @@ Some basic C-coding settings (style, indentation offset, ...). * Undo-tree Undo with =C-/=. + +The reason for the hook: +I had a lot of issues with undo lagging (taking literally seconds to complete...). +undo-tree-undo calls undo-list-transfer-to-tree internally which does +a lot of garbage-collect calls to make sure the GC won't run (to counter race +conditions where the GC would corrupt the undo-tree or something). + +So, define a hook that sets the GC threshold to maximum, +does the undo (which should go fast now since the GC won't run) +and then restore the old GC threshold. + #+BEGIN_SRC emacs-lisp (use-package undo-tree :ensure t :config (global-undo-tree-mode) + (define-key undo-tree-map (kbd "C-/") 'undo-hook) ) + +(defun undo-hook (&optional arg) + (interactive) + (setq gc-cons-threshold most-positive-fixnum) + (undo-tree-undo arg) + (setq gc-cons-threshold 800000) +) + #+END_SRC * Volatile highlights