;;; lisp-mnt.el --- utility functions for Emacs Lisp maintainers
;; Copyright (C) 1992, 1994, 1997, 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
;; Maintainer: FSF
;;
;; * Maintainer line --- should be a single name/address as in the Author
;; line, or an address only, or the string "FSF". If there is no maintainer
-;; line, the person(s) in the Author field are presumed to be it. The example
-;; in this file is mildly bogus because the maintainer line is redundant.
+;; line, the person(s) in the Author field are presumed to be it.
;; The idea behind these two fields is to be able to write a Lisp function
;; that does "send mail to the author" without having to mine the name out by
;; hand. Please be careful about surrounding the network address with <> if
;; package for the distribution. (This file doesn't have one because the
;; author *is* one of the maintainers.)
;;
-;; * Keywords line --- used by the finder code (now under construction)
-;; for finding Emacs Lisp code related to a topic.
+;; * Keywords line --- used by the finder code for finding Emacs
+;; Lisp code related to a topic.
;;
;; * X-Bogus-Bureaucratic-Cruft line --- this is a joke and an example
;; of a comment header. Headers starting with `X-' should never be used
(match-string-no-properties 1)))))))
(defun lm-keywords (&optional file)
- "Return the keywords given in file FILE, or current buffer if FILE is nil."
+ "Return the keywords given in file FILE, or current buffer if FILE is nil.
+The return is a `downcase'-ed string, or nil if no keywords
+header. Multi-line keywords are joined up with a space between
+each line."
(lm-with-file file
- (let ((keywords (lm-header "keywords")))
- (and keywords (downcase keywords)))))
+ (let ((keywords (lm-header-multiline "keywords")))
+ (and keywords
+ (mapconcat 'downcase keywords " ")))))
(defun lm-keywords-list (&optional file)
"Return list of keywords given in file FILE."
(let ((keywords (lm-keywords file)))
(if keywords
- (split-string keywords ",?[ \t]"))))
+ (if (string-match-p "," keywords)
+ (split-string keywords ",[ \t\n]*" t)
+ (split-string keywords "[ \t\n]+" t)))))
(defvar finder-known-keywords)
(defun lm-keywords-finder-p (&optional file)
(let ((must-kill (and file (not (get-file-buffer file)))))
(when file (find-file file))
(prog1
- (if (interactive-p)
+ (if (called-interactively-p 'interactive)
(message "%s" (lm-summary))
(lm-summary))
(when must-kill (kill-buffer (current-buffer))))))))
-(eval-when-compile (defvar report-emacs-bug-address))
+(defvar report-emacs-bug-address)
(defun lm-report-bug (topic)
"Report a bug in the package currently being visited to its maintainer.