Commit 598ea453 authored by Juri Linkov's avatar Juri Linkov

(view-emacs-news): With argument, display info for the

selected version by finding it among different NEWS files, and
narrowing the buffer to the selected version.
parent 1d359d88
;;; help.el --- help commands for Emacs
;; Copyright (C) 1985, 1986, 1993, 1994, 1998, 1999, 2000, 2001, 2002
;; Copyright (C) 1985, 1986, 1993, 1994, 1998, 1999, 2000, 2001, 2002, 2004
;; Free Software Foundation, Inc.
;; Maintainer: FSF
......@@ -313,19 +313,61 @@ of the key sequence that ran this command."
(defun view-emacs-news (&optional arg)
"Display info on recent changes to Emacs.
With numeric argument, display information on correspondingly older changes."
With argument, display info only for the selected version."
(interactive "P")
(let* ((arg (if arg (prefix-numeric-value arg) 0))
(file (cond ((eq arg 0) "NEWS")
((eq arg 1) "ONEWS")
(nth (- arg 2)
(nreverse (directory-files data-directory
nil "^ONEWS\\.[0-9]+$"
(if file
(view-file (expand-file-name file data-directory))
(error "No such old news"))))
(if (not arg)
(view-file (expand-file-name "NEWS" data-directory))
(let* ((map (sort
(lambda (file)
(expand-file-name file data-directory))
(let (res)
(while (re-search-forward
(if (string-match "^ONEWS\\.[0-9]+$" file)
"Changes in \\(?:Emacs\\|version\\)?[ \t]*\\([0-9]+\\(?:\\.[0-9]+\\)?\\)"
"^\* [^0-9\n]*\\([0-9]+\\.[0-9]+\\)") nil t)
(setq res (cons (list (match-string-no-properties 1)
file) res)))
(append '("NEWS" "ONEWS")
(directory-files data-directory nil
"^ONEWS\\.[0-9]+$" nil)))))
(lambda (a b)
(string< (car b) (car a)))))
(current (caar map))
(version (completing-read
(format "Read NEWS for the version (default %s): " current)
(mapcar 'car map) nil nil nil nil current))
(file (cadr (assoc version map)))
(if (not file)
(error "No news is good news")
(view-file (expand-file-name file data-directory))
(goto-char (point-min))
(when (re-search-forward
(concat (if (string-match "^ONEWS\\.[0-9]+$" file)
"Changes in \\(?:Emacs\\|version\\)?[ \t]*"
"^\* [^0-9\n]*") version)
nil t)
(while (and (setq res
(if (string-match "^ONEWS\\.[0-9]+$" file)
"Changes in \\(?:Emacs\\|version\\)?[ \t]*\\([0-9]+\\(?:\\.[0-9]+\\)?\\)"
"^\* [^0-9\n]*\\([0-9]+\\.[0-9]+\\)") nil t))
(equal (match-string-no-properties 1) version)))
(or res (goto-char (point-max)))
(defun view-todo (&optional arg)
"Display the Emacs TODO list."
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment