From: Juri Linkov Date: Wed, 11 Jan 2023 19:37:33 +0000 (+0200) Subject: * etc/NEWS: Mention incompatible changes in 'outline-minor-mode-cycle-map'. X-Git-Tag: emacs-29.0.90~762 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4a8891a462e;p=emacs.git * etc/NEWS: Mention incompatible changes in 'outline-minor-mode-cycle-map'. * lisp/outline.el (outline-minor-mode-cycle--bind): Add docstring (bug#60426). (outline-minor-mode-cycle--bind): Default 'map' to 'outline-minor-mode-cycle-map'. (outline-minor-mode-cycle-map): Improve docstring. (outline-minor-mode): Move margin-cycling keys to 'outline-minor-mode-cycle-map'. --- diff --git a/etc/NEWS b/etc/NEWS index a28f5c9a65a..16d17821b78 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -350,6 +350,15 @@ next button, even if the mode has bound it to something else. This also means that 'TAB' on a button in an 'outline-minor-mode' heading will move point instead of collapsing the outline. +--- +** 'outline-minor-mode-cycle-map' is now parent of 'outline-minor-mode'. +Instead of adding text property 'keymap' with 'outline-minor-mode-cycle' +on outline headings in 'outline-minor-mode', the keymap +'outline-minor-mode-cycle' is now active in the whole buffer. +But keybindings in 'outline-minor-mode-cycle' still take effect +only on outline headings because they are bound with the help of +'outline-minor-mode-cycle--bind' that checks if point is on a heading. + --- ** 'Info-default-directory-list' is no longer populated at Emacs startup. If you have code in your init file that removes directories from diff --git a/lisp/outline.el b/lisp/outline.el index 91f6040687b..0bfda8388ed 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -209,8 +209,14 @@ This option is only in effect when `outline-minor-mode-cycle' is non-nil." :version "28.1") (defvar outline-minor-mode-cycle) +(defvar outline-minor-mode-cycle-map) (defun outline-minor-mode-cycle--bind (map key binding &optional filter) - (define-key map key + "Define KEY as BINDING in MAP using FILTER. +The key takes effect only on the following conditions: +`outline-minor-mode-cycle' is non-nil, point is located on the heading line, +FILTER or `outline-minor-mode-cycle-filter' is nil or returns non-nil. +The argument MAP is optional and defaults to `outline-minor-mode-cycle-map'." + (define-key (or map outline-minor-mode-cycle-map) key `(menu-item "" ,binding ;; Filter out specific positions on the heading. @@ -227,8 +233,16 @@ This option is only in effect when `outline-minor-mode-cycle' is non-nil." (let ((map (make-sparse-keymap))) (outline-minor-mode-cycle--bind map (kbd "TAB") #'outline-cycle) (outline-minor-mode-cycle--bind map (kbd "") #'outline-cycle-buffer) + (keymap-set map " " 'outline-cycle) + (keymap-set map " " 'outline-cycle) + (keymap-set map " S-" 'outline-cycle-buffer) + (keymap-set map " S-" 'outline-cycle-buffer) map) - "Keymap used by `outline-minor-mode-cycle'.") + "Keymap used as a parent of the `outline-minor-mode' keymap. +It contains key bindings that can be used to cycle visibility. +The recommended way to bind keys is with `outline-minor-mode-cycle--bind' +when the key should be enabled only when `outline-minor-mode-cycle' is +non-nil and point is located on the heading line.") (defvar outline-mode-map (let ((map (make-sparse-keymap))) @@ -518,10 +532,6 @@ See the command `outline-mode' for more information on this mode." :keymap (define-keymap :parent outline-minor-mode-cycle-map "" outline-minor-mode-menu-bar-map - " " 'outline-cycle - " " 'outline-cycle - " S-" 'outline-cycle-buffer - " S-" 'outline-cycle-buffer (key-description outline-minor-mode-prefix) outline-mode-prefix-map) (if outline-minor-mode (progn