From: Stephen Berman Date: Tue, 9 Aug 2022 18:21:09 +0000 (+0200) Subject: Make outline buttons work in NEWS X-Git-Tag: emacs-29.0.90~1447^2~278 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=744ed0ceeed7472a160fea7154939cf641205577;p=emacs.git Make outline buttons work in NEWS * lisp/outline.el (outline-minor-mode-highlight-buffer): Fix button insertion. (outline-minor-mode): Ditto. (outline--insert-open-button): Don't mark buffer as modified when inserting buttons. (outline--insert-close-button): Ditto. * lisp/textmodes/emacs-news-mode.el (emacs-news--mode-common): Adjust outline regexp. --- diff --git a/lisp/outline.el b/lisp/outline.el index 7750f9a75d0..35524a79a90 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -435,7 +435,7 @@ outline font-lock faces to those of major mode." (goto-char (match-beginning 0)) (not (get-text-property (point) 'face)))) (overlay-put overlay 'face (outline-font-lock-face))) - (when (outline--use-buttons-p) + (when (and (outline--use-buttons-p) (outline-on-heading-p)) (outline--insert-open-button))) (goto-char (match-end 0)))))) @@ -452,11 +452,10 @@ See the command `outline-mode' for more information on this mode." (if outline-minor-mode (progn (when outline-minor-mode-highlight - (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-minor-mode-highlight-buffer))) + (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)) ;; Turn off this mode if we change major modes. (add-hook 'change-major-mode-hook (lambda () (outline-minor-mode -1)) @@ -1011,32 +1010,34 @@ If non-nil, EVENT should be a mouse event." o)) (defun outline--insert-open-button () - (save-excursion - (beginning-of-line) - (when (derived-mode-p 'special-mode) - (let ((inhibit-read-only t)) - (insert " ") - (beginning-of-line))) - (let ((o (outline--make-button-overlay 'open))) - (overlay-put o 'help-echo "Click to hide") - (overlay-put o 'keymap - (define-keymap - "RET" #'outline-hide-subtree - "" #'outline-hide-subtree))))) + (with-silent-modifications + (save-excursion + (beginning-of-line) + (when (derived-mode-p 'special-mode) + (let ((inhibit-read-only t)) + (insert " ") + (beginning-of-line))) + (let ((o (outline--make-button-overlay 'open))) + (overlay-put o 'help-echo "Click to hide") + (overlay-put o 'keymap + (define-keymap + "RET" #'outline-hide-subtree + "" #'outline-hide-subtree)))))) (defun outline--insert-close-button () - (save-excursion - (beginning-of-line) - (when (derived-mode-p 'special-mode) - (let ((inhibit-read-only t)) - (insert " ") - (beginning-of-line))) - (let ((o (outline--make-button-overlay 'close))) - (overlay-put o 'help-echo "Click to show") - (overlay-put o 'keymap - (define-keymap - "RET" #'outline-show-subtree - "" #'outline-show-subtree))))) + (with-silent-modifications + (save-excursion + (beginning-of-line) + (when (derived-mode-p 'special-mode) + (let ((inhibit-read-only t)) + (insert " ") + (beginning-of-line))) + (let ((o (outline--make-button-overlay 'close))) + (overlay-put o 'help-echo "Click to show") + (overlay-put o 'keymap + (define-keymap + "RET" #'outline-show-subtree + "" #'outline-show-subtree)))))) (defun outline--fix-up-all-buttons (&optional from to) (when from diff --git a/lisp/textmodes/emacs-news-mode.el b/lisp/textmodes/emacs-news-mode.el index c7fa9fa2b2c..e6e1f037284 100644 --- a/lisp/textmodes/emacs-news-mode.el +++ b/lisp/textmodes/emacs-news-mode.el @@ -69,11 +69,9 @@ (defun emacs-news--mode-common () (setq-local font-lock-defaults '(emacs-news-mode-font-lock-keywords t)) - (setq-local outline-regexp "\\*+ " + (setq-local outline-regexp "\\(:? +\\)?\\(\\*+\\) " outline-minor-mode-cycle t - ;; We subtract one from the level, because we have a - ;; space after the asterisks. - outline-level (lambda () (1- (length (match-string 0)))) + outline-level (lambda () (length (match-string 2))) outline-minor-mode-highlight 'append) (outline-minor-mode))