From 673996444fc155b536ab23204d33f3fd76d65325 Mon Sep 17 00:00:00 2001 From: laurensmiers Date: Wed, 20 May 2020 17:38:24 +0200 Subject: [PATCH] UNDO: Fix lag when doing C-/ (undo/undo-tree-undo) 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 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), then restore the old GC threshold --- config.org | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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