Improve 'emacs-news-view-mode' menus and bindings
authorRobert Pluim <rpluim@gmail.com>
Tue, 23 Jul 2024 09:33:44 +0000 (11:33 +0200)
committerRobert Pluim <rpluim@gmail.com>
Tue, 23 Jul 2024 11:49:40 +0000 (13:49 +0200)
* lisp/textmodes/emacs-news-mode.el (emacs-news-mode-map): Move
non-editing commands from here...
(emacs-news-common-map): ... to here.
(emacs-news-view-mode): Remove hard-coded 'special-mode' bindings.
(emacs-news-view-mode-map): Inherit from 'special-mode-map' and
'emacs-news-common-map' here instead.
(emacs-news-mode--menu-common-1): New defconst for menu items common to
'news-mode' and 'news-view-mode'.
(emacs-news-mode--menu-common-2): Second new defconst for common items.
(emacs-news-mode-menu): Use them.
(emacs-news-view-mode-menu): New menu, which omits the buffer editing
commands.

This builds on the fix for Bug#72080.

lisp/textmodes/emacs-news-mode.el

index ca897ec456765efadca839db73f71395ca1527e4..edeb1540feb37c6dfed321f5bf374cdc2d587560 100644 (file)
   "C-c C-b" #'outline-backward-same-level
   "C-c C-n" #'outline-next-visible-heading
   "C-c C-p" #'outline-previous-visible-heading
-  "C-c C-u" #'outline-up-heading)
-
-(defvar-keymap emacs-news-mode-map
-  :parent emacs-news-common-map
+  "C-c C-u" #'outline-up-heading
+  ;; `news-mode' motion commands.
   "C-c C-s" #'emacs-news-next-untagged-entry
   "C-c C-r" #'emacs-news-previous-untagged-entry
-  "C-c C-t" #'emacs-news-cycle-tag
-  "C-c C-d" #'emacs-news-delete-temporary-markers
   "C-c C-g" #'emacs-news-goto-section
   "C-c C-j" #'emacs-news-find-heading
-  "C-c C-e" #'emacs-news-count-untagged-entries
+  "C-c C-e" #'emacs-news-count-untagged-entries)
+
+(defvar-keymap emacs-news-mode-map
+  :parent emacs-news-common-map
   "C-x C-q" #'emacs-news-view-mode
+  ;; `news-mode' editing commands.
+  "C-c C-t" #'emacs-news-cycle-tag
+  "C-c C-d" #'emacs-news-delete-temporary-markers
   "<remap> <open-line>" #'emacs-news-open-line)
 
+(defconst emacs-news-mode--menu-common-1
+    '(["Next Untagged" emacs-news-next-untagged-entry :help "Go to next untagged entry"]
+      ["Previous Untagged" emacs-news-previous-untagged-entry :help "Go to previous untagged entry"]
+      ["Count Untagged" emacs-news-count-untagged-entries :help "Count the number of untagged entries"]
+      "--"))
+
+(defconst emacs-news-mode--menu-common-2
+  '(["Goto Section" emacs-news-goto-section :help "Prompt for section and go to it"]
+    ["Goto Heading" emacs-news-find-heading :help "Prompt for heading and go to it"]
+    "--"))
+
 (easy-menu-define emacs-news-mode-menu emacs-news-mode-map
   "Menu for `emacs-news-mode'."
-  '("News"
-    ["Next Untagged" emacs-news-next-untagged-entry :help "Go to next untagged entry"]
-    ["Previous Untagged" emacs-news-previous-untagged-entry :help "Go to previous untagged entry"]
-    ["Count Untagged" emacs-news-count-untagged-entries :help "Count the number of untagged entries"]
+  `("News"
+    ,@emacs-news-mode--menu-common-1
     ["Cycle Tag" emacs-news-cycle-tag :help "Cycle documentation tag of current entry"]
     ["Delete Tags" emacs-news-delete-temporary-markers :help "Delete all documentation tags in buffer"]
     "--"
-    ["Goto Section" emacs-news-goto-section :help "Prompt for section and go to it"]
-    ["Goto Heading" emacs-news-find-heading :help "Prompt for heading and go to it"]
-    "--"
+    ,@emacs-news-mode--menu-common-2
     ["Enter View Mode" emacs-news-view-mode :help "Enter view-only mode"]))
 
-(defvar emacs-news-view-mode-map
-  ;; This is defined this way instead of inheriting because we're
-  ;; deriving the mode from `special-mode' and want the keys from there.
-  (let ((map (copy-keymap emacs-news-common-map)))
-    (keymap-set map "C-x C-q" #'emacs-news-mode)
-    map))
+(defvar-keymap emacs-news-view-mode-map
+  :parent (make-composed-keymap emacs-news-common-map special-mode-map)
+  "C-x C-q" #'emacs-news-mode)
+
+(easy-menu-define emacs-news-view-mode-menu emacs-news-view-mode-map
+  "Menu for `emacs-news-view-mode'."
+  `("News"
+    ,@emacs-news-mode--menu-common-1
+    ,@emacs-news-mode--menu-common-2
+    ["Enter NEWS Mode" emacs-news-mode :help "Enter NEWS mode"]))
 
 (defvar emacs-news-mode-font-lock-keywords
   `(("^---$" 0 'emacs-news-does-not-need-documentation)
   "Major mode for viewing the Emacs NEWS file."
   (setq buffer-read-only t)
   (emacs-news--buttonize)
-  (button-mode)
-  ;; Bind useful browsing keys.
-  (keymap-local-set "q" 'quit-window)
-  (keymap-local-set "SPC" 'scroll-up-command)
-  (keymap-local-set "S-SPC" 'scroll-down-command)
-  (keymap-local-set "DEL" 'scroll-down-command)
-  (keymap-local-set "?" 'describe-mode)
-  (keymap-local-set "h" 'describe-mode)
-  (keymap-local-set ">" 'end-of-buffer)
-  (keymap-local-set "<" 'beginning-of-buffer)
-  (keymap-local-set "g" 'revert-buffer))
+  (button-mode))
 
 (defun emacs-news--fill-paragraph (&optional justify)
   (cond