branch: externals/org-modern commit d36dc621d8b2981b7d29ca6a9bf60279f15dae1e Author: JD Smith <93749+jdtsm...@users.noreply.github.com> Commit: JD Smith <93749+jdtsm...@users.noreply.github.com>
Handle markup for block insertion correctly A block's begin and end are needed for the font locking to add the appropriate properties like org-block. Wrap the insert function do this after insertion is complete. --- org-modern-indent.el | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/org-modern-indent.el b/org-modern-indent.el index 609e0ad4b7..1d195f93d4 100644 --- a/org-modern-indent.el +++ b/org-modern-indent.el @@ -59,6 +59,7 @@ explicitly, or inherited." (defvar org-modern-indent-begin nil) (defvar org-modern-indent-guide nil) (defvar org-modern-indent-end nil) +(defvar-local org-modern--disabled nil) (defun org-modern-indent-set-line-properties (level indentation &optional heading) "An org-modern inspired redefinition of `org-indent-set-line-properties'. Used to approximate org-modern block style. Treats blocks @@ -77,9 +78,10 @@ guide unicode character." (change-beg (line-beginning-position)) (change-end (line-beginning-position 2)) (line-end (line-end-position))) - (unless (get-text-property (point) 'fontified) ;sometimes we beat font-lock - (font-lock-ensure change-beg line-end)) ;We rely on fonts to identify blocks + (unless (or org-modern--disabled (get-text-property (point) 'fontified)) + (font-lock-ensure change-beg line-end)) ;sometimes we beat font-lock (or (when-let (((eq heading nil)) + ((not org-modern--disabled)) (face (get-text-property (point) 'face))) (cond ;; Block begin: use begin prefix, use guide for following blank line + wrap @@ -103,6 +105,15 @@ guide unicode character." (org-modern-indent--add-props change-beg change-end line extra-pad))) (forward-line)) +(defun org-modern-indent-block-insert (fun &rest r) + (let* ((reg (use-region-p)) + (p (if reg (region-beginning) (point))) + (m (point-marker))) + (set-marker-insertion-type m t) + (if reg (set-marker m (region-end))) + (let ((org-modern--disabled t)) (apply fun r)) + (org-indent-refresh-maybe p m nil))) + (defvar org-modern-indent-set-line-properties--orig (symbol-function 'org-indent-set-line-properties) "Original `org-indent-set-line-properties' function.") @@ -119,15 +130,17 @@ guide unicode character." :group 'org-modern-indent (if org-modern-indent-mode (progn - (setq org-modern-indent-begin - (propertize "╭" 'face 'org-meta-line) - org-modern-indent-guide - (propertize "│" 'face 'org-meta-line) - org-modern-indent-end - (propertize "╰" 'face 'org-meta-line)) - (setq-local org-fontify-quote-and-verse-blocks t) - (setf (symbol-function 'org-indent-set-line-properties) - (symbol-function 'org-modern-indent-set-line-properties))) + (setq org-modern-indent-begin + (propertize "╭" 'face 'org-meta-line) + org-modern-indent-guide + (propertize "│" 'face 'org-meta-line) + org-modern-indent-end + (propertize "╰" 'face 'org-meta-line)) + (setq-local org-fontify-quote-and-verse-blocks t) + (setf (symbol-function 'org-indent-set-line-properties) + (symbol-function 'org-modern-indent-set-line-properties)) + (advice-add #'org-insert-structure-template :around #'org-modern-indent-block-insert)) + (advice-remove #'org-insert-structure-template #'org-modern-indent-block-insert) (setf (symbol-function 'org-indent-set-line-properties) org-modern-indent-set-line-properties--orig)) (org-indent-indent-buffer))