diff --git a/modules/feature/snippets/autoload/snippets.el b/modules/feature/snippets/autoload/snippets.el index 5ec7a9fd2..a7a144a5c 100644 --- a/modules/feature/snippets/autoload/snippets.el +++ b/modules/feature/snippets/autoload/snippets.el @@ -66,3 +66,15 @@ buggy behavior when is pressed in an empty field." (let ((sof (marker-position (yas--field-start field)))) (when (and field (> (point) sof)) (delete-region sof (point)))))) + + +;; +;; Hooks +;; + +(defun +snippets|enable-project-modes (mode &rest _) + "Automatically enable snippet libraries for project minor modes defined with +`def-project-mode!'." + (if (symbol-value mode) + (yas-activate-extra-mode mode) + (yas-deactivate-extra-mode mode))) diff --git a/modules/feature/snippets/config.el b/modules/feature/snippets/config.el index 9a3e6dcfe..80276db41 100644 --- a/modules/feature/snippets/config.el +++ b/modules/feature/snippets/config.el @@ -11,13 +11,6 @@ (def-package! yasnippet :commands (yas-minor-mode-on yas-expand yas-expand-snippet yas-lookup-snippet yas-insert-snippet yas-new-snippet yas-visit-snippet-file) - :preface - (defvar yas-minor-mode-map - (let ((map (make-sparse-keymap))) - (when (featurep! :feature evil) - (define-key map [remap yas-insert-snippet] #'+snippets/expand-on-region)) - map)) - :init ;; Ensure `yas-reload-all' is called as late as possible. Other modules could ;; have additional configuration for yasnippet. For example, file-templates. @@ -31,23 +24,18 @@ yas-also-auto-indent-first-line t yas-prompt-functions (delq #'yas-dropdown-prompt yas-prompt-functions) yas-triggers-in-field t) ; Allow nested snippets - (add-to-list 'yas-snippet-dirs '+snippets-dir nil #'eq) - - (defun +snippets|enable-project-modes (mode &rest _) - "Automatically enable snippet libraries for project minor modes defined with -`def-project-mode!'." - (if (symbol-value mode) - (yas-activate-extra-mode mode) - (yas-deactivate-extra-mode mode))) + ;; Register `def-project-mode!' modes with yasnippet. This enables project + ;; specific snippet libraries (e.g. for Laravel, React or Jekyll projects). (add-hook 'doom-project-hook #'+snippets|enable-project-modes) - ;; Exit snippets on ESC from normal mode (add-hook 'doom-escape-hook #'yas-abort-snippet) - + ;; Fix an error caused by smartparens interfering with yasnippet bindings (after! smartparens - ;; fix an error caused by smartparens interfering with yasnippet bindings - (advice-add #'yas-expand :before #'sp-remove-active-pair-overlay))) + (advice-add #'yas-expand :before #'sp-remove-active-pair-overlay)) + ;; Better `yas-insert-snippet' for evil users + (when (featurep! :feature evil) + (define-key yas-minor-mode-map [remap yas-insert-snippet] #'+snippets/expand-on-region))) ;; `auto-yasnippet'