New command emacs-news-toggle-tag
* lisp/textmodes/emacs-news-mode.el (emacs-news-toggle-tag): New command. (emacs-news-mode-map): Bind above new command to "C-c C-t". * test/lisp/textmodes/emacs-news-mode-resources/toggle-tag.erts: * test/lisp/textmodes/emacs-news-mode-tests.el: New files.
This commit is contained in:
parent
ecb2eccad5
commit
14a3614353
3 changed files with 184 additions and 0 deletions
|
@ -52,6 +52,7 @@
|
|||
:parent emacs-news-common-map
|
||||
"C-c C-s" #'emacs-news-next-untagged-entry
|
||||
"C-c C-r" #'emacs-news-previous-untagged-entry
|
||||
"C-c C-t" #'emacs-news-toggle-tag
|
||||
"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
|
||||
|
@ -162,6 +163,26 @@ untagged NEWS entry."
|
|||
(interactive nil emacs-news-mode)
|
||||
(emacs-news-next-untagged-entry t))
|
||||
|
||||
(defun emacs-news-toggle-tag ()
|
||||
"Toggle documentation tag of current headline in the Emacs NEWS file."
|
||||
(interactive nil emacs-news-mode)
|
||||
(save-excursion
|
||||
(goto-char (line-beginning-position))
|
||||
(cond ((or (looking-at (rx bol (or "---" "+++") eol)))
|
||||
(forward-line 2))
|
||||
((or (looking-at (rx bol "*** ")))
|
||||
(forward-line 1)))
|
||||
(outline-previous-visible-heading 1)
|
||||
(forward-line -1)
|
||||
(cond ((not (looking-at (rx bol (or "---" "+++") eol)))
|
||||
(insert "\n---"))
|
||||
((looking-at (rx bol "---" eol))
|
||||
(delete-char 3)
|
||||
(insert "+++"))
|
||||
((looking-at (rx bol "+++" eol))
|
||||
(delete-char 4))
|
||||
(t (user-error "Invalid headline tag; can't toggle")))))
|
||||
|
||||
(defun emacs-news-count-untagged-entries ()
|
||||
"Say how many untagged entries there are in the current NEWS buffer."
|
||||
(interactive nil emacs-news-mode)
|
||||
|
|
131
test/lisp/textmodes/emacs-news-mode-resources/toggle-tag.erts
Normal file
131
test/lisp/textmodes/emacs-news-mode-resources/toggle-tag.erts
Normal file
|
@ -0,0 +1,131 @@
|
|||
Name: tag1
|
||||
Point-Char: |
|
||||
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
|Before, that binding was only available with 'dired-x'.
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
---
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
|Before, that binding was only available with 'dired-x'.
|
||||
=-=-=
|
||||
|
||||
Name: tag2
|
||||
Point-Char: |
|
||||
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
---
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
|Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
+++
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
|Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=-=
|
||||
|
||||
Name: tag3
|
||||
Point-Char: |
|
||||
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
+++
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
|Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
|Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=-=
|
||||
|
||||
Name: tag4-point-at-headline
|
||||
Point-Char: |
|
||||
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
|*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
---
|
||||
|*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=-=
|
||||
|
||||
Name: tag5-point-at-tag
|
||||
Point-Char: |
|
||||
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
|---
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
|+++
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=-=
|
||||
|
||||
Name: tag6-point-at-tag
|
||||
Point-Char: |
|
||||
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
|+++
|
||||
*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=
|
||||
+++
|
||||
*** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
|
||||
The corresponding key "% Y" is now bound by default in Dired.
|
||||
|
||||
|*** 'M-G' is now bound to 'dired-goto-subdir'.
|
||||
Before, that binding was only available if the 'dired-x' package was
|
||||
loaded.
|
||||
=-=-=
|
32
test/lisp/textmodes/emacs-news-mode-tests.el
Normal file
32
test/lisp/textmodes/emacs-news-mode-tests.el
Normal file
|
@ -0,0 +1,32 @@
|
|||
;;; emacs-news-mode-tests.el --- Tests for emacs-news-mode.el -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'ert)
|
||||
(require 'ert-x)
|
||||
(require 'emacs-news-mode)
|
||||
|
||||
(ert-deftest emacs-news-toggle-tag ()
|
||||
(ert-test-erts-file (ert-resource-file "toggle-tag.erts")
|
||||
(lambda ()
|
||||
(emacs-news-mode)
|
||||
(emacs-news-toggle-tag))))
|
||||
|
||||
;;; emacs-news-mode-tests.el ends here
|
Loading…
Add table
Reference in a new issue