emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master e731451 150/177: Signal an error on recursive yas--fallbac


From: João Távora
Subject: [elpa] master e731451 150/177: Signal an error on recursive yas--fallback calls
Date: Sat, 28 Mar 2015 15:41:34 +0000

branch: master
commit e7314516e372811d50ae11fcce66b2a28863cc2b
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Signal an error on recursive yas--fallback calls
    
    * yasnippet.el (yas--fallback): let-bind yas-fallback-behavior to
      'yas--fallback before actually doing the fallback. Signal an error if
      it's 'yas--fallback (indicating we're in an infinte loop).
---
 yasnippet.el |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/yasnippet.el b/yasnippet.el
index 65d8e7c..75f0ad4 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -2248,8 +2248,13 @@ Common gateway for `yas-expand-from-trigger-key' and
   (cond ((eq yas-fallback-behavior 'return-nil)
          ;; return nil
          nil)
+        ((eq yas-fallback-behavior 'yas--fallback)
+         (error (concat "yasnippet fallback loop!\n"
+                        "This can happen when you bind `yas-expand' "
+                        "outside of the `yas-minor-mode-map'.")))
         ((eq yas-fallback-behavior 'call-other-command)
-         (let* ((beyond-yasnippet (yas--keybinding-beyond-yasnippet)))
+         (let* ((yas-fallback-behavior 'yas--fallback)
+                (beyond-yasnippet (yas--keybinding-beyond-yasnippet)))
            (yas--message 4 "Falling back to %s"  beyond-yasnippet)
            (assert (or (null beyond-yasnippet) (commandp beyond-yasnippet)))
            (setq this-original-command beyond-yasnippet)
@@ -2258,12 +2263,13 @@ Common gateway for `yas-expand-from-trigger-key' and
         ((and (listp yas-fallback-behavior)
               (cdr yas-fallback-behavior)
               (eq 'apply (car yas-fallback-behavior)))
-         (if (cddr yas-fallback-behavior)
-             (apply (cadr yas-fallback-behavior)
-                    (cddr yas-fallback-behavior))
-           (when (commandp (cadr yas-fallback-behavior))
-             (setq this-command (cadr yas-fallback-behavior))
-             (call-interactively (cadr yas-fallback-behavior)))))
+         (let ((yas-fallback-behavior 'yas--fallback))
+           (if (cddr yas-fallback-behavior)
+               (apply (cadr yas-fallback-behavior)
+                      (cddr yas-fallback-behavior))
+             (when (commandp (cadr yas-fallback-behavior))
+               (setq this-command (cadr yas-fallback-behavior))
+               (call-interactively (cadr yas-fallback-behavior))))))
         (t
          ;; also return nil if all the other fallbacks have failed
          nil)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]