From c1fa37245ff70c39911d79a57c70ac32946e6868 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 30 Aug 2018 22:39:03 +0200 Subject: [PATCH] Fix dtrt-indent errors in broken smie modes Some smie modes throw errors when trying to guess their indentation, like `nim-mode'. This prevents them from leaving Emacs in a broken state. --- core/core-editor.el | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/core/core-editor.el b/core/core-editor.el index bd7d60702..f1a98ace7 100644 --- a/core/core-editor.el +++ b/core/core-editor.el @@ -216,7 +216,22 @@ savehist file." #'doom|detect-indentation) :config (setq dtrt-indent-verbosity (if doom-debug-mode 2 0)) - (add-to-list 'dtrt-indent-hook-generic-mapping-list '(t tab-width))) + (add-to-list 'dtrt-indent-hook-generic-mapping-list '(t tab-width)) + + (defun doom*fix-broken-smie-modes (orig-fn arg) + "Some smie modes throw errors when trying to guess their indentation, like +`nim-mode'. This prevents them from leaving Emacs in a broken state." + (let ((dtrt-indent-run-after-smie dtrt-indent-run-after-smie)) + (cl-letf* ((old-smie-config-guess (symbol-function 'smie-config-guess)) + ((symbol-function 'smie-config-guess) + (lambda () + (condition-case e (funcall old-smie-config-guess) + (error (setq dtrt-indent-run-after-smie t) + (message "[WARNING] Indent detection: %s" + (error-message-string e)) + (message "")))))) ; warn silently + (funcall orig-fn arg)))) + (advice-add #'dtrt-indent-mode :around #'doom*fix-broken-smie-modes)) ;; Branching undo (def-package! undo-tree