diff --git a/yasnippet.el b/yasnippet.el index f670a29..f06a306 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -2412,7 +2412,9 @@ 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." @@ -2483,6 +2485,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 +2552,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,12 +2575,13 @@ 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. Loading is performed by `yas-load-snippet-buffer'. If the -snippet is new, ask the user whether (and where) to save it. If +snippet is new, ask then user whether (and where) to save it. If the snippet already has a file, just save it. The prefix argument KILL is passed to `quit-window'. @@ -2584,31 +2589,13 @@ 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))))))) + (save-buffer))) (quit-window kill))) (defun yas-tryout-snippet (&optional debug)