X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/e9406f51266f9b9179f475886fa4ec78f1ccba44..bbfa1f0c9a60358a98c4ca690bea4a14c29adce4:/yasnippet.el diff --git a/yasnippet.el b/yasnippet.el index 4f8bc7630..0f3e290ef 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -386,6 +386,11 @@ the trigger key itself." :type '(repeat function) :group 'yasnippet) +(defcustom yas-backport-obsolete-alias t + "If non-nil backport function and variables from old version of yasnippet." + :type 'boolean + :group 'yasnippet) + ;; Only two faces, and one of them shouldn't even be used... ;; (defface yas-field-highlight-face @@ -776,7 +781,7 @@ Key bindings: ;; The indicator for the mode line. " yas" :group 'yasnippet - (cond (yas-minor-mode + (cond ((and yas-minor-mode (featurep 'yasnippet)) ;; Install the direct keymaps in `emulation-mode-map-alists' ;; (we use `add-hook' even though it's not technically a hook, ;; but it works). Then define variables named after modes to @@ -884,7 +889,9 @@ Honour `yas-dont-activate-functions', which see." (defvar yas--font-lock-keywords (append '(("^#.*$" . font-lock-comment-face)) (with-temp-buffer - (ignore-errors (emacs-lisp-mode)) + (let ((prog-mode-hook nil) + (emacs-lisp-mode-hook nil)) + (ignore-errors (emacs-lisp-mode))) (font-lock-set-defaults) (if (eq t (car-safe font-lock-keywords)) ;; They're "compiled", so extract the source. @@ -2542,10 +2549,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 naming a passed to `yas--table-get-create'. - -When called interactively, prompt for the table name." +TABLE is a symbol name passed to `yas--table-get-create'. 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 @@ -2570,11 +2575,10 @@ When called interactively, prompt for the table name." (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. + "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 +the snippet already has a file, just save it. The prefix argument KILL is passed to `quit-window'. @@ -2969,7 +2973,6 @@ If there is a transform but it returns nil, return the empty string iff EMPTY-ON-NIL-P is true." (let* ((yas-text (yas--field-text-for-display field)) (yas-modified-p (yas--field-modified-p field)) - (yas-moving-away-p nil) (transform (if (yas--mirror-p field-or-mirror) (yas--mirror-transform field-or-mirror) (yas--field-transform field-or-mirror))) @@ -3098,13 +3101,11 @@ If there's none, exit the snippet." (let* ((snippet (car (yas--snippets-at-point))) (active-field (overlay-get yas--active-field-overlay 'yas--field)) (target-field (yas--find-next-field arg snippet active-field))) - ;; First check if we're moving out of a field with a transform. - (when (and active-field (yas--field-transform active-field)) - (let* ((yas-moving-away-p t) - (yas-text (yas--field-text-for-display active-field)) - (yas-modified-p (yas--field-modified-p active-field))) - ;; primary field transform: exit call to field-transform - (yas--eval-lisp (yas--field-transform active-field)))) + ;; Apply transform to active field. + (when active-field + (let ((yas-moving-away-p t)) + (when (yas--field-update-display active-field) + (yas--update-mirrors snippet)))) ;; Now actually move... (if target-field (yas--move-to-field snippet target-field) @@ -3572,14 +3573,21 @@ considered when expanding the snippet." ;; them mostly to make the undo information ;; (setq yas--start-column (current-column)) - (let ((yas--inhibit-overlay-hooks t)) + (let ((yas--inhibit-overlay-hooks t) + ;; Avoid major-mode's syntax propertizing function, + ;; since we mess with the syntax-table and also + ;; insert things that are not valid in the + ;; major-mode language syntax anyway. + (syntax-propertize-function nil)) (setq snippet (if expand-env (eval `(let* ,expand-env (insert content) (yas--snippet-create start (point)))) (insert content) - (yas--snippet-create start (point)))))) + (yas--snippet-create start (point))))) + ;; Invalidate any syntax-propertizing done while `syntax-propertize-function' was nil + (syntax-ppss-flush-cache start)) ;; stacked-expansion: This checks for stacked expansion, save the ;; `yas--previous-active-field' and advance its boundary. @@ -4595,14 +4603,15 @@ and return the directory. Return nil if not found." They are mapped to \"yas/*\" variants.") -(dolist (sym yas--backported-syms) - (let ((backported (intern (replace-regexp-in-string "\\`yas-" "yas/" (symbol-name sym))))) - (when (boundp sym) - (make-obsolete-variable backported sym "yasnippet 0.8") - (defvaralias backported sym)) - (when (fboundp sym) - (make-obsolete backported sym "yasnippet 0.8") - (defalias backported sym)))) +(when yas-backport-obsolete-alias + (dolist (sym yas--backported-syms) + (let ((backported (intern (replace-regexp-in-string "\\`yas-" "yas/" (symbol-name sym))))) + (when (boundp sym) + (make-obsolete-variable backported sym "yasnippet 0.8") + (defvaralias backported sym)) + (when (fboundp sym) + (make-obsolete backported sym "yasnippet 0.8") + (defalias backported sym))))) (defvar yas--exported-syms (let (exported)