Closes #404: merge remote-tracking branch 'npostavs/widen'

This commit is contained in:
Joao Tavora 2013-10-31 13:03:42 +01:00
commit 6ee3d2e0b6

View File

@ -837,7 +837,8 @@ Honour `yas-dont-activate', which see."
(when (third ent) (when (third ent)
(define-key map (third ent) (second ent))) (define-key map (third ent) (second ent)))
(vector (first ent) (second ent) t)) (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"))))) ("Try out this snippet" yas-tryout-snippet "\C-c\C-t")))))
map) map)
"The keymap used when `snippet-mode' is active.") "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'. TABLE is a symbol naming a passed to `yas--table-get-create'.
When called interactively, prompt for the table name and When called interactively, prompt for the table name."
whether (and where) to save the snippet, then quit the window."
(interactive (list (yas--read-table) t)) (interactive (list (yas--read-table) t))
(cond (cond
;; We have `yas--editing-template', this buffer's content comes from a ;; 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) (set (make-local-variable 'yas--editing-template)
(yas--define-snippets-1 (yas--parse-template buffer-file-name) (yas--define-snippets-1 (yas--parse-template buffer-file-name)
table))))) 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)))))
(when (and interactive (defun yas-load-snippet-buffer-and-close (table &optional kill)
(or "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.
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 ;; Only offer to save this if it looks like a library or new
;; snippet (loaded from elisp, from a dir in `yas-snippet-dirs' ;; snippet (loaded from elisp, from a dir in `yas-snippet-dirs'
;; which is not the first, or from an unwritable file) ;; 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) (read-from-minibuffer (format "File name to create in %s? " chosen)
default-file-name))) default-file-name)))
(setf (yas--template-file yas--editing-template) buffer-file-name))))) (setf (yas--template-file yas--editing-template) buffer-file-name)))))
(when interactive (when buffer-file-name
(yas--message 3 "Snippet \"%s\" loaded for %s." (save-buffer)
(yas--template-name yas--editing-template) (quit-window kill)))
(yas--table-name (yas--template-table yas--editing-template)))
(quit-window interactive)))
(defun yas-tryout-snippet (&optional debug) (defun yas-tryout-snippet (&optional debug)
"Test current buffer's snippet template in other buffer." "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) (yas--calculate-adjacencies snippet)
;; Delete $-constructs ;; Delete $-constructs
;; ;;
(yas--delete-regions yas--dollar-regions) (save-restriction (widen) (yas--delete-regions yas--dollar-regions))
;; restore backquoted expression values ;; restore backquoted expression values
;; ;;
(yas--restore-backquotes) (yas--restore-backquotes)
@ -4394,33 +4408,6 @@ and return the directory. Return nil if not found."
(setq file nil)))) (setq file nil))))
root)))) 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 ;;; Backward compatibility to yasnippet <= 0.7