annotate lisp/emacs-lisp/lisp-mnt.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents c87f89486bb7
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
1 ;;; lisp-mnt.el --- utility functions for Emacs Lisp maintainers
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2
64751
5b1a238fcbb4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64085
diff changeset
3 ;; Copyright (C) 1992, 1994, 1997, 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106066
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
5
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
6 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
34567
d04b3e51c5f3 Change maintainer to FSF.
Gerd Moellmann <gerd@gnu.org>
parents: 31656
diff changeset
7 ;; Maintainer: FSF
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
8 ;; Created: 14 Jul 1992
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
9 ;; Keywords: docs
5221
50e623c19fff (Bogus-Bureaucratic-Cruft): Changed to `X-Bogus-Bureaucratic-Cruft'.
Noah Friedman <friedman@splode.com>
parents: 4291
diff changeset
10 ;; X-Bogus-Bureaucratic-Cruft: Gruad will get you if you don't watch out!
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
13
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; GNU Emacs is free software: you can redistribute it and/or modify
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; the Free Software Foundation, either version 3 of the License, or
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
17 ;; (at your option) any later version.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
22 ;; GNU General Public License for more details.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
23
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
24 ;; You should have received a copy of the GNU General Public License
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
25 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
26
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
27 ;;; Commentary:
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
28
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
29 ;; This library adds some services to Emacs-Lisp editing mode.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
30 ;;
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
31 ;; First, it knows about the header conventions for library packages.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
32 ;; One entry point supports generating synopses from a library directory.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
33 ;; Another can be used to check for missing headers in library files.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
34 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
35 ;; Another entry point automatically addresses bug mail to a package's
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
36 ;; maintainer or author.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
37
93246
6ac54c43b7ca (lm-with-file): Use mode and syntax table for Emacs Lisp, not Lisp.
Johan Bockgård <bojohan@gnu.org>
parents: 87649
diff changeset
38 ;; This file can be loaded by your emacs-lisp-mode-hook. Have it
6ac54c43b7ca (lm-with-file): Use mode and syntax table for Emacs Lisp, not Lisp.
Johan Bockgård <bojohan@gnu.org>
parents: 87649
diff changeset
39 ;; (require 'lisp-mnt)
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
40
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
41 ;; This file is an example of the header conventions. Note the following
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
42 ;; features:
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
43 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
44 ;; * Header line --- makes it possible to extract a one-line summary of
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
45 ;; the package's uses automatically for use in library synopses, KWIC
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
46 ;; indexes and the like.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
47 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
48 ;; Format is three semicolons, followed by the filename, followed by
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
49 ;; three dashes, followed by the summary. All fields space-separated.
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
50 ;;
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
51 ;; * A blank line
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
52 ;;
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
53 ;; * Copyright line, which looks more or less like this:
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
54 ;;
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
55 ;; ;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
56 ;;
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
57 ;; * A blank line
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
58 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
59 ;; * Author line --- contains the name and net address of at least
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
60 ;; the principal author.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
61 ;;
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
62 ;; If there are multiple authors, they should be listed on continuation
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
63 ;; lines led by ;;<TAB>, like this:
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
64 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
65 ;; ;; Author: Ashwin Ram <Ram-Ashwin@cs.yale.edu>
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
66 ;; ;; Dave Sill <de5@ornl.gov>
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
67 ;; ;; David Lawrence <tale@pawl.rpi.edu>
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
68 ;; ;; Noah Friedman <friedman@ai.mit.edu>
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
69 ;; ;; Joe Wells <jbw@maverick.uswest.com>
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
70 ;; ;; Dave Brennan <brennan@hal.com>
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
71 ;; ;; Eric Raymond <esr@snark.thyrsus.com>
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
72 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
73 ;; This field may have some special values; notably "FSF", meaning
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
74 ;; "Free Software Foundation".
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
75 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
76 ;; * Maintainer line --- should be a single name/address as in the Author
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
77 ;; line, or an address only, or the string "FSF". If there is no maintainer
95627
51a4069c3233 Commentary fixes.
Glenn Morris <rgm@gnu.org>
parents: 94655
diff changeset
78 ;; line, the person(s) in the Author field are presumed to be it.
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
79 ;; The idea behind these two fields is to be able to write a Lisp function
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
80 ;; that does "send mail to the author" without having to mine the name out by
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
81 ;; hand. Please be careful about surrounding the network address with <> if
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
82 ;; there's also a name in the field.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
83 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
84 ;; * Created line --- optional, gives the original creation date of the
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
85 ;; file. For historical interest, basically.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
86 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
87 ;; * Version line --- intended to give the reader a clue if they're looking
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
88 ;; at a different version of the file than the one they're accustomed to. This
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
89 ;; may be an RCS or SCCS header.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
90 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
91 ;; * Adapted-By line --- this is for FSF's internal use. The person named
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
92 ;; in this field was the one responsible for installing and adapting the
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
93 ;; package for the distribution. (This file doesn't have one because the
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
94 ;; author *is* one of the maintainers.)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
95 ;;
95627
51a4069c3233 Commentary fixes.
Glenn Morris <rgm@gnu.org>
parents: 94655
diff changeset
96 ;; * Keywords line --- used by the finder code for finding Emacs
51a4069c3233 Commentary fixes.
Glenn Morris <rgm@gnu.org>
parents: 94655
diff changeset
97 ;; Lisp code related to a topic.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
98 ;;
5221
50e623c19fff (Bogus-Bureaucratic-Cruft): Changed to `X-Bogus-Bureaucratic-Cruft'.
Noah Friedman <friedman@splode.com>
parents: 4291
diff changeset
99 ;; * X-Bogus-Bureaucratic-Cruft line --- this is a joke and an example
50e623c19fff (Bogus-Bureaucratic-Cruft): Changed to `X-Bogus-Bureaucratic-Cruft'.
Noah Friedman <friedman@splode.com>
parents: 4291
diff changeset
100 ;; of a comment header. Headers starting with `X-' should never be used
50e623c19fff (Bogus-Bureaucratic-Cruft): Changed to `X-Bogus-Bureaucratic-Cruft'.
Noah Friedman <friedman@splode.com>
parents: 4291
diff changeset
101 ;; for any real purpose; this is the way to safely add random headers
50e623c19fff (Bogus-Bureaucratic-Cruft): Changed to `X-Bogus-Bureaucratic-Cruft'.
Noah Friedman <friedman@splode.com>
parents: 4291
diff changeset
102 ;; without invoking the wrath of any program.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
103 ;;
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
104 ;; * Commentary line --- enables Lisp code to find the developer's and
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
105 ;; maintainers' explanations of the package internals.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
106 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
107 ;; * Change log line --- optional, exists to terminate the commentary
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
108 ;; section and start a change-log part, if one exists.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
109 ;;
11035
97da4cb32d03 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7940
diff changeset
110 ;; * Code line --- exists so Lisp can know where commentary and/or
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
111 ;; change-log sections end.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42139
diff changeset
112 ;;
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
113 ;; * Footer line --- marks end-of-file so it can be distinguished from
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
114 ;; an expanded formfeed or the results of truncation.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
115
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
116 ;;; Change Log:
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
117
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
118 ;; Tue Jul 14 23:44:17 1992 ESR
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
119 ;; * Created.
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
120
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
121 ;;; Code:
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
122
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
123 ;;; Variables:
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
124
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
125 (defgroup lisp-mnt nil
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
126 "Utility functions for Emacs Lisp maintainers."
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
127 :prefix "lm-"
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
128 :group 'maint)
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
129
42139
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
130 ;; At least some of these defcustoms should probably be defconsts,
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
131 ;; since they define, or are defined by, the header format. -- fx
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
132
31656
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
133 (defcustom lm-header-prefix "^;+[ \t]+\\(@(#)\\)?[ \t]*\\$?"
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
134 "Prefix that is ignored before the tag.
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
135 For example, you can write the 1st line synopsis string and headers like this
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
136 in your Lisp package:
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
137
38248
569b72179168 (lm-header-prefix): Doc fix. From Pavel Janik <Pavel@Janik.cz>.
Eli Zaretskii <eliz@gnu.org>
parents: 37182
diff changeset
138 ;; @(#) package.el -- package description
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
139 ;;
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
140 ;; @(#) $Maintainer: Person Foo Bar $
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
141
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
142 The @(#) construct is used by unix what(1) and
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
143 then $identifier: doc string $ is used by GNU ident(1)"
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
144 :type 'regexp
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
145 :group 'lisp-mnt)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
146
42139
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
147 (defcustom lm-copyright-prefix "^\\(;+[ \t]\\)+Copyright (C) "
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
148 "Prefix that is ignored before the dates in a copyright.
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
149 Leading comment characters and whitespace should be in regexp group 1."
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
150 :type 'regexp
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
151 :group 'lisp-mnt)
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
152
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
153 (defcustom lm-comment-column 16
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
154 "Column used for placing formatted output."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
155 :type 'integer
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
156 :group 'lisp-mnt)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
157
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
158 (defcustom lm-any-header ".*"
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
159 "Regexp which matches start of any section."
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
160 :type 'regexp
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
161 :group 'lisp-mnt)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
162
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
163 (defcustom lm-commentary-header "Commentary\\|Documentation"
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
164 "Regexp which matches start of documentation section."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
165 :type 'regexp
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
166 :group 'lisp-mnt)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
167
39563
925776635a57 (lm-history-header): Accept `ChangeLog'.
Gerd Moellmann <gerd@gnu.org>
parents: 38248
diff changeset
168 (defcustom lm-history-header "Change ?Log\\|History"
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
169 "Regexp which matches the start of code log section."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
170 :type 'regexp
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20637
diff changeset
171 :group 'lisp-mnt)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
172
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
173 ;;; Functions:
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
174
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
175 ;; These functions all parse the headers of the current buffer
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
176
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
177 (defun lm-get-header-re (header &optional mode)
20637
8a5bdbbc1d6a (lm-get-package-name, lm-header,
Dave Love <fx@gnu.org>
parents: 20127
diff changeset
178 "Return regexp for matching HEADER.
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
179 If called with optional MODE and with value `section',
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
180 return section regexp instead."
31656
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
181 (if (eq mode 'section)
52569
e4693bed89ad (lm-with-file): Don't visit the file,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
182 (concat "^;;;;* \\(" header "\\):[ \t]*$")
e4693bed89ad (lm-with-file): Don't visit the file,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
183 (concat lm-header-prefix "\\(" header "\\)[ \t]*:[ \t]*")))
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
184
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
185 (defun lm-get-package-name ()
20637
8a5bdbbc1d6a (lm-get-package-name, lm-header,
Dave Love <fx@gnu.org>
parents: 20127
diff changeset
186 "Return package name by looking at the first line."
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
187 (save-excursion
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
188 (goto-char (point-min))
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
189 (if (and (looking-at (concat lm-header-prefix))
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
190 (progn (goto-char (match-end 0))
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
191 (looking-at "\\([^\t ]+\\)")
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
192 (match-end 1)))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
193 (match-string-no-properties 1))))
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
194
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
195 (defun lm-section-start (header &optional after)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
196 "Return the buffer location of a given section start marker.
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
197 The HEADER is the section mark string to search for.
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
198 If AFTER is non-nil, return the location of the next line.
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
199 If the given section does not exist, return nil."
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
200 (save-excursion
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
201 (let ((case-fold-search t))
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
202 (goto-char (point-min))
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
203 (if (re-search-forward (lm-get-header-re header 'section) nil t)
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
204 (line-beginning-position (if after 2))))))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
205 (defalias 'lm-section-mark 'lm-section-start)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
206
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
207 (defun lm-section-end (header)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
208 "Return the buffer location of the end of a given section.
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
209 The HEADER is the section string marking the beginning of the
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
210 section. If the given section does not exist, return nil.
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
211
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
212 The end of the section is defined as the beginning of the next
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
213 section of the same level or lower. The function
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
214 `lisp-outline-level' is used to compute the level of a section.
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
215 If no such section exists, return the end of the buffer."
53488
daa5c6e18f62 (lm-section-end): require outline.
Richard M. Stallman <rms@gnu.org>
parents: 52687
diff changeset
216 (require 'outline) ;; for outline-regexp.
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
217 (let ((start (lm-section-start header)))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
218 (when start
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
219 (save-excursion
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
220 (goto-char start)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
221 (let ((level (lisp-outline-level))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
222 (case-fold-search t)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
223 next-section-found)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
224 (beginning-of-line 2)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
225 (while (and (setq next-section-found
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
226 (re-search-forward
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
227 (lm-get-header-re lm-any-header 'section)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
228 nil t))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
229 (> (save-excursion
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
230 (beginning-of-line)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
231 (lisp-outline-level))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
232 level)))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
233 (if next-section-found
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
234 (line-beginning-position)
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
235 (point-max)))))))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
236
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
237 (defsubst lm-code-start ()
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
238 "Return the buffer location of the `Code' start marker."
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
239 (lm-section-start "Code"))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
240 (defalias 'lm-code-mark 'lm-code-start)
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
241
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
242 (defsubst lm-commentary-start ()
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
243 "Return the buffer location of the `Commentary' start marker."
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
244 (lm-section-start lm-commentary-header))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
245 (defalias 'lm-commentary-mark 'lm-commentary-start)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
246
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
247 (defsubst lm-commentary-end ()
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
248 "Return the buffer location of the `Commentary' section end."
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
249 (lm-section-end lm-commentary-header))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
250
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
251 (defsubst lm-history-start ()
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
252 "Return the buffer location of the `History' start marker."
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
253 (lm-section-start lm-history-header))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
254 (defalias 'lm-history-mark 'lm-history-start)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
255
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
256 (defsubst lm-copyright-mark ()
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
257 "Return the buffer location of the `Copyright' line."
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
258 (save-excursion
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
259 (let ((case-fold-search t))
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
260 (goto-char (point-min))
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
261 (if (re-search-forward lm-copyright-prefix nil t)
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
262 (point)))))
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
263
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
264 (defun lm-header (header)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
265 "Return the contents of the header named HEADER."
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
266 (goto-char (point-min))
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
267 (let ((case-fold-search t))
31656
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
268 (when (and (re-search-forward (lm-get-header-re header) (lm-code-mark) t)
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
269 ;; RCS ident likes format "$identifier: data$"
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
270 (looking-at
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
271 (if (save-excursion
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
272 (skip-chars-backward "^$" (match-beginning 0))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
273 (= (point) (match-beginning 0)))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
274 "[^\n]+" "[^$\n]+")))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
275 (match-string-no-properties 0))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
276
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
277 (defun lm-header-multiline (header)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
278 "Return the contents of the header named HEADER, with continuation lines.
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
279 The returned value is a list of strings, one per line."
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
280 (save-excursion
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
281 (goto-char (point-min))
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
282 (let ((res (lm-header header)))
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
283 (when res
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
284 (setq res (list res))
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
285 (forward-line 1)
31656
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
286 (while (and (or (looking-at (concat lm-header-prefix "[\t ]+"))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
287 (and (not (looking-at
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
288 (lm-get-header-re "\\sw\\(\\sw\\|\\s_\\)*")))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
289 (looking-at lm-header-prefix)))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
290 (goto-char (match-end 0))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
291 (looking-at ".+"))
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
292 (setq res (cons (match-string-no-properties 0) res))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
293 (forward-line 1)))
31656
0090ca919308 (lm-get-header-re): Allow spaces between the header and the colon.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28376
diff changeset
294 (nreverse res))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
295
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
296 ;; These give us smart access to the header fields and commentary
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
297
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
298 (defmacro lm-with-file (file &rest body)
52569
e4693bed89ad (lm-with-file): Don't visit the file,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
299 "Execute BODY in a buffer containing the contents of FILE.
52687
fb1ccaa34830 (lm-with-file): When FILE is nil, run BODY in current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 52569
diff changeset
300 If FILE is nil, execute BODY in the current buffer."
110034
c87f89486bb7 Use `declare' in defmacros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107390
diff changeset
301 (declare (indent 1) (debug t))
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
302 (let ((filesym (make-symbol "file")))
52569
e4693bed89ad (lm-with-file): Don't visit the file,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
303 `(let ((,filesym ,file))
52687
fb1ccaa34830 (lm-with-file): When FILE is nil, run BODY in current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 52569
diff changeset
304 (if ,filesym
fb1ccaa34830 (lm-with-file): When FILE is nil, run BODY in current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 52569
diff changeset
305 (with-temp-buffer
fb1ccaa34830 (lm-with-file): When FILE is nil, run BODY in current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 52569
diff changeset
306 (insert-file-contents ,filesym)
93246
6ac54c43b7ca (lm-with-file): Use mode and syntax table for Emacs Lisp, not Lisp.
Johan Bockgård <bojohan@gnu.org>
parents: 87649
diff changeset
307 (emacs-lisp-mode)
52687
fb1ccaa34830 (lm-with-file): When FILE is nil, run BODY in current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 52569
diff changeset
308 ,@body)
64751
5b1a238fcbb4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64085
diff changeset
309 (save-excursion
59572
3cd31d377b69 (lm-with-file): Use Lisp mode in temp buffer.
Richard M. Stallman <rms@gnu.org>
parents: 54500
diff changeset
310 ;; Switching major modes is too drastic, so just switch
93246
6ac54c43b7ca (lm-with-file): Use mode and syntax table for Emacs Lisp, not Lisp.
Johan Bockgård <bojohan@gnu.org>
parents: 87649
diff changeset
311 ;; temporarily to the Emacs Lisp mode syntax table.
6ac54c43b7ca (lm-with-file): Use mode and syntax table for Emacs Lisp, not Lisp.
Johan Bockgård <bojohan@gnu.org>
parents: 87649
diff changeset
312 (with-syntax-table emacs-lisp-mode-syntax-table
59572
3cd31d377b69 (lm-with-file): Use Lisp mode in temp buffer.
Richard M. Stallman <rms@gnu.org>
parents: 54500
diff changeset
313 ,@body))))))
3cd31d377b69 (lm-with-file): Use Lisp mode in temp buffer.
Richard M. Stallman <rms@gnu.org>
parents: 54500
diff changeset
314
42139
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
315 ;; Fixme: Probably this should be amalgamated with copyright.el; also
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
316 ;; we need a check for ranges in copyright years.
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
317
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
318 (defun lm-crack-copyright (&optional file)
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
319 "Return the copyright holder, and a list of copyright years.
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
320 Use the current buffer if FILE is nil.
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
321 Return argument is of the form (\"HOLDER\" \"YEAR1\" ... \"YEARN\")"
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
322 (lm-with-file file
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
323 (goto-char (lm-copyright-mark))
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
324 (let ((holder nil)
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
325 (years nil)
42139
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
326 (start (point))
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
327 (end (line-end-position)))
42139
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
328 ;; Cope with multi-line copyright `lines'. Assume the second
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
329 ;; line is indented (with the same commenting style).
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
330 (save-excursion
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
331 (beginning-of-line 2)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
332 (let ((str (concat (match-string-no-properties 1) "[ \t]+")))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
333 (beginning-of-line)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
334 (while (looking-at str)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
335 (setq end (line-end-position))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
336 (beginning-of-line 2))))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
337 ;; Make a single line and parse that.
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
338 (let ((buff (current-buffer)))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
339 (with-temp-buffer
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
340 (insert-buffer-substring buff start end)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
341 (goto-char (point-min))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
342 (while (re-search-forward "^;+[ \t]+" nil t)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
343 (replace-match ""))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
344 (goto-char (point-min))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
345 (while (re-search-forward " *\n" nil t)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
346 (replace-match " "))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
347 (goto-char (point-min))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
348 (while (re-search-forward "\\([0-9]+\\),? +" nil t)
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
349 (setq years (cons (match-string-no-properties 1) years)))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
350 (if (looking-at ".*$")
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
351 (setq holder (match-string-no-properties 0)))))
5258f3b81740 (lm-copyright-prefix): Group the leader.
Dave Love <fx@gnu.org>
parents: 41918
diff changeset
352 (cons holder (nreverse years)))))
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
353
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
354 (defun lm-summary (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
355 "Return the one-line summary of file FILE, or current buffer if FILE is nil."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
356 (lm-with-file file
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
357 (goto-char (point-min))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
358 (if (and (looking-at lm-header-prefix)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
359 (progn (goto-char (match-end 0))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
360 (looking-at "[^ ]+[ \t]+--+[ \t]+\\(.*\\)")))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
361 (let ((summary (match-string-no-properties 1)))
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
362 ;; Strip off -*- specifications.
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
363 (if (string-match "[ \t]*-\\*-.*-\\*-" summary)
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
364 (substring summary 0 (match-beginning 0))
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
365 summary)))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
366
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
367 (defun lm-crack-address (x)
20637
8a5bdbbc1d6a (lm-get-package-name, lm-header,
Dave Love <fx@gnu.org>
parents: 20127
diff changeset
368 "Split up an email address X into full name and real email address.
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
369 The value is a cons of the form (FULLNAME . ADDRESS)."
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
370 (cond ((string-match "\\(.+\\) [(<]\\(\\S-+@\\S-+\\)[>)]" x)
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
371 (cons (match-string 1 x)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
372 (match-string 2 x)))
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
373 ((string-match "\\(\\S-+@\\S-+\\) [(<]\\(.*\\)[>)]" x)
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
374 (cons (match-string 2 x)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
375 (match-string 1 x)))
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
376 ((string-match "\\S-+@\\S-+" x)
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
377 (cons nil x))
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
378 (t
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
379 (cons x nil))))
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
380
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
381 (defun lm-authors (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
382 "Return the author list of file FILE, or current buffer if FILE is nil.
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
383 Each element of the list is a cons; the car is the full name,
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
384 the cdr is an email address."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
385 (lm-with-file file
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
386 (let ((authorlist (lm-header-multiline "author")))
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
387 (mapcar 'lm-crack-address authorlist))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
388
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
389 (defun lm-maintainer (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
390 "Return the maintainer of file FILE, or current buffer if FILE is nil.
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
391 The return value has the form (NAME . ADDRESS)."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
392 (lm-with-file file
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
393 (let ((maint (lm-header "maintainer")))
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
394 (if maint
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
395 (lm-crack-address maint)
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
396 (car (lm-authors))))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
397
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
398 (defun lm-creation-date (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
399 "Return the created date given in file FILE, or current buffer if FILE is nil."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
400 (lm-with-file file
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
401 (lm-header "created")))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
402
28376
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
403 (defun lm-last-modified-date (&optional file iso-date)
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
404 "Return the modify-date given in file FILE, or current buffer if FILE is nil.
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
405 ISO-DATE non-nil means return the date in ISO 8601 format."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
406 (lm-with-file file
28376
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
407 (when (progn (goto-char (point-min))
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
408 (re-search-forward
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
409 "\\$[I]d: [^ ]+ [^ ]+ \\([^/]+\\)/\\([^/]+\\)/\\([^ ]+\\) "
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
410 (lm-code-mark) t))
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
411 (let ((dd (match-string 3))
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
412 (mm (match-string 2))
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
413 (yyyy (match-string 1)))
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
414 (if iso-date
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
415 (format "%s-%s-%s" yyyy mm dd)
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
416 (format "%s %s %s"
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
417 dd
62402
a7e02ef1e3d6 Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents: 59572
diff changeset
418 (nth (string-to-number mm)
28376
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
419 '("" "Jan" "Feb" "Mar" "Apr" "May" "Jun"
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
420 "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"))
38b2af227738 (lm-last-modified-date): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27786
diff changeset
421 yyyy))))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
422
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
423 (defun lm-version (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
424 "Return the version listed in file FILE, or current buffer if FILE is nil.
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
425 This can be found in an RCS or SCCS header."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
426 (lm-with-file file
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
427 (or (lm-header "version")
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
428 (let ((header-max (lm-code-mark)))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
429 (goto-char (point-min))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
430 (cond
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
431 ;; Look for an RCS header
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
432 ((re-search-forward "\\$[I]d: [^ ]+ \\([^ ]+\\) " header-max t)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
433 (match-string-no-properties 1))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
434 ((re-search-forward "\\$Revision: +\\([^ ]+\\) " header-max t)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
435 (match-string-no-properties 1))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
436 ;; Look for an SCCS header
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
437 ((re-search-forward
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
438 (concat
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
439 (regexp-quote "@(#)")
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
440 (regexp-quote (file-name-nondirectory (buffer-file-name)))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
441 "\t\\([012345679.]*\\)")
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
442 header-max t)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
443 (match-string-no-properties 1)))))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
444
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
445 (defun lm-keywords (&optional file)
106066
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
446 "Return the keywords given in file FILE, or current buffer if FILE is nil.
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
447 The return is a `downcase'-ed string, or nil if no keywords
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
448 header. Multi-line keywords are joined up with a space between
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
449 each line."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
450 (lm-with-file file
106066
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
451 (let ((keywords (lm-header-multiline "keywords")))
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
452 (and keywords
4b7353091b4a * emacs-lisp/lisp-mnt.el (lm-keywords): Allow multi-line keywords.
Kevin Ryde <user42@zip.com.au>
parents: 105372
diff changeset
453 (mapconcat 'downcase keywords " ")))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
454
37182
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
455 (defun lm-keywords-list (&optional file)
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
456 "Return list of keywords given in file FILE."
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
457 (let ((keywords (lm-keywords file)))
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
458 (if keywords
107390
bb307bf2e752 Fix keywords.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
459 (if (string-match-p "," keywords)
bb307bf2e752 Fix keywords.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
460 (split-string keywords ",[ \t\n]*" t)
bb307bf2e752 Fix keywords.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
461 (split-string keywords "[ \t\n]+" t)))))
37182
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
462
54500
7a30ab50eb0b (lm-keywords-finder-p): Use defvar rather than with-no-warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53864
diff changeset
463 (defvar finder-known-keywords)
37182
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
464 (defun lm-keywords-finder-p (&optional file)
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
465 "Return non-nil if any keywords in FILE are known to finder."
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
466 (require 'finder)
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
467 (let ((keys (lm-keywords-list file)))
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
468 (catch 'keyword-found
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
469 (while keys
54500
7a30ab50eb0b (lm-keywords-finder-p): Use defvar rather than with-no-warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53864
diff changeset
470 (if (assoc (intern (car keys)) finder-known-keywords)
37182
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
471 (throw 'keyword-found t))
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
472 (setq keys (cdr keys)))
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
473 nil)))
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
474
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
475 (defun lm-adapted-by (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
476 "Return the adapted-by names in file FILE, or current buffer if FILE is nil.
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
477 This is the name of the person who cleaned up this package for
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
478 distribution."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
479 (lm-with-file file
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
480 (lm-header "adapted-by")))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
481
2528
df68ddbcc2f1 (lm-commentary-region): Gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2352
diff changeset
482 (defun lm-commentary (&optional file)
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
483 "Return the commentary in file FILE, or current buffer if FILE is nil.
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
484 Return the value as a string. In the file, the commentary
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
485 section starts with the tag `Commentary' or `Documentation' and
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
486 ends just before the next section. If the commentary section is
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
487 absent, return nil."
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
488 (lm-with-file file
51155
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
489 (let ((start (lm-commentary-start)))
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
490 (when start
c10e341483da Make the description of the library more
Lute Kamstra <lute@gnu.org>
parents: 49598
diff changeset
491 (buffer-substring-no-properties start (lm-commentary-end))))))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
492
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
493 ;;; Verification and synopses
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
494
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
495 (defun lm-insert-at-column (col &rest strings)
20637
8a5bdbbc1d6a (lm-get-package-name, lm-header,
Dave Love <fx@gnu.org>
parents: 20127
diff changeset
496 "Insert, at column COL, list of STRINGS."
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
497 (if (> (current-column) col) (insert "\n"))
20127
75c24766a23a picture.el no longer required.
Karl Heuer <kwzh@gnu.org>
parents: 18401
diff changeset
498 (move-to-column col t)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
499 (apply 'insert strings))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
500
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
501 (defun lm-verify (&optional file showok verbose non-fsf-ok)
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
502 "Check that the current buffer (or FILE if given) is in proper format.
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
503 If FILE is a directory, recurse on its files and generate a report in a
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
504 temporary buffer. In that case, the optional argument SHOWOK
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
505 says display \"OK\" in temp buffer for files that have no problems.
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
506
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
507 Optional argument VERBOSE specifies verbosity level.
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
508 Optional argument NON-FSF-OK if non-nil means a non-FSF
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
509 copyright notice is allowed."
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
510 (interactive (list nil nil t))
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
511 (let* ((ret (and verbose "Ok"))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
512 name)
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
513 (if (and file (file-directory-p file))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
514 (setq ret
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
515 (with-temp-buffer
87208
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
516 (dolist (f (directory-files file nil "\\.el\\'")
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
517 (buffer-string))
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
518 (when (file-regular-p f)
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
519 (let ((status (lm-verify f)))
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
520 (insert f ":")
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
521 (if status
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
522 (lm-insert-at-column lm-comment-column status
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
523 "\n")
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
524 (if showok
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
525 (lm-insert-at-column lm-comment-column
87e24ce4f26a (lm-verify): Make it work with
David Kastrup <dak@gnu.org>
parents: 87170
diff changeset
526 "OK\n"))))))))
26690
1006a8324029 (lm-header-multiline): fix spurious use of `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24219
diff changeset
527 (lm-with-file file
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
528 (setq name (lm-get-package-name))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
529 (setq ret
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
530 (cond
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
531 ((null name)
53864
8589159e3bd8 (lm-verify): Remove useless use of
Andreas Schwab <schwab@suse.de>
parents: 53488
diff changeset
532 "Can't find package name")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
533 ((not (lm-authors))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
534 "`Author:' tag missing")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
535 ((not (lm-maintainer))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
536 "`Maintainer:' tag missing")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
537 ((not (lm-summary))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
538 "Can't find the one-line summary description")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
539 ((not (lm-keywords))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
540 "`Keywords:' tag missing")
37182
c29d2430fdd9 (lm-keywords-list, lm-keywords-finder-p):
Gerd Moellmann <gerd@gnu.org>
parents: 34945
diff changeset
541 ((not (lm-keywords-finder-p))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
542 "`Keywords:' has no valid finder keywords (see `finder-known-keywords')")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
543 ((not (lm-commentary-mark))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
544 "Can't find a 'Commentary' section marker")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
545 ((not (lm-history-mark))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
546 "Can't find a 'History' section marker")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
547 ((not (lm-code-mark))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
548 "Can't find a 'Code' section marker")
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
549 ((progn
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
550 (goto-char (point-max))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
551 (not
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
552 (re-search-backward
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
553 (concat "^;;;[ \t]+" name "[ \t]+ends here[ \t]*$"
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
554 "\\|^;;;[ \t]+ End of file[ \t]+" name)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
555 nil t)))
53864
8589159e3bd8 (lm-verify): Remove useless use of
Andreas Schwab <schwab@suse.de>
parents: 53488
diff changeset
556 "Can't find the footer line")
34945
99252c8e0152 (lm-copyright-prefix): New Variable.
Gerd Moellmann <gerd@gnu.org>
parents: 34567
diff changeset
557 ((not (and (lm-copyright-mark) (lm-crack-copyright)))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
558 "Can't find a valid copyright notice")
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
559 ((not (or non-fsf-ok
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
560 (string-match "Free Software Foundation"
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
561 (car (lm-crack-copyright)))))
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
562 "Copyright holder is not the Free Software Foundation")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
563 (t
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
564 ret)))))
41917
67cd4c7204bc (lm-verify): New arg NON-FSF-OK.
Richard M. Stallman <rms@gnu.org>
parents: 39563
diff changeset
565 (if verbose
87170
e50a2e215441 * erc-stamp.el (erc-echo-timestamp):
David Kastrup <dak@gnu.org>
parents: 78217
diff changeset
566 (message "%s" ret))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
567 ret))
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
568
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
569 (defun lm-synopsis (&optional file showall)
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
570 "Generate a synopsis listing for the buffer or the given FILE if given.
14512
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
571 If FILE is a directory, recurse on its files and generate a report in
e7206013c310 Change defconst into defvar. Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14505
diff changeset
572 a temporary buffer. If SHOWALL is non-nil, also generate a line for files
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
573 which do not include a recognizable synopsis."
14501
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
574 (interactive
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
575 (list
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
576 (read-file-name "Synopsis for (file or dir): ")))
6ac4623cdc87 (lm-header-prefix): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14492
diff changeset
577
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
578 (if (and file (file-directory-p file))
51395
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
579 (with-output-to-temp-buffer "*Synopsis*"
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
580 (set-buffer standard-output)
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
581 (dolist (f (directory-files file nil ".*\\.el\\'"))
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
582 (let ((syn (lm-synopsis (expand-file-name f file))))
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
583 (when (or syn showall)
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
584 (insert f ":")
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
585 (lm-insert-at-column lm-comment-column (or syn "NA") "\n")))))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
586 (save-excursion
51395
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
587 (let ((must-kill (and file (not (get-file-buffer file)))))
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
588 (when file (find-file file))
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
589 (prog1
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
590 (if (called-interactively-p 'interactive)
51395
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
591 (message "%s" (lm-summary))
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
592 (lm-summary))
ef9e066bc6f2 (lm-synopsis): Use relative filenames correctly. Show the synopsis to
Lute Kamstra <lute@gnu.org>
parents: 51155
diff changeset
593 (when must-kill (kill-buffer (current-buffer))))))))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
594
95627
51a4069c3233 Commentary fixes.
Glenn Morris <rgm@gnu.org>
parents: 94655
diff changeset
595 (defvar report-emacs-bug-address)
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
596
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
597 (defun lm-report-bug (topic)
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
598 "Report a bug in the package currently being visited to its maintainer.
20637
8a5bdbbc1d6a (lm-get-package-name, lm-header,
Dave Love <fx@gnu.org>
parents: 20127
diff changeset
599 Prompts for bug subject TOPIC. Leaves you in a mail buffer."
2352
8c8fe9da1f5e (lm-last-modified-date) Fixed return bug.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 879
diff changeset
600 (interactive "sBug Subject: ")
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
601 (require 'emacsbug)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
602 (let ((package (lm-get-package-name))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
603 (addr (lm-maintainer))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
604 (version (lm-version)))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
605 (compose-mail (if addr
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
606 (concat (car addr) " <" (cdr addr) ">")
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
607 report-emacs-bug-address)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
608 topic)
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
609 (goto-char (point-max))
27786
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
610 (insert "\nIn " package)
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
611 (if version
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
612 (insert " version " version))
2d57dfc8a2a4 Don't require emacsbug at top level.
Dave Love <fx@gnu.org>
parents: 26690
diff changeset
613 (newline 2)
65590
c45ae2a74f0f message format spec fixes, commit # 9
Deepak Goel <deego@gnufans.org>
parents: 64751
diff changeset
614 (message "%s"
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
615 (substitute-command-keys "Type \\[mail-send] to send bug report."))))
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
616
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
617 (provide 'lisp-mnt)
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
618
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93246
diff changeset
619 ;; arch-tag: fa3c5ab4-a37b-4e46-b7cf-b6d78b90e69e
879
6dc5b7273a07 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
620 ;;; lisp-mnt.el ends here