(defvar-local outline--use-buttons nil
"Non-nil when buffer displays clickable buttons on the headings.")
+(defvar-local outline-minor-mode-insert-buttons nil
+ "Non-nil when it's allowed to modify buffer to insert buttons.")
+
(defvar-local outline--use-rtl nil
"Non-nil when direction of clickable buttons is right-to-left.")
(if outline--use-rtl
'outline-close-rtl
'outline-close)
- 'outline-open)))
- (inhibit-read-only t))
+ 'outline-open))))
;; In editing buffers we use overlays only, but in other buffers
;; we use a mix of text properties, text and overlays to make
;; movement commands work more logically.
- (when (derived-mode-p 'special-mode)
- (put-text-property (point) (1+ (point)) 'face (plist-get icon 'face)))
- (if-let ((image (plist-get icon 'image)))
- (overlay-put o 'display image)
- (overlay-put o 'display (concat (plist-get icon 'string)
- (string (char-after (point)))))
- (overlay-put o 'face (plist-get icon 'face))))
+ (if outline-minor-mode-insert-buttons
+ (let ((inhibit-read-only t))
+ (put-text-property (point) (1+ (point)) 'face (plist-get icon 'face))
+ (if-let ((image (plist-get icon 'image)))
+ (overlay-put o 'display image)
+ (overlay-put o 'display (concat (plist-get icon 'string)
+ (string (char-after (point)))))
+ (overlay-put o 'face (plist-get icon 'face))))
+ (overlay-put
+ o 'before-string
+ (propertize " "
+ 'display
+ (or (plist-get icon 'image)
+ (plist-get icon 'string))))))
o))
(defun outline--make-margin-overlay (type)
(beginning-of-line)
(if use-margins
(outline--make-margin-overlay 'open)
- (when (derived-mode-p 'special-mode)
+ (when outline-minor-mode-insert-buttons
(let ((inhibit-read-only t))
(insert " ")
(beginning-of-line)))
(beginning-of-line)
(if use-margins
(outline--make-margin-overlay 'close)
- (when (derived-mode-p 'special-mode)
+ (when outline-minor-mode-insert-buttons
(let ((inhibit-read-only t))
(insert " ")
(beginning-of-line)))
(defun emacs-news--mode-common ()
(setq-local font-lock-defaults '(emacs-news-mode-font-lock-keywords t))
- ;; This `outline-regexp' matches leading spaces inserted
- ;; by the current implementation of `outline-minor-mode-use-buttons'.
- (setq-local outline-regexp "\\(?: +\\)?\\(\\*+\\) "
- outline-level (lambda () (length (match-string 1)))
- outline-minor-mode-cycle t
- outline-minor-mode-highlight 'append)
+ (setq-local outline-minor-mode-cycle t
+ outline-minor-mode-highlight 'append
+ outline-minor-mode-use-margins t)
(outline-minor-mode)
(setq-local imenu-generic-expression outline-imenu-generic-expression)
(emacs-etc--hide-local-variables))