From 555897a4ade4009b94f1e996f62ecfb531fa7aa8 Mon Sep 17 00:00:00 2001 From: capitaomorte Date: Sat, 11 Jul 2009 00:59:27 +0000 Subject: [PATCH] * corrected another problem when evaling user elisp with errors --- yasnippet.el | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/yasnippet.el b/yasnippet.el index 1ae2449..e9cbf3f 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -114,11 +114,11 @@ return the error string instead.") (t (:background "tomato"))) "The face used for debugging") -(defvar yas/window-system-popup-function #'yas/dropdown-list-popup-for-template +(defvar yas/window-system-popup-function #'yas/x-popup-menu-for-template "When there's multiple candidate for a snippet key. This function is called to let user select one of them. `yas/text-popup-function' is used instead when not in a window system.") -(defvar yas/text-popup-function #'yas/dropdown-list-popup-for-template +(defvar yas/text-popup-function #'yas/x-popup-menu-for-template "When there's multiple candidate for a snippet key. If not in a window system, this function is called to let user select one of them. `yas/window-system-popup-function' is used instead when in @@ -1325,11 +1325,18 @@ will be deleted before inserting template." ;; at the end of this function. ;; (save-restriction - (let ((buffer-undo-list t) - (template-start end)) - (narrow-to-region template-start template-start) - (insert template) - (setq snippet (yas/snippet-create (point-min) (point-max))))) + (narrow-to-region end end) + (condition-case err + (let ((buffer-undo-list t)) + ;; snippet creation might evaluate users elisp, which + ;; might generate errors, so we have to be ready to catch + ;; them mostly to make the undo information + ;; + (insert template) + (setq snippet (yas/snippet-create (point-min) (point-max)))) + (error + (push (cons (point-min) (point-max)) buffer-undo-list) + (error (error-message-string err))))) ;; Delete the trigger key, this *does* get undo-recorded. ;; (delete-region start end)