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

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

[elpa] master 0ee86a2 23/40: Simplify `yas-new-snippet' load&save logic


From: Noam Postavsky
Subject: [elpa] master 0ee86a2 23/40: Simplify `yas-new-snippet' load&save logic
Date: Wed, 26 Oct 2016 23:06:33 +0000 (UTC)

branch: master
commit 0ee86a2d1efcc8c4ab70f7485b01705eb6c36d0b
Author: João Távora <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Simplify `yas-new-snippet' load&save logic
    
    Two significant changes:
    
    1. The criteria for offering to save in upon
       `yas-load-snippet-buffer-and-close' is much simplified, and relies
       on `buffer-modified-p' solely.
    
    2. C-x C-s snippet after `yas-new-snippet' or `yas-visit-snippet'
       suggests at least a sensible directory.
    
    Still missing in this commit is the suggestion for loading upon
    saving. The `after-save-hook' could be used for something like that.
    
    * yasnippet.el (yas-new-snippet): Set `default-directory' based on
    result of `yas--guess-snippet-directories'.
    (yas-load-snippet-buffer): Return template object.
    (yas-load-snippet-buffer-and-close): Simplify.
    (yas--visit-snippet-file-1): Also set `default-directory' here.
    (yas--guess-snippet-directories-1): Return directory names, i.e., ending
    in slash.
---
 yasnippet.el |   56 +++++++++++++++++++++++---------------------------------
 1 file changed, 23 insertions(+), 33 deletions(-)

diff --git a/yasnippet.el b/yasnippet.el
index 669521f..33a635b 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -2408,15 +2408,15 @@ visited file in `snippet-mode'."
                          (pp-to-string (yas--template-content template))
                        (yas--template-content template))))
            (snippet-mode)
-           (set (make-local-variable 'yas--editing-template) template)))))
+           (set (make-local-variable 'yas--editing-template) template)
+           (set (make-local-variable 'default-directory)
+                (car (cdr (car (yas--guess-snippet-directories 
(yas--template-table template))))))))))
 
 (defun yas--guess-snippet-directories-1 (table)
   "Guess possible snippet subdirectories for TABLE."
-  (cons (yas--table-name table)
-        (mapcan #'(lambda (parent)
-                    (yas--guess-snippet-directories-1
-                     parent))
-                (yas--table-parents table))))
+  (cons (file-name-as-directory (yas--table-name table))
+        (cl-mapcan #'yas--guess-snippet-directories-1
+                   (yas--table-parents table))))
 
 (defun yas--guess-snippet-directories (&optional table)
   "Try to guess suitable directories based on the current active
@@ -2483,6 +2483,7 @@ NO-TEMPLATE is non-nil."
     (set (make-local-variable 'yas--guessed-modes) (mapcar #'(lambda (d)
                                                               (yas--table-mode 
(car d)))
                                                           guessed-directories))
+    (set (make-local-variable 'default-directory) (car (cdr (car 
guessed-directories))))
     (if (and (not no-template) yas-new-snippet-default)
         (yas-expand-snippet yas-new-snippet-default))))
 
@@ -2549,7 +2550,8 @@ neither do the elements of PARENTS."
 (defun yas-load-snippet-buffer (table &optional interactive)
   "Parse and load current buffer's snippet definition into TABLE.
 TABLE is a symbol name passed to `yas--table-get-create'.  When
-called interactively, prompt for the table name."
+called interactively, prompt for the table name.
+Return the `yas--template' object created"
   (interactive (list (yas--read-table) t))
   (cond
    ;;  We have `yas--editing-template', this buffer's content comes from a
@@ -2571,7 +2573,8 @@ called interactively, prompt for the table 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)))))
+                  (yas--table-name (yas--template-table 
yas--editing-template))))
+  yas--editing-template)
 
 (defun yas-load-snippet-buffer-and-close (table &optional kill)
   "Load and save the snippet, then `quit-window' if saved.
@@ -2584,31 +2587,18 @@ The prefix argument KILL is passed to `quit-window'.
 Don't use this from a Lisp program, call `yas-load-snippet-buffer'
 and `kill-buffer' instead."
   (interactive (list (yas--read-table) current-prefix-arg))
-  (yas-load-snippet-buffer table t)
-  (let ((file (yas--template-get-file yas--editing-template)))
-    (when (and (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 file)
-                (not (file-writable-p file))
-                (and (cdr-safe yas-snippet-dirs)
-                     (not (string-prefix-p (expand-file-name (car 
yas-snippet-dirs)) file))))
-               (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 file (file-name-nondirectory file))
-                                       (yas--template-name 
yas--editing-template))))
-            (write-file (expand-file-name
-                         (read-file-name (format "File name to create in %s? " 
chosen)
-                                         chosen default-file-name)
-                         chosen))
-            (setf (yas--template-load-file yas--editing-template) 
buffer-file-name))))))
-  (when buffer-file-name
-    (save-buffer)
+  (let ((template (yas-load-snippet-buffer table t)))
+    (when (and (buffer-modified-p)
+               (y-or-n-p
+                (format "[yas] Loaded for %s. Also save snippet buffer?"
+                        (yas--table-name (yas--template-table template)))))
+      (let ((default-directory (car (cdr (car (yas--guess-snippet-directories 
(yas--template-table template))))))
+            (default-file-name (yas--template-name template)))
+        (unless (or buffer-file-name (not default-file-name))
+          (setq buffer-file-name
+                (read-file-name "File to save snippet in: "
+                                nil nil nil default-file-name )))
+        (save-buffer)))
     (quit-window kill)))
 
 (defun yas-tryout-snippet (&optional debug)



reply via email to

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