From 7804536e4e6dd7fa57d38b9b6c6835ae316bff50 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Tue, 30 Aug 2022 20:09:20 +0300 Subject: [PATCH] Fix 744ed0ceeed7472a160fea7154939cf641205577 from bug#57082 (bug#57176) * 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 | 21 +++++++++++---------- lisp/textmodes/emacs-news-mode.el | 6 ++++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lisp/outline.el b/lisp/outline.el index 3250b62f1e7..857ac9562fd 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -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)) diff --git a/lisp/textmodes/emacs-news-mode.el b/lisp/textmodes/emacs-news-mode.el index 022e17c9343..6bf96deaccb 100644 --- a/lisp/textmodes/emacs-news-mode.el +++ b/lisp/textmodes/emacs-news-mode.el @@ -73,9 +73,11 @@ (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)) -- 2.39.2