diff --git a/modules/feature/snippets/autoload/snippets.el b/modules/feature/snippets/autoload/snippets.el index c232ec0d7..5ec7a9fd2 100644 --- a/modules/feature/snippets/autoload/snippets.el +++ b/modules/feature/snippets/autoload/snippets.el @@ -9,7 +9,8 @@ "Go to the beginning of the current field." (interactive) (let* ((snippet (car (yas-active-snippets))) - (position (yas--field-start (yas--snippet-active-field snippet)))) + (active-field (yas--snippet-active-field snippet)) + (position (if (yas--field-p active-field) (yas--field-start active-field) -1))) (if (= (point) position) (move-beginning-of-line 1) (goto-char position)))) @@ -19,7 +20,8 @@ "Go to the end of the current field." (interactive) (let* ((snippet (car (yas-active-snippets))) - (position (yas--field-end (yas--snippet-active-field snippet)))) + (active-field (yas--snippet-active-field snippet)) + (position (if (yas--field-p active-field) (yas--field-end active-field) -1))) (if (= (point) position) (move-end-of-line 1) (goto-char position)))) @@ -28,11 +30,12 @@ (defun +snippets/delete-backward-char (&optional field) "Prevents Yas from interfering with backspace deletion." (interactive) - (let ((field (or field (and yas--active-field-overlay + (let ((field (or field (and (overlayp yas--active-field-overlay) (overlay-buffer yas--active-field-overlay) (overlay-get yas--active-field-overlay 'yas--field))))) - (cond ((eq (point) (marker-position (yas--field-start field))) nil) - (t (call-interactively #'delete-backward-char))))) + (unless (and (yas--field-p field) + (eq (point) (marker-position (yas--field-start field)))) + (call-interactively #'delete-backward-char)))) ;;;###autoload (defun +snippets/delete-forward-char-or-field (&optional field) @@ -42,21 +45,24 @@ buggy behavior when is pressed in an empty field." (let ((field (or field (and yas--active-field-overlay (overlay-buffer yas--active-field-overlay) (overlay-get yas--active-field-overlay 'yas--field))))) - (cond ((and field - (not (yas--field-modified-p field)) + (cond ((not (yas--field-p field)) + (delete-char 1)) + ((and (not (yas--field-modified-p field)) (eq (point) (marker-position (yas--field-start field)))) (yas--skip-and-clear field) (yas-next-field 1)) ((eq (point) (marker-position (yas--field-end field))) nil) - (t (delete-char 1))))) + ((delete-char 1))))) ;;;###autoload (defun +snippets/delete-to-start-of-field (&optional field) "Delete to start-of-field." (interactive) - (let* ((field (or field (and yas--active-field-overlay - (overlay-buffer yas--active-field-overlay) - (overlay-get yas--active-field-overlay 'yas--field)))) - (sof (marker-position (yas--field-start field)))) - (when (and field (> (point) sof)) - (delete-region sof (point))))) + (unless field + (setq field (and (overlayp yas--active-field-overlay) + (overlay-buffer yas--active-field-overlay) + (overlay-get yas--active-field-overlay 'yas--field)))) + (when (yas--field-p field) + (let ((sof (marker-position (yas--field-start field)))) + (when (and field (> (point) sof)) + (delete-region sof (point))))))