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:
Stefan Kangas 2022-07-09 11:29:25 +02:00
parent ecb2eccad5
commit 14a3614353
3 changed files with 184 additions and 0 deletions

View file

@ -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)

View 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.
=-=-=

View 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