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

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

[elpa] master ffd497d 022/177: don't kill snippet buffer unless saved


From: João Távora
Subject: [elpa] master ffd497d 022/177: don't kill snippet buffer unless saved
Date: Sat, 28 Mar 2015 15:40:33 +0000

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

    don't kill snippet buffer unless saved
    
    Split the quit-window part of yas-load-snippet-buffer into
    yas-load-snippet-buffer-and-close, and only quit if the snippet was
    saved.
    
    This resolves #417, where you could lose a snippet by giving the wrong
    answer in a prompt.
---
 yasnippet.el |   72 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/yasnippet.el b/yasnippet.el
index 64b0434..5d0d90a 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -837,7 +837,8 @@ Honour `yas-dont-activate', which see."
                         (when (third ent)
                           (define-key map (third ent) (second ent)))
                         (vector (first ent) (second ent) t))
-                    '(("Load this snippet" yas-load-snippet-buffer "\C-c\C-c")
+                    '(("Load this snippet" yas-load-snippet-buffer "\C-c\C-l")
+                      ("Load and quit window" 
yas-load-snippet-buffer-and-close "\C-c\C-c")
                       ("Try out this snippet" yas-tryout-snippet 
"\C-c\C-t")))))
     map)
   "The keymap used when `snippet-mode' is active.")
@@ -2527,7 +2528,9 @@ neither do the elements of PARENTS."
 TABLE is a symbol naming a passed to `yas--table-get-create'.
 
 When called interactively, prompt for the table name and
-whether (and where) to save the snippet, then quit the window."
+whether (and where) to save the snippet.
+
+Returns the name of the file saved (if any)."
   (interactive (list (yas--read-table) t))
   (cond
    ;;  We have `yas--editing-template', this buffer's content comes from a
@@ -2547,35 +2550,42 @@ whether (and where) to save the snippet, then quit the 
window."
            (yas--define-snippets-1 (yas--parse-template buffer-file-name)
                                   table)))))
 
-  (when (and interactive
-             (or
-              ;; Only offer to save this if it looks like a library or new
-              ;; snippet (loaded from elisp, from a dir in `yas-snippet-dirs'
-              ;; which is not the first, or from an unwritable file)
-              ;;
-              (not (yas--template-file yas--editing-template))
-              (not (file-writable-p (yas--template-file 
yas--editing-template)))
-              (and (listp yas-snippet-dirs)
-                   (second yas-snippet-dirs)
-                   (not (string-match (expand-file-name (first 
yas-snippet-dirs))
-                                      (yas--template-file 
yas--editing-template)))))
-             (y-or-n-p (yas--format "Looks like a library or new snippet. Save 
to new file? ")))
-    (let* ((option (first (yas--guess-snippet-directories (yas--template-table 
yas--editing-template))))
-           (chosen (and option
-                        (yas--make-directory-maybe option))))
-      (when chosen
-        (let ((default-file-name (or (and (yas--template-file 
yas--editing-template)
-                                          (file-name-nondirectory 
(yas--template-file yas--editing-template)))
-                                     (yas--template-name 
yas--editing-template))))
-          (write-file (concat chosen "/"
-                              (read-from-minibuffer (format "File name to 
create in %s? " chosen)
-                                                    default-file-name)))
-          (setf (yas--template-file yas--editing-template) 
buffer-file-name)))))
-  (when interactive
-    (yas--message 3 "Snippet \"%s\" loaded for %s."
-                  (yas--template-name yas--editing-template)
-                  (yas--table-name (yas--template-table 
yas--editing-template)))
-    (quit-window interactive)))
+  (prog1
+      (when (and interactive
+                 (or
+                  ;; Only offer to save this if it looks like a library or new
+                  ;; snippet (loaded from elisp, from a dir in 
`yas-snippet-dirs'
+                  ;; which is not the first, or from an unwritable file)
+                  ;;
+                  (not (yas--template-file yas--editing-template))
+                  (not (file-writable-p (yas--template-file 
yas--editing-template)))
+                  (and (listp yas-snippet-dirs)
+                       (second yas-snippet-dirs)
+                       (not (string-match (expand-file-name (first 
yas-snippet-dirs))
+                                          (yas--template-file 
yas--editing-template)))))
+                 (y-or-n-p (yas--format "Looks like a library or new snippet. 
Save to new file? ")))
+        (let* ((option (first (yas--guess-snippet-directories 
(yas--template-table yas--editing-template))))
+               (chosen (and option
+                            (yas--make-directory-maybe option))))
+          (when chosen
+            (let ((default-file-name (or (and (yas--template-file 
yas--editing-template)
+                                              (file-name-nondirectory 
(yas--template-file yas--editing-template)))
+                                         (yas--template-name 
yas--editing-template))))
+              (write-file (concat chosen "/"
+                                  (read-from-minibuffer (format "File name to 
create in %s? " chosen)
+                                                        default-file-name)))
+              (setf (yas--template-file yas--editing-template) 
buffer-file-name)))))
+    (when interactive
+      (yas--message 3 "Snippet \"%s\" loaded for %s."
+                    (yas--template-name yas--editing-template)
+                    (yas--table-name (yas--template-table 
yas--editing-template))))))
+
+(defun yas-load-snippet-buffer-and-close (table &optional kill interactive)
+  "Call `yas-load-snippet-buffer' and then `quit-window', prefix
+  argument KILL passed to `quit-window'."
+  (interactive (list (yas--read-table) current-prefix-arg t))
+  (and (yas-load-snippet-buffer table interactive)
+       (quit-window kill)))
 
 (defun yas-tryout-snippet (&optional debug)
   "Test current buffer's snippet template in other buffer."



reply via email to

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