From ab15d70f3d8d182a44ea8797732c239aa9f7a8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miha=20Rihtar=C5=A1i=C4=8D?= Date: Fri, 19 Nov 2021 11:38:34 +0100 Subject: [PATCH] Fix deactivation of outline cycle bindings * lisp/outline.el (outline-minor-mode): (outline-font-lock-keywords): Don't modify the 'keymap' text property directly. Modify 'outline-cycle-keymap' property and have the minor mode set it up as an alias to the 'keymap' property, or reset it on deactivation. --- lisp/outline.el | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lisp/outline.el b/lisp/outline.el index a4d2a3b7d7..e41ec364f4 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -226,9 +226,11 @@ outline-font-lock-keywords (if outline-minor-mode-cycle (if outline-minor-mode-highlight (list 'face (outline-font-lock-face) - 'keymap outline-minor-mode-cycle-map) + 'outline-cycle-keymap + outline-minor-mode-cycle-map) (list 'face nil - 'keymap outline-minor-mode-cycle-map)) + 'outline-cycle-keymap + outline-minor-mode-cycle-map)) (if outline-minor-mode-highlight (list 'face (outline-font-lock-face)))) (outline-font-lock-face)) @@ -428,6 +430,11 @@ outline-minor-mode (if (and global-font-lock-mode (font-lock-specified-p major-mode)) (progn (font-lock-add-keywords nil outline-font-lock-keywords t) + (setq-local char-property-alias-alist + (copy-alist char-property-alias-alist)) + (cl-pushnew + 'outline-cycle-keymap + (alist-get 'keymap char-property-alias-alist)) (font-lock-flush)) (outline-minor-mode-highlight-buffer))) ;; Turn off this mode if we change major modes. @@ -438,8 +445,10 @@ outline-minor-mode ;; Cause use of ellipses for invisible text. (add-to-invisibility-spec '(outline . t))) (when (or outline-minor-mode-cycle outline-minor-mode-highlight) - (if font-lock-fontified - (font-lock-remove-keywords nil outline-font-lock-keywords)) + (when font-lock-fontified + (font-lock-remove-keywords nil outline-font-lock-keywords) + (when-let ((as (assq 'keymap char-property-alias-alist))) + (setcdr as (remq 'outline-cycle-keymap (cdr as))))) (remove-overlays nil nil 'outline-overlay t) (font-lock-flush)) (setq line-move-ignore-invisible nil) -- 2.34.0