diff --git a/modules/lang/org/autoload/org.el b/modules/lang/org/autoload/org.el index 511f908fe..f4b892053 100644 --- a/modules/lang/org/autoload/org.el +++ b/modules/lang/org/autoload/org.el @@ -374,18 +374,26 @@ Made for `org-tab-first-hook' in evil-mode." "Tries to expand a yasnippet snippet, if one is available. Made for `org-tab-first-hook'." (when (bound-and-true-p yas-minor-mode) - (cond ((and (or (not (bound-and-true-p evil-local-mode)) - (evil-insert-state-p)) - (yas--templates-for-key-at-point)) - (call-interactively #'yas-expand) - t) - ((use-region-p) - ;; Triggering mode-specific indentation is expensive in src blocks - ;; (if `org-src-tab-acts-natively' is non-nil), and can cause errors, - ;; so we avoid smart indentation in this case. - (let ((yas-indent-line 'fixed)) - (call-interactively #'yas-insert-snippet)) - t)))) + (let ((major-mode (if (org-in-src-block-p t) + (org-src-get-lang-mode (org-eldoc-get-src-lang)) + major-mode)) + (org-src-tab-acts-natively nil) ; causes breakages + ;; Smart indentation doesn't work with yasnippet, and painfully slow + ;; in the few cases where it does. + (yas-indent-line 'fixed)) + ;; HACK Yasnippet field overlays break org-bullet-mode. Don't ask me why. + (add-hook! 'yas-after-exit-snippet-hook :local + (when (bound-and-true-p org-bullets-mode) + (org-bullets-mode -1) + (org-bullets-mode +1))) + (cond ((and (or (not (bound-and-true-p evil-local-mode)) + (evil-insert-state-p)) + (yas--templates-for-key-at-point)) + (yas-expand) + t) + ((use-region-p) + (yas-insert-snippet) + t))))) ;;;###autoload (defun +org-cycle-only-current-subtree-h (&optional arg) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 5ac1e8de1..6acdecca4 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -184,7 +184,7 @@ background (and foreground) match the current theme." (defun +org-init-babel-h () (setq org-src-preserve-indentation t ; use native major-mode indentation - org-src-tab-acts-natively t + org-src-tab-acts-natively t ; we do this ourselves ;; You don't need my permission (just be careful, mkay?) org-confirm-babel-evaluate nil org-link-elisp-confirm-function nil @@ -581,8 +581,8 @@ between the two." org-insert-heading-respect-content t) (add-hook! 'org-tab-first-hook - #'+org-indent-maybe-h - #'+org-yas-expand-maybe-h) + #'+org-yas-expand-maybe-h + #'+org-indent-maybe-h) (add-hook 'doom-delete-backward-functions #'+org-delete-backward-char-and-realign-table-maybe-h)