From 0d79e6988ec371279fc1c23733c7371bd21927ee Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sat, 14 May 2016 07:18:38 -0400 Subject: [PATCH] Extra measures to prevent premature yas-minor-mode The user's hooks may try to enable yas-minor-mode before yasnippet.el has finished loading. In [1], we catch and ignore the errors arising from this, but it's better if we can avoid hitting the error in the first place. This means we have 3 separate measures to avoid the problem, but since this bug can leave Emacs unusable due to a failing post-command-hook, a bit of redundant safety is not a bad thing. * yasnippet.el (yas-minor-mode): Only turn on if yasnippet is fully loaded. (yas--font-lock-keywords): Disable user hooks. [1]: "Avoid potential problems with user's hooks" 4c6064ce1aff07fe4481b5e2d987c8a7f044c207 --- yasnippet.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/yasnippet.el b/yasnippet.el index 4514f1be3..aa28c1eb8 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -776,7 +776,7 @@ Key bindings: ;; The indicator for the mode line. " yas" :group 'yasnippet - (cond (yas-minor-mode + (cond ((and yas-minor-mode (featurep 'yasnippet)) ;; Install the direct keymaps in `emulation-mode-map-alists' ;; (we use `add-hook' even though it's not technically a hook, ;; but it works). Then define variables named after modes to @@ -884,7 +884,9 @@ Honour `yas-dont-activate-functions', which see." (defvar yas--font-lock-keywords (append '(("^#.*$" . font-lock-comment-face)) (with-temp-buffer - (ignore-errors (emacs-lisp-mode)) + (let ((prog-mode-hook nil) + (emacs-lisp-mode-hook nil)) + (ignore-errors (emacs-lisp-mode))) (font-lock-set-defaults) (if (eq t (car-safe font-lock-keywords)) ;; They're "compiled", so extract the source. -- 2.39.2