branch: master commit 6ee3d2e0b6c0e16e432c78d6dacb1da8e65f16c0 Merge: 43a484e d7b2b89 Author: Joao Tavora <joaotav...@gmail.com> Commit: Joao Tavora <joaotav...@gmail.com>
Closes #404: merge remote-tracking branch 'npostavs/widen' --- yasnippet.el | 63 +++++++++++++++++++++++----------------------------------- 1 files changed, 25 insertions(+), 38 deletions(-) diff --git a/yasnippet.el b/yasnippet.el index 91aabd9..c7aecfa 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.") @@ -2526,8 +2527,7 @@ 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." +When called interactively, prompt for the table name." (interactive (list (yas--read-table) t)) (cond ;; We have `yas--editing-template', this buffer's content comes from a @@ -2546,9 +2546,25 @@ whether (and where) to save the snippet, then quit the window." (set (make-local-variable 'yas--editing-template) (yas--define-snippets-1 (yas--parse-template buffer-file-name) table))))) + (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) + "Load the snippet with `yas-load-snippet-buffer', possibly + save, then `quit-window' if saved. + +If the snippet is new, ask the user whether (and where) to save +it. If the snippet already has a file, just save it. - (when (and interactive - (or +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) + (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) @@ -2571,11 +2587,9 @@ whether (and where) to save the snippet, then quit the window." (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))) + (when buffer-file-name + (save-buffer) + (quit-window kill))) (defun yas-tryout-snippet (&optional debug) "Test current buffer's snippet template in other buffer." @@ -3805,7 +3819,7 @@ Meant to be called in a narrowed buffer, does various passes" (yas--calculate-adjacencies snippet) ;; Delete $-constructs ;; - (yas--delete-regions yas--dollar-regions) + (save-restriction (widen) (yas--delete-regions yas--dollar-regions)) ;; restore backquoted expression values ;; (yas--restore-backquotes) @@ -4394,33 +4408,6 @@ and return the directory. Return nil if not found." (setq file nil)))) root)))) -;; `c-neutralize-syntax-in-CPP` sometimes fires "End of Buffer" error -;; (when it execute forward-char) and interrupt the after change -;; hook. Thus prevent the insert-behind hook of yasnippet to be -;; invoked. Here's a way to reproduce it: - -;; # open a *new* Emacs. -;; # load yasnippet. -;; # open a *new* .cpp file. -;; # input "inc" and press TAB to expand the snippet. -;; # select the `#include <...>` snippet. -;; # type inside `<>` - -(defadvice c-neutralize-syntax-in-CPP - (around yas--mp/c-neutralize-syntax-in-CPP activate) - "Adviced `c-neutralize-syntax-in-CPP' to properly -handle the `end-of-buffer' error fired in it by calling -`forward-char' at the end of buffer." - (condition-case err - ad-do-it - (error (message (error-message-string err))))) - -;; disable c-electric-* serial command in YAS fields -(add-hook 'c-mode-common-hook - '(lambda () - (dolist (k '(":" ">" ";" "<" "{" "}")) - (define-key (symbol-value (make-local-variable 'yas-keymap)) - k 'self-insert-command)))) ;;; Backward compatibility to yasnippet <= 0.7