branch: externals/org-modern commit 48b44a3ea70d9cd54ec2165d8abd4353e756f03b Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
Revert back to 3cc432dc99f262579d1cc464e7d6d5b9fe77083a For now, JD continues to maintain org-modern-indent separately, but it can be merged again eventually if it becomes more ready. --- CHANGELOG.org | 33 +---- README.org | 114 +--------------- org-modern-indent.el | 375 --------------------------------------------------- org-modern.el | 18 +-- 4 files changed, 7 insertions(+), 533 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index f6da1618e0..59f4d9acf3 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -1,11 +1,9 @@ #+title: org-modern.el - Changelog -#+author: Daniel Mendler & J.D. Smith +#+author: Daniel Mendler #+language: en * Development -- Merged [[https://github.com/jdtsmith/org-modern-indent][org-modern-indent]] as a new extension: Provides code block bracket - styling when ~org-indent-mode~ is enabled. - Add ~org-modern-habit~ face to improve habit progress fontification. * Version 1.7 (2025-03-11) @@ -69,32 +67,3 @@ * Version 0.8 (2023-02-15) - Start of changelog. - -* org-modern-indent change history - -~org-modern-indent~ was incorporated as an extension to ~org-modern~ in v2.0. The prior change history for ~org-modern-indent~ is as follows, based on its release versions as a separate package: - -- **v0.6**: Merged as an ~org-modern~ extension. -- **v0.5.1**: Small simplifications for block drawing. -- **v0.5**: Another complete rewrite which substantially improves - performance and accuracy. Now block detection uses ~org-element~ - and the block styling is implemented in - ~before/after-change-functions~. Benefits include: - 1. Higher performance and more reliable fontification. - 2. Ability to detect and correctly treat _damaged_ blocks - (header/footer line altered or removed) as well as _merged_ blocks. - 2. Caches all prefix strings for lower memory usage/GC churn. - 3. No more "runaway" formatting when partial blocks are created: - only _real_ blocks (according to ~org-element~) are - - Note that v0.5 implements indented block styling using display - properties on the indentation text, so navigation will "skip over" - it. -- **v0.1**: features a complete re-write to use font-lock directly. This - has a few benefits: - 1. No longer relies on org-mode face names for recognizing - blocks, so ~org-src-block-faces~ can have arbitrary faces - applied, e.g. for different ~src~ languages, as in the screenshot. - 2. Eliminates the "race" between font-locking and applying the prefix text properties. - 3. Enables in-text bracket decorations for "bulk-indented" blocks, for example blocks situated - in an arbitrarily-nested plain list item. diff --git a/README.org b/README.org index 9337127867..edb185eaaf 100644 --- a/README.org +++ b/README.org @@ -93,123 +93,13 @@ screenshot above after the installation of =org-modern=. (global-org-modern-mode) #+end_src -An alternative setup, using ~use-package~ and modifying some of the display entities: - -#+begin_src emacs-lisp - (use-package org-modern - :custom - (org-modern-block-indent t) ; to enable org-modern-indent when org-indent is active - (org-modern-hide-stars nil) - (org-modern-todo-faces - '(("STARTED" :foreground "yellow") - ("CANCELED" org-special-keyword :inverse-video t :weight bold))) - (org-modern-list - '((?* . "•") - (?+ . "‣"))) - (org-modern-fold-stars - '(("▶" . "▼") - ("▷" . "▽") - ("▸" . "▾") - ("▹" . "▿"))) - (org-modern-checkbox - '((?X . "✔") - (?- . "┅") - (?\s . " "))) - (org-modern-label-border 1) - :hook - (org-mode . org-modern-mode) - (org-agenda-finalize . org-modern-agenda)) -#+end_src - - -* Block indentation - -Since version 2.0, this package also incorporates ~org-modern-indent~, which -provides block bracket styling when ~org-indent-mode~ is enabled, including -support for "bulk-indented" blocks nested within plain lists: - -[[https://github.com/minad/org-modern/blob/screenshots/indent.png?raw=true]] - -~org-modern-indent~ is disabled by ~org-modern~ by default. Configure -~org-modern-block-indent=t~ to enable. To activate ~org-indent-mode~ in all org -files, set ~org-startup-indented=t~. - -*Note*: Currently =org-modern-indent= requires zero ~line-spacing~, as it leads to -gaps in the vertical bars drawn to indicate blocks, but hopefully this can be -improved in the future. - -** Bulk-indented blocks (e.g. within plain lists): - -Bulk-indented blocks have "real" (space/tab) indentation applied and managed by -org. This extra indentation is applied by org on _top_ of the (fake, prefix-based) -indentation used by org-indent. To nest blocks properly within such indented -content, e.g. in plain list items, you only have to begin the ~#+begin~ at the -same level as the list element's text. - -As an important principle, ~org-modern-indent~ does not alter the contents of the -text in your org documents, not even indentation. It just styles what is there. -To help achieve proper block bulk-indented alignment, here are a few ways to -alter blocks indentation using org and other commands: - -- *Start things right*: Hit return after your last line of text (e.g in a list - item), then immediately hit =C-c C,= to create the desired block. It will be - indented at the right level: - - #+begin_src org - - This list item contains a: - - sublist, which holds a block: - [C-c C-,] here - #+end_src - -- *Move flush left*: Note: =M-{= will get you to the start of a block quickly. =M-\= - at block start will move the block's first header line to column 0. Then - =M-S-left= (or =right=) will indent the full block. -- *Indent rigidly*: =M-h= selects the entire block. Then =C-x TAB= enters "rigid - indent" mode, after which left/right moves the entire block. -- *Re-indent a block*: If you have a block that is partially aligned, perhaps with - a "hanging end", like so: - - #+begin_src org - - - List 1 - - List 2 - ,#+begin_src lang - foo_lang(x) - ,#+end_src - #+end_src - - you can simply use =M-S-left/right= at block start (or in fact anywhere on the - block header/footer) to ~org-indent-block~. Note that - ~org-src-preserve-indentation=nil~ is an important setting, to allow org to - (re-)indent blocks to respect the local indentation inside list and other - elements. Also note that (from ~org-indent-region~): - - #+begin_quote - The function will not indent contents of example blocks, verse blocks and - export blocks as leading white spaces are assumed to be significant there. - #+end_quote - -** Font spacing and faces - -The default ~fixed-pitch~ font (from which ~org-meta-line~ inherits) has line -spacing >1.0 on some systems. This will introduce gaps _even if your default font -is changed_, and ~line-space~ is nil. To correct it, add: - -#+begin_src emacs-lisp -(set-face-attribute 'fixed-pitch nil :family "Hack" :height 1.0) ; or whatever font family -#+end_src - -*** The bracket style - -If you'd like a different face than ~org-meta-line~ for the "bracket", configure -the ~org-modern-indent-bracket-line~ face. - * Incompatibilities +- =org-indent-mode= is not compatible with the block prettification in the fringe. + If =org-indent-mode= is enabled, =org-modern= will disable the block prettification. - =org-num-mode= interferes with the =org-modern= prettification of TODO keywords. - =visual-wrap-prefix-mode= relies on the =wrap-prefix= text property which is also used by =org-modern=. -- =org-modern-indent-mode= is incompatible with non-zero =line-spacing=. * Alternatives diff --git a/org-modern-indent.el b/org-modern-indent.el deleted file mode 100644 index 7a4c0d1d4a..0000000000 --- a/org-modern-indent.el +++ /dev/null @@ -1,375 +0,0 @@ -;;; org-modern-indent.el --- Style indented blocks -*- lexical-binding: t -*- - -;; Copyright (C) 2022-2025 Free Software Foundation, Inc. - -;; Author: J.D. Smith <jdtsmith+e...@gmail.com> -;; Maintainer: J.D. Smith <jdtsmith+e...@gmail.com> -;; Created: 2022 - -;; This file is part of GNU Emacs. - -;; This program is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: - -;; `org-modern-indent' is an `org-modern' extension which approximates -;; the block highlighting style of `org-modern'. If -;; `org-modern-block-indent' is non-nil, it is activated when -;; `org-indent' is is active in the buffer. `org-modern-indent' was -;; merged into `org-modern' as of v2.0. - -;;; Code: -(require 'compat) -(require 'org-indent) -(require 'org-element) -(eval-when-compile (require 'cl-lib)) - -;;;; Face and style -(defgroup org-modern-indent nil - "Org-modern style blocks which works with org-indent." - :group 'org - :prefix "org-modern-indent-") - -;; Face for org-modern-indent line -(defface omi/bracket-line - '((t (:inherit (org-meta-line) :weight light))) - "Face for bracket line in org-modern-indent." - :group 'faces) - -(defconst omi/begin "╭") -(defconst omi/guide "│") -(defconst omi/end "╰") - -(defvar omi/begin-re - "\\([ \t]*\\)\\(#\\+\\)\\(?:begin\\|BEGIN\\)_\\S-") - -;;;; Utility -(defsubst omi/-lbp (p &optional n) - "Return the line beginning position N at point P." - (save-excursion (goto-char p) (pos-bol n))) - -;;;; Block prefix cache -(defvar omi/-prefixes (make-hash-table :test #'equal) - "A hash table of cached line prefixes. -The hash index is a combination of the (unstyled) `org-indent' length -and the \"real\" (space) indentation at the block beginning. Each hash -value is a vector of length 3: - - [BEGIN GUIDE END] - -holding the wrap/indent prefix strings for the block begin, end, and -guide (body).") - -(defun omi/-prefix (org-indent extra-indent) - "Cache and return prefix strings based on the indent levels. -There are 2 types of indentation: ORG-INDENT (styled with `org-indent' -face), and EXTRA-INDENT (unstyled). See `org-modern-indent--prefix' for -the contents." - (unless (and (= org-indent 0) (= extra-indent 0)) - (let* ((key (+ org-indent (* 1000 extra-indent))) - (cached (gethash key omi/-prefixes))) - (or cached - (puthash key - (cl-loop for guide in (list omi/begin omi/guide omi/end) - for bg-face in '(org-block-begin-line org-block org-block-end-line) - for tstr = (propertize guide 'face `(omi/bracket-line ,bg-face)) - with olen = (if (> extra-indent 0) org-indent - (1- org-indent)) - with ostr = (and (> olen 0) - (propertize (make-string olen ?\s) - 'face '(org-indent default))) - with pstr = (and (> extra-indent 0) - (make-string (1- extra-indent) ?\s)) - collect (concat ostr pstr tstr)) - omi/-prefixes))))) - -;;;; Finding and operating on blocks -(defsubst omi/-block-p (el) - "Return non-nil if EL is an org block element." - (when-let ((el) (type (car el))) - (memq type - '(center-block comment-block dynamic-block - example-block export-block quote-block - special-block src-block verse-block)))) - -(defun omi/-block-at-point (&optional pos) - "Return the org block element at POS, if any. -Considers both the element at point, and its parent. Does not consider -affiliated content like title as part of the block." - (let ((pos (or pos (point)))) - (when-let ((element (org-element-at-point pos))) - (when (or (omi/-block-p element) - (omi/-block-p - (setq element (org-element-property :parent element)))) - (unless (< pos (org-element-property :post-affiliated element)) - element))))) - -(defsubst omi/-block-beg-end (node) - "Return a cons of NODE's (BEG . END). -BEG is at the beginning of the #+BEGIN line, and END is at the end of -the #+END line." - (let* ((bbeg (org-element-property :post-affiliated node)) ; on #+begin - (bend (save-excursion - (goto-char (org-element-property :end node)) - (skip-chars-backward "\n\t ") - (point)))) - (cons bbeg bend))) - -(defun omi/-walk-blocks (beg end fun) - "Walk all org blocks intersecting the region from BEG..END. -FUN is called on each block with the beginning and end positions of the -block (at the beginning and end of the lines containing the header and -footer, respectively). Note that the first block's beginning may lie -prior to BEG, and the last block's end my fall past END, if either only -partially overlaps the region." - (org-with-wide-buffer - (goto-char beg) - (let ((node (omi/-block-at-point)) finished) - (while (not finished) - (when node - (cl-destructuring-bind (bbeg . bend) (omi/-block-beg-end node) - (funcall fun bbeg bend) - (goto-char bend) - (when (>= bend end) (setq finished t)))) ; last block - (unless finished - (if (re-search-forward omi/begin-re end t) - (setq node (omi/-block-at-point)) - (setq finished t))))))) - -;;;; Drawing block brackets -(defun omi/-draw-block (beg end beg0 end0 org-indent real-indent) - "Insert brackets for block between BEG and END. -BEG0 and END0 represents the block's full range, corresponding to the -line beginning/end positions of the block's #+BEGIN/END header/footer -lines. The `org-indent' prefix length at block header is ORG-INDENT, -and REAL-INDENT is the amount of \"real\" (hard space) block -indentation. REAL-INDENT may be zero." - (with-silent-modifications - (pcase-let* (((seq beg-prefix guide-prefix end-prefix) - (omi/-prefix org-indent real-indent)) - ((seq beg-display guide-display end-display) - (and (> real-indent 0) (omi/-prefix real-indent 0))) - (beg-bol (omi/-lbp beg)) - (body-start (max (omi/-lbp beg0 2) beg-bol))) - (cl-macrolet ((add-prefixes (pbeg pend line-prefix wrap-prefix) - `(add-text-properties ,pbeg ,pend - `(,@(and (= real-indent 0) `(line-prefix ,,line-prefix)) - wrap-prefix ,,wrap-prefix))) - (add-guides (pbeg pend display-str) - `(add-text-properties ,pbeg ,pend - `( omi/display ,,display-str rear-nonsticky t)))) - (when (> body-start beg) ;; BEGIN - (add-prefixes beg-bol body-start beg-prefix guide-prefix) - (when (> real-indent 0) - (add-guides beg-bol (+ beg-bol real-indent) beg-display))) - (when (> end body-start) ;; GUIDE BODY - (let* ((end-bol (omi/-lbp end)) - (end0-bol (omi/-lbp end0)) - (after-end (omi/-lbp end 2)) - (body-final (if (= end-bol end0-bol) end-bol after-end))) - (add-prefixes body-start body-final guide-prefix guide-prefix) - (when (> real-indent 0) - (goto-char body-start) - (while (< (point) body-final) - (when (>= (current-indentation) real-indent) - (add-guides (point) (+ (point) real-indent) guide-display)) - (forward-line))) - (when (= end-bol end0-bol) ;; END - (if (= real-indent 0) - (add-prefixes end-bol after-end end-prefix end-prefix) - (goto-char end-bol) - (when (>= (current-indentation) real-indent) - (add-guides end-bol (+ end-bol real-indent) end-display)))))))))) - -;;;; org-indent interfacing -(defvar-local omi/-level-change-end nil) -(defun omi/-refresh-maybe-watch (fun beg end &rest r) - "Watch for org-indent heading refreshes and record the new end position. -FUN is the wrapped function `org-indent-refresh-maybe', and BEG, -END, and R are its arguments." - ;; sadly org-indent-refresh-maybe modifies beg/end but does not return - (let ((oiap-orig (symbol-function 'org-indent-add-properties))) - (cl-letf (((symbol-function 'org-indent-add-properties) - (lambda (b e &optional delay) - (setq omi/-level-change-end (and (> e end) e)) - (funcall oiap-orig b e delay)))) - (apply fun beg end r)))) - -(defun omi/-strip-display (beg end) - (with-silent-modifications - (remove-text-properties beg end '(omi/display nil)))) - -(defvar-local omi/-init nil) -(defun omi/-wait-and-refresh (buf) - "Wait for org-indent to finish initializing BUF, then refresh." - (if (or (not (bound-and-true-p org-indent-agentized-buffers)) - (not (memq buf org-indent-agentized-buffers))) - (omi/init buf) - ;; still waiting - (when (buffer-live-p buf) - (with-current-buffer buf - (if omi/-init - (let ((cnt (cl-incf (cadr omi/-init)))) - (if (> cnt 5) - (user-error - "org-modern-indent: Gave up waiting for %s to initialize" - buf) - (timer-activate - (timer-set-time (car omi/-init) - (time-add (current-time) 0.2))))) - (setq omi/-init - (list (run-at-time 0.1 nil #'omi/-wait-and-refresh buf) - 1))))))) - -(defun omi/-refresh () - "Strip custom display property and refresh line prefix in entire buffer." - (with-silent-modifications - (org-with-wide-buffer - (when org-indent-mode - (omi/-strip-display (point-min) (point-max)) - (org-indent-refresh-maybe (point-min) (point-max) nil))))) - -;;;; Before/after change -(defun omi/-intersects-leader-at (target beg end) - "Return non-nil if BEG..END intersects initial non-blank text at TARGET." - (save-excursion - (goto-char target) - (back-to-indentation) - (let ((beg-targ (point)) - (end-targ (progn (skip-chars-forward "^[:blank:]\n") (point)))) - (and (<= beg end-targ) (<= beg-targ end))))) - -(defun omi/-before-change (beg end) - "Check the BEG..END range for modified block header/footer lines. -Adds an `:org-modern-block-indent' text property to the block, with -value `damaged' for damaged block." - (cl-labels - ((detect-block-damage (bl-beg bl-end) - "Detect and mark damaged blocks." - (unless (and (<= beg bl-beg) (>= end bl-end)) ; entire block replaced/deleted - (with-silent-modifications - (if (or (omi/-intersects-leader-at bl-beg beg end) - (omi/-intersects-leader-at bl-end beg end)) - (progn - (put-text-property bl-beg (1+ bl-beg) :omi/indent nil) ; now unknown! - (put-text-property bl-beg (omi/-lbp bl-end 2) :omi/block 'damaged)) - (put-text-property bl-beg (omi/-lbp bl-end 2) :omi/block t)))))) - (omi/-walk-blocks beg end #'detect-block-damage))) - -(defun omi/-pos-in-leader-p (pos) - "Return non-nil if a block's header/footer leader text encompasses POS." - (when-let ((node (omi/-block-at-point pos))) - (org-with-wide-buffer - (cl-destructuring-bind (bbeg . bend) (omi/-block-beg-end node) - (or (omi/-intersects-leader-at bbeg pos pos) - (omi/-intersects-leader-at bend pos pos)))))) - -(defun omi/-after-change (beg end _len) - "Perform after-change operations on changed text from BEG..END. -To be added after `org-indent-refresh-maybe' on -`after-change-functions'." - (with-silent-modifications - (let ((beg-block (get-text-property beg :omi/block)) - (end-block (get-text-property end :omi/block)) - extend) - (when (and beg-block (or (eq beg-block 'damaged) (omi/-pos-in-leader-p beg))) - (setq extend t - beg (or (previous-single-property-change beg :omi/block) beg))) - (when (and end-block (or (eq end-block 'damaged) (omi/-pos-in-leader-p end))) - (setq extend t - end (or (next-single-property-change end :omi/block) end))) - (when extend - (remove-text-properties beg end '(:omi/block nil :omi/indent nil)) - (org-indent-add-properties beg end))) - ;; If we had a level change, extend down to the next heading - (when omi/-level-change-end (setq end (max end omi/-level-change-end))) - (setq beg (omi/-lbp beg) end (omi/-lbp end 2)) - (remove-text-properties beg end '(omi/display nil)) - (omi/-walk-blocks beg end - (lambda (bl-beg bl-end) - (let ((beg0 bl-beg) (end0 bl-end) - (pf (get-text-property bl-beg 'line-prefix)) - oi-pos oi ci full-block) - (save-excursion - (goto-char bl-beg) - (back-to-indentation) - (setq oi-pos (point) - oi (get-text-property oi-pos :omi/indent) - ci (current-indentation))) - (unless (eq oi ci) - (put-text-property oi-pos (1+ oi-pos) :omi/indent ci)) - (when (and oi (= oi 0) (/= oi ci)) ; was flush, is now indented: - (org-indent-add-properties bl-beg bl-end)) ; repair block's prefixes - (when (< bl-beg beg) ; 1st block straddles BEG - (if (eq oi ci) (setq bl-beg beg) (setq full-block t))) - (when (> bl-end end) ; last block straddles END - (if (eq oi ci) (setq bl-end end) (setq full-block t))) - (when full-block - (with-silent-modifications - (remove-text-properties bl-beg bl-end '(omi/display nil)))) - (omi/-draw-block bl-beg bl-end beg0 end0 (length pf) ci)))))) - -;;;; Mode/setup -(defun omi/init (&optional buf) - "Register buffer BUF and refresh. -To be added to `org-indent-post-buffer-init-functions'." - (interactive) - (let ((buf (or buf (current-buffer)))) - (when (buffer-live-p buf) ; org-capture buffers vanish fast - (with-current-buffer buf - (add-hook 'before-change-functions #'omi/-before-change nil t) - (or (memq #'omi/-after-change after-change-functions) - (cl-loop for func on after-change-functions - if (eq (car func) 'org-indent-refresh-maybe) do - (setcdr func (cons #'omi/-after-change (cdr func))) and return t) - (add-hook 'after-change-functions #'omi/-after-change 98 t)) - (org-with-wide-buffer (omi/-after-change (point-min) (point-max) nil)) - (setq omi/-init t))))) - -;;;###autoload -(define-minor-mode omi/mode - "Org-modern-like block brackets within org-indent." - :global nil - :group 'org-modern-indent - (if omi/mode - (progn - (advice-add 'org-indent-refresh-maybe :around - #'omi/-refresh-maybe-watch) - (cond - ;; already registered before, just toggle - ((or (called-interactively-p 'any) omi/-init) (omi/init)) - ;; Register with buffer init - ((boundp 'org-indent-post-buffer-init-functions) - (add-hook 'org-indent-post-buffer-init-functions #'omi/init nil t)) - ;; No hook available, use the less reliable method - (t (omi/-wait-and-refresh (current-buffer)))) - (cl-pushnew 'omi/display - (alist-get 'display char-property-alias-alist))) - ;; Disabling - (advice-remove 'org-indent-refresh-maybe #'omi/-refresh-maybe-watch) - (remove-hook 'before-change-functions #'omi/-before-change t) - (remove-hook 'after-change-functions #'omi/-after-change t) - (if (boundp 'org-indent-post-buffer-init-functions) - (remove-hook 'org-indent-post-buffer-init-functions #'omi/init t) - (cancel-timer (car omi/-init)) - (setq omi/-init nil)) - (omi/-refresh))) - -(provide 'org-modern-indent) -;;; org-modern-indent.el ends here -;; Local Variables: -;; read-symbol-shorthands: (("omi/" . "org-modern-indent-") (":omi/" . ":org-modern-indent-")) -;; indent-tabs-mode: nil -;; package-lint--sane-prefixes: "^omi/" -;; End: diff --git a/org-modern.el b/org-modern.el index 2e0cf6f987..1ce6688771 100644 --- a/org-modern.el +++ b/org-modern.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2022-2025 Free Software Foundation, Inc. ;; Author: Daniel Mendler <m...@daniel-mendler.de> -;; Maintainer: Daniel Mendler <m...@daniel-mendler.de>, J.D. Smith <jdtsmith+e...@gmail.com> +;; Maintainer: Daniel Mendler <m...@daniel-mendler.de> ;; Created: 2022 ;; Version: 1.7 ;; Package-Requires: ((emacs "28.1") (org "9.5") (compat "30")) @@ -225,11 +225,6 @@ which specifies the offset of the block border from the edge of the window." :type '(choice boolean natnum)) -(defcustom org-modern-block-indent nil - "Whether to style indented blocks when using `org-indent-mode'. -See `org-modern-indent-mode'." - :type 'boolean) - (defcustom org-modern-keyword t "Prettify keywords like #+title. If set to t, the prefix #+ will be hidden. If set to a string, @@ -382,7 +377,6 @@ the font.") (defconst org-modern--table-overline '(:overline t)) (defconst org-modern--table-sp '((space :width (org-modern--table-sp-width)) (space :width (org-modern--table-sp-width)))) -(declare-function org-modern-indent-mode "ext:org-modern-indent") (defun org-modern--checkbox () "Prettify checkboxes according to `org-modern-checkbox'." @@ -802,7 +796,7 @@ whole buffer; otherwise, for the line at point." (2 '(face org-modern-label display #(" " 0 1 (face (:strike-through t)))) t)))) ;; Do not add source block fringe markers if org-indent-mode is ;; enabled. org-indent-mode uses line prefixes for indentation. - ;; org-modern-indent handles this. + ;; Therefore we cannot have both. (when (and org-modern-block-fringe (not (bound-and-true-p org-indent-mode))) '(("^[ \t]*#\\+\\(?:begin\\|BEGIN\\)_\\S-" (0 (org-modern--block-fringe))))) @@ -868,9 +862,7 @@ whole buffer; otherwise, for the line at point." (when (eq org-modern-star 'fold) (add-hook 'org-cycle-hook #'org-modern--cycle nil 'local)) (org-modern--update-faces) - (org-modern--update-bitmaps) - (when (and (bound-and-true-p org-indent-mode) org-modern-block-indent) - (org-modern-indent-mode 1))) + (org-modern--update-bitmaps)) (t (remove-from-invisibility-spec 'org-modern) (font-lock-remove-keywords nil org-modern--font-lock-keywords) @@ -880,9 +872,7 @@ whole buffer; otherwise, for the line at point." (remove-hook 'org-after-promote-entry-hook #'org-modern--unfontify-line 'local) (remove-hook 'org-after-demote-entry-hook #'org-modern--unfontify-line 'local) (when (eq org-modern-star 'fold) - (remove-hook 'org-cycle-hook #'org-modern--cycle 'local)) - (when (bound-and-true-p org-modern-indent-mode) - (org-modern-indent-mode 0)))) + (remove-hook 'org-cycle-hook #'org-modern--cycle 'local)))) (without-restriction (with-silent-modifications (org-modern--unfontify (point-min) (point-max)))