From 1200ecba27ca567817ffeecdebf6fb80928c9c2c Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 1 Nov 2021 03:18:02 +0100 Subject: [PATCH] Don't print empty keymaps in `C-h b' * lisp/help.el (describe-map-tree): Don't print the heading if the keymap is empty (bug#22334). Tweak the look to compress it more vertically. --- lisp/help.el | 33 +++++++++++++-------- test/lisp/help-tests.el | 66 ++++++++++++++++------------------------- 2 files changed, 46 insertions(+), 53 deletions(-) diff --git a/lisp/help.el b/lisp/help.el index afb91a580aa..c4f81401eb9 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1275,17 +1275,8 @@ Any inserted text ends in two newlines (used by result)) amaps)) (maps orig-maps) - (print-title (or maps always-title))) - ;; Print title. - (when print-title - (insert (concat (if title - (concat title - (if prefix - (concat " Starting With " - (help--key-description-fontified prefix))) - ":\n")) - "key binding\n" - "--- -------\n"))) + (print-title (or maps always-title)) + (start-point (point))) ;; Describe key bindings. (setq help--keymaps-seen nil) (while (consp maps) @@ -1310,8 +1301,24 @@ Any inserted text ends in two newlines (used by (describe-map (cdr elt) elt-prefix transl partial sub-shadows no-menu mention-shadow))) (setq maps (cdr maps))) - (when print-title - (insert "\n")))) + ;; Print title... + (when (and print-title + ;; ... unless the keymap was empty. + (/= (point) start-point)) + (save-excursion + (goto-char start-point) + (when (eolp) + (delete-region (point) (1+ (point)))) + (insert + (concat + (if title + (concat title + (if prefix + (concat " Starting With " + (help--key-description-fontified prefix))) + ":\n")) + "\nkey binding\n" + (make-separator-line))))))) (defun help--shadow-lookup (keymap key accept-default remap) "Like `lookup-key', but with command remapping. diff --git a/test/lisp/help-tests.el b/test/lisp/help-tests.el index 871417da3d2..f9609d8444f 100644 --- a/test/lisp/help-tests.el +++ b/test/lisp/help-tests.el @@ -91,10 +91,9 @@ (ert-deftest help-tests-substitute-command-keys/keymaps () (with-substitute-command-keys-test (test "\\{minibuffer-local-must-match-map}" - "\ + " key binding ---- ------- - +------------------------------------------------------------------------------- C-g abort-minibuffers TAB minibuffer-complete C-j minibuffer-complete-and-exit @@ -122,7 +121,6 @@ M-r previous-matching-history-element M-s next-matching-history-element M-g M-c switch-to-completions - "))) (ert-deftest help-tests-substitute-command-keys/keymap-change () @@ -250,10 +248,9 @@ M-g M-c switch-to-completions (with-temp-buffer (help-tests-major-mode) (test "\\{help-tests-major-mode-map}" - "\ + " key binding ---- ------- - +------------------------------------------------------------------------------- ( .. ) short-range 1 .. 4 foo-range a .. c foo-other-range @@ -261,7 +258,6 @@ a .. c foo-other-range C-e foo-something x foo-original foo-function-key1 - ")))) (ert-deftest help-tests-substitute-command-keys/shadow () @@ -270,10 +266,9 @@ x foo-original (help-tests-major-mode) (help-tests-minor-mode) (test "\\{help-tests-major-mode-map}" - "\ + " key binding ---- ------- - +------------------------------------------------------------------------------- ( .. ) short-range 1 .. 4 foo-range a .. c foo-other-range @@ -283,7 +278,6 @@ C-e foo-something x foo-original (this binding is currently shadowed) foo-function-key1 - ")))) (ert-deftest help-tests-substitute-command-keys/command-remap () @@ -293,14 +287,12 @@ x foo-original (help-tests-major-mode) (define-key help-tests-major-mode-map [remap foo] 'bar) (test "\\{help-tests-major-mode-map}" - "\ + " key binding ---- ------- - +------------------------------------------------------------------------------- Prefix Command bar - "))))) (ert-deftest help-tests-describe-map-tree/no-menu-t () @@ -312,11 +304,10 @@ key binding :enable mark-active :help "Help text")))))) (describe-map-tree map nil nil nil nil t nil nil nil) - (should (equal (buffer-string) "key binding ---- ------- - + (should (equal (buffer-string) " +key binding +------------------------------------------------------------------------------- C-a foo - "))))) (ert-deftest help-tests-describe-map-tree/no-menu-nil () @@ -328,14 +319,13 @@ C-a foo :enable mark-active :help "Help text")))))) (describe-map-tree map nil nil nil nil nil nil nil nil) - (should (equal (buffer-string) "key binding ---- ------- - + (should (equal (buffer-string) " +key binding +------------------------------------------------------------------------------- C-a foo Prefix Command foo - "))))) (ert-deftest help-tests-describe-map-tree/mention-shadow-t () @@ -345,13 +335,12 @@ C-a foo (2 . bar)))) (shadow-maps '((keymap . ((1 . baz)))))) (describe-map-tree map t shadow-maps nil nil t nil nil t) - (should (equal (buffer-string) "key binding ---- ------- - + (should (equal (buffer-string) " +key binding +------------------------------------------------------------------------------- C-a foo (this binding is currently shadowed) C-b bar - "))))) (ert-deftest help-tests-describe-map-tree/mention-shadow-nil () @@ -361,11 +350,10 @@ C-b bar (2 . bar)))) (shadow-maps '((keymap . ((1 . baz)))))) (describe-map-tree map t shadow-maps nil nil t nil nil nil) - (should (equal (buffer-string) "key binding ---- ------- - + (should (equal (buffer-string) " +key binding +------------------------------------------------------------------------------- C-b bar - "))))) (ert-deftest help-tests-describe-map-tree/partial-t () @@ -374,11 +362,10 @@ C-b bar (map '(keymap . ((1 . foo) (2 . undefined))))) (describe-map-tree map t nil nil nil nil nil nil nil) - (should (equal (buffer-string) "key binding ---- ------- - + (should (equal (buffer-string) " +key binding +------------------------------------------------------------------------------- C-a foo - "))))) (ert-deftest help-tests-describe-map-tree/partial-nil () @@ -387,12 +374,11 @@ C-a foo (map '(keymap . ((1 . foo) (2 . undefined))))) (describe-map-tree map nil nil nil nil nil nil nil nil) - (should (equal (buffer-string) "key binding ---- ------- - + (should (equal (buffer-string) " +key binding +------------------------------------------------------------------------------- C-a foo C-b undefined - "))))) (defvar help-tests--was-in-buffer nil) -- 2.39.5