mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-13 13:13:03 +00:00
bugfix: Emacs get confused when a field content is deleted.
This commit is contained in:
parent
1b45a9d545
commit
88bb0d5fd4
39
yasnippet.el
39
yasnippet.el
@ -206,7 +206,6 @@ You can customize the key through `yas/trigger-key'."
|
|||||||
(defstruct (yas/snippet (:constructor yas/make-snippet ()))
|
(defstruct (yas/snippet (:constructor yas/make-snippet ()))
|
||||||
"A snippet."
|
"A snippet."
|
||||||
(groups nil)
|
(groups nil)
|
||||||
(tabstops nil) ; tabstops are those groups whose init value is empty
|
|
||||||
(exit-marker nil)
|
(exit-marker nil)
|
||||||
(id (yas/snippet-next-id) :read-only t)
|
(id (yas/snippet-next-id) :read-only t)
|
||||||
(overlay nil))
|
(overlay nil))
|
||||||
@ -429,16 +428,18 @@ event manually."
|
|||||||
(let ((snippet (yas/snippet-of-current-keymap))
|
(let ((snippet (yas/snippet-of-current-keymap))
|
||||||
(done nil))
|
(done nil))
|
||||||
(if snippet
|
(if snippet
|
||||||
(do* ((tabstops (yas/snippet-tabstops snippet) (cdr tabstops))
|
(do* ((groups (yas/snippet-groups snippet) (cdr groups))
|
||||||
(tabstop (car tabstops) (car tabstops)))
|
(group (car groups) (car groups)))
|
||||||
((or (null tabstops)
|
((or (null groups)
|
||||||
done))
|
done))
|
||||||
(setq field-overlay (yas/field-overlay
|
(setq field-overlay (yas/field-overlay
|
||||||
(yas/group-primary-field tabstop)))
|
(yas/group-primary-field group)))
|
||||||
(when (= beg
|
(when (and (= (overlay-start field-overlay)
|
||||||
(overlay-start field-overlay))
|
(overlay-end field-overlay))
|
||||||
|
(= beg
|
||||||
|
(overlay-start field-overlay)))
|
||||||
(move-overlay field-overlay beg end)
|
(move-overlay field-overlay beg end)
|
||||||
(yas/synchronize-fields tabstop)
|
(yas/synchronize-fields group)
|
||||||
(setq done t)))))))))
|
(setq done t)))))))))
|
||||||
|
|
||||||
(defun yas/undo-expand-snippet (start end key snippet)
|
(defun yas/undo-expand-snippet (start end key snippet)
|
||||||
@ -558,8 +559,6 @@ will be deleted before inserting template."
|
|||||||
;; Step 8: Replace fields with default values
|
;; Step 8: Replace fields with default values
|
||||||
(dolist (group (yas/snippet-groups snippet))
|
(dolist (group (yas/snippet-groups snippet))
|
||||||
(let ((value (yas/group-value group)))
|
(let ((value (yas/group-value group)))
|
||||||
(when (string= "" value)
|
|
||||||
(push group (yas/snippet-tabstops snippet)))
|
|
||||||
(dolist (field (yas/group-fields group))
|
(dolist (field (yas/group-fields group))
|
||||||
(let* ((overlay (yas/field-overlay field))
|
(let* ((overlay (yas/field-overlay field))
|
||||||
(start (overlay-start overlay))
|
(start (overlay-start overlay))
|
||||||
@ -994,9 +993,9 @@ the menu if `yas/use-menu' is `t'."
|
|||||||
(let ((snippet (yas/snippet-of-current-keymap))
|
(let ((snippet (yas/snippet-of-current-keymap))
|
||||||
(done nil))
|
(done nil))
|
||||||
(if snippet
|
(if snippet
|
||||||
(do* ((tabstops (yas/snippet-tabstops snippet) (cdr tabstops))
|
(do* ((groups (yas/snippet-groups snippet) (cdr groups))
|
||||||
(tabstop (car tabstops) (car tabstops)))
|
(group (car groups) (car groups)))
|
||||||
((or (null tabstops)
|
((or (null groups)
|
||||||
done)
|
done)
|
||||||
(unless done
|
(unless done
|
||||||
(let* ((overlay (yas/snippet-overlay snippet))
|
(let* ((overlay (yas/snippet-overlay snippet))
|
||||||
@ -1010,9 +1009,9 @@ the menu if `yas/use-menu' is `t'."
|
|||||||
(when (= (point)
|
(when (= (point)
|
||||||
(overlay-start
|
(overlay-start
|
||||||
(yas/field-overlay
|
(yas/field-overlay
|
||||||
(yas/group-primary-field tabstop))))
|
(yas/group-primary-field group))))
|
||||||
(setq done t)
|
(setq done t)
|
||||||
(yas/navigate-group tabstop t))))))))
|
(yas/navigate-group group t))))))))
|
||||||
|
|
||||||
(defun yas/prev-field-group ()
|
(defun yas/prev-field-group ()
|
||||||
"Navigate to prev field group. If there's none, exit the snippet."
|
"Navigate to prev field group. If there's none, exit the snippet."
|
||||||
@ -1023,17 +1022,17 @@ the menu if `yas/use-menu' is `t'."
|
|||||||
(let ((snippet (yas/snippet-of-current-keymap))
|
(let ((snippet (yas/snippet-of-current-keymap))
|
||||||
(done nil))
|
(done nil))
|
||||||
(if snippet
|
(if snippet
|
||||||
(do* ((tabstops (yas/snippet-tabstops snippet) (cdr tabstops))
|
(do* ((groups (yas/snippet-groups snippet) (cdr groups))
|
||||||
(tabstop (car tabstops) (car tabstops)))
|
(group (car groups) (car groups)))
|
||||||
((or (null tabstops)
|
((or (null groups)
|
||||||
done)
|
done)
|
||||||
(unless done (message "Not in a snippet field.")))
|
(unless done (message "Not in a snippet field.")))
|
||||||
(when (= (point)
|
(when (= (point)
|
||||||
(overlay-start
|
(overlay-start
|
||||||
(yas/field-overlay
|
(yas/field-overlay
|
||||||
(yas/group-primary-field tabstop))))
|
(yas/group-primary-field group))))
|
||||||
(setq done t)
|
(setq done t)
|
||||||
(yas/navigate-group tabstop nil)))
|
(yas/navigate-group group nil)))
|
||||||
(message "Not in a snippet field."))))))
|
(message "Not in a snippet field."))))))
|
||||||
|
|
||||||
(defun yas/exit-snippet (snippet)
|
(defun yas/exit-snippet (snippet)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user