[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)
- [elpa] master ee6e7a9 09/40: Fix some compilation warnings, (continued)
- [elpa] master ee6e7a9 09/40: Fix some compilation warnings, Noam Postavsky, 2016/10/26
- [elpa] master 7661dc1 19/40: yasnippet.el (yas-escape-text): No error on nil text, Noam Postavsky, 2016/10/26
- [elpa] master 351c1e3 10/40: Don't indent first line of mirrors, Noam Postavsky, 2016/10/26
- [elpa] master 655bda8 07/40: Merge: restore backquote evaluation behaviour, Noam Postavsky, 2016/10/26
- [elpa] master 8907fd1 14/40: Escape yas-selected-text for new snippet., Noam Postavsky, 2016/10/26
- [elpa] master a4fafc3 16/40: Add test for loading snippet with same uuid, Noam Postavsky, 2016/10/26
- [elpa] master 8ca8c7d 13/40: Merge: a different fix for #712., Noam Postavsky, 2016/10/26
- [elpa] master 85a43ad 35/40: Explain about backquote expressions in doc, Noam Postavsky, 2016/10/26
- [elpa] master 3129040 24/40: Load snippet after saving, Noam Postavsky, 2016/10/26
- [elpa] master 1532e66 33/40: Fix saving of new snippets, Noam Postavsky, 2016/10/26
- [elpa] master 0ee86a2 23/40: Simplify `yas-new-snippet' load&save logic,
Noam Postavsky <=
- [elpa] master 00be21c 36/40: Change cl dep to cl-lib for tests too, Noam Postavsky, 2016/10/26
- [elpa] master 9c9952c 12/40: Add test for indentation of single line mirrors, Noam Postavsky, 2016/10/26
- [elpa] master 4296a86 15/40: yasnippet.el (yas--quote-string): Remove., Noam Postavsky, 2016/10/26
- [elpa] master d4da806 17/40: Fix removal of snippets by uuid, Noam Postavsky, 2016/10/26
- [elpa] master 42b0c26 18/40: Don't warn about modifications to other buffers, Noam Postavsky, 2016/10/26
- [elpa] master eaaec30 38/40: Replace all occurances of `capitaomorte', Noam Postavsky, 2016/10/26
- [elpa] master ff6f31e 37/40: Replace yas--with-temp-redefs with cl-letf, Noam Postavsky, 2016/10/26
- [elpa] master 244cdfa 26/40: Merge: Simplify `yas-new-snippet' load&save logic, Noam Postavsky, 2016/10/26
- [elpa] master 9500b00 21/40: Fix field navigation in the backwards direction, Noam Postavsky, 2016/10/26
- [elpa] master 309fe15 31/40: * Rakefile: Handle unset `warnings' parameter, Noam Postavsky, 2016/10/26