]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 744ed0ceeed7472a160fea7154939cf641205577 from bug#57082 (bug#57176)
authorJuri Linkov <juri@linkov.net>
Tue, 30 Aug 2022 17:09:20 +0000 (20:09 +0300)
committerJuri Linkov <juri@linkov.net>
Tue, 30 Aug 2022 17:09:20 +0000 (20:09 +0300)
* lisp/outline.el (outline-minor-mode-highlight-buffer): Handle 'append'.
(outline-minor-mode): Call outline--fix-up-all-buttons when font-lock is used.

* lisp/textmodes/emacs-news-mode.el (emacs-news--mode-common): Fix regexp.

lisp/outline.el
lisp/textmodes/emacs-news-mode.el

index 3250b62f1e7065168c1e1abec4d372d4ba820a67..857ac9562fd679b148ac55f83be46e030bf331a0 100644 (file)
@@ -427,15 +427,14 @@ outline font-lock faces to those of major mode."
     (goto-char (point-min))
     (let ((regexp (concat "^\\(?:" outline-regexp "\\).*$")))
       (while (re-search-forward regexp nil t)
-        (let ((overlay (make-overlay (match-beginning 0)
-                                     (match-end 0))))
+        (let ((overlay (make-overlay (match-beginning 0) (match-end 0))))
           (overlay-put overlay 'outline-overlay t)
-          (when (or (eq outline-minor-mode-highlight 'override)
+          ;; FIXME: Is it possible to override all underlying face attributes?
+          (when (or (memq outline-minor-mode-highlight '(append override))
                     (and (eq outline-minor-mode-highlight t)
-                         (goto-char (match-beginning 0))
-                         (not (get-text-property (point) 'face))))
+                         (not (get-text-property (match-beginning 0) 'face))))
             (overlay-put overlay 'face (outline-font-lock-face)))
-          (when (and (outline--use-buttons-p) (outline-on-heading-p))
+          (when (outline--use-buttons-p)
             (outline--insert-open-button)))
         (goto-char (match-end 0))))))
 
@@ -452,10 +451,12 @@ See the command `outline-mode' for more information on this mode."
   (if outline-minor-mode
       (progn
         (when outline-minor-mode-highlight
-          (when (and global-font-lock-mode (font-lock-specified-p major-mode))
-            (font-lock-add-keywords nil outline-font-lock-keywords t)
-            (font-lock-flush))
-          (outline-minor-mode-highlight-buffer))
+          (if (and global-font-lock-mode (font-lock-specified-p major-mode))
+              (progn
+                (font-lock-add-keywords nil outline-font-lock-keywords t)
+                (font-lock-flush)
+                (outline--fix-up-all-buttons))
+            (outline-minor-mode-highlight-buffer)))
        ;; Turn off this mode if we change major modes.
        (add-hook 'change-major-mode-hook
                  (lambda () (outline-minor-mode -1))
index 022e17c934355e408339e2eac14f33a6efb1c5c2..6bf96deaccb88d4a61b22abd7bf656cae6b31872 100644 (file)
 
 (defun emacs-news--mode-common ()
   (setq-local font-lock-defaults '(emacs-news-mode-font-lock-keywords t))
-  (setq-local outline-regexp "\\(:? +\\)?\\(\\*+\\) "
+  ;; 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-level (lambda () (length (match-string 2)))
               outline-minor-mode-highlight 'append)
   (outline-minor-mode)
   (emacs-etc--hide-local-variables))