aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReiner Steib2007-05-10 18:44:49 +0000
committerReiner Steib2007-05-10 18:44:49 +0000
commit596e5f72f05531141d62d64b6d586ba7ee59db0a (patch)
tree47e4152afe02fcd1c702d613b9e54705f27ff715
parenta85126764b5adf12e0e92527736d11115070b6f3 (diff)
downloademacs-596e5f72f05531141d62d64b6d586ba7ee59db0a.tar.gz
emacs-596e5f72f05531141d62d64b6d586ba7ee59db0a.zip
Remove the description comment (nndiary is now properly documented in the Gnus
manual). Fix the spelling of "Back End".
-rw-r--r--lisp/gnus/ChangeLog6
-rw-r--r--lisp/gnus/gnus-diary.el69
-rw-r--r--lisp/gnus/nndiary.el183
3 files changed, 45 insertions, 213 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index b02dc6c2f8e..89cfbc3cc7a 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,9 @@
12007-05-09 Didier Verna <didier@xemacs.org>
2
3 * gnus-diary.el, nndiary.el: Remove the description comment (nndiary is
4 now properly documented in the Gnus manual). Fix the spelling of "Back
5 End".
6
12007-04-19 Katsumi Yamaoka <yamaoka@jpl.org> 72007-04-19 Katsumi Yamaoka <yamaoka@jpl.org>
2 8
3 * gnus-art.el (gnus-mime-strip-charset-parameters): New function. 9 * gnus-art.el (gnus-mime-strip-charset-parameters): New function.
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index be4c73a2b4f..a7f7ee65ec3 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -1,4 +1,4 @@
1;;; gnus-diary.el --- Wrapper around the NNDiary Gnus backend 1;;; gnus-diary.el --- Wrapper around the NNDiary Gnus back end
2 2
3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4;; 2006, 2007 Free Software Foundation, Inc. 4;; 2006, 2007 Free Software Foundation, Inc.
@@ -33,63 +33,8 @@
33;; Description: 33;; Description:
34;; =========== 34;; ===========
35 35
36;; Gnus-Diary is a wrapper around the NNDiary Gnus backend. It is here to 36;; gnus-diary is a utility toolkit used on top of the nndiary back end. It is
37;; make your nndiary-user life easier in different ways. So, you don't have 37;; now fully documented in the Gnus manual.
38;; to use it if you don't want to. But, really, you should.
39
40;; Gnus-Diary offers the following features on top of the NNDiary backend:
41
42;; - A nice summary line format:
43;; Displaying diary messages in standard summary line format (usually
44;; something like "<From Joe>: <Subject>") is pretty useless. Most of the
45;; time, you're the one who wrote the message, and you mostly want to see
46;; the event's date. Gnus-Diary offers you a nice summary line format
47;; which will do this. By default, a summary line will appear like this:
48;;
49;; <Event Date>: <Subject> <Remaining time>
50;;
51;; for example, here's how Joe's birthday is displayed in my
52;; "nndiary:birhdays" summary buffer (the message is expirable, but will
53;; never be deleted, as it specifies a regular event):
54;;
55;; E Sat, Sep 22 01, 12:00: Joe's birthday (in 6 months, 1 week)
56
57;; - More article sorting functions:
58;; Gnus-Diary adds a new sorting function called
59;; `gnus-summary-sort-by-schedule'. This function lets you organize your
60;; diary summary buffers from the closest event to the farthest one.
61
62;; - Automatic generation of diary group parameters:
63;; When you create a new diary group, or visit one, Gnus-Diary checks your
64;; group parameters, and if needed, sets the summary line format to the
65;; diary-specific value, adds the diary-specific sorting functions, and
66;; also adds the different `X-Diary-*' headers to the group's
67;; posting-style. It is then easier to send a diary message, because if
68;; you use `C-u a' or `C-u m' on a diary group to prepare a message, these
69;; headers will be inserted automatically (but not filled with proper
70;; values yet).
71
72;; - An interactive mail-to-diary convertion function:
73;; The function `gnus-diary-check-message' ensures that the current message
74;; contains all the required diary headers, and prompts you for values /
75;; correction if needed. This function is hooked in the nndiary backend so
76;; that moving an article to an nndiary group will trigger it
77;; automatically. It is also bound to `C-c D c' in message-mode and
78;; article-edit-mode in order to ease the process of converting a usual
79;; mail to a diary one. This function takes a prefix argument which will
80;; force prompting of all diary headers, regardless of their
81;; presence/validity. That way, you can very easily reschedule a diary
82;; message for instance.
83
84
85;; Usage:
86;; =====
87
88;; 0/ Don't use any `gnus-user-format-function-[d|D]'. Gnus-Diary provides
89;; both of these (sorry if you used them before).
90;; 1/ Add '(require 'gnus-diary) to your gnusrc file.
91;; 2/ Customize your gnus-diary options to suit your needs.
92
93 38
94 39
95;; Bugs / Todo: 40;; Bugs / Todo:
@@ -103,7 +48,7 @@
103(require 'gnus-art) 48(require 'gnus-art)
104 49
105(defgroup gnus-diary nil 50(defgroup gnus-diary nil
106 "Utilities on top of the nndiary backend for Gnus." 51 "Utilities on top of the nndiary back end for Gnus."
107 :version "22.1" 52 :version "22.1"
108 :group 'gnus) 53 :group 'gnus)
109 54
@@ -136,7 +81,7 @@ There are currently two built-in format functions:
136 :group 'gnus-diary) 81 :group 'gnus-diary)
137 82
138(defconst gnus-diary-version nndiary-version 83(defconst gnus-diary-version nndiary-version
139 "Current Diary backend version.") 84 "Current Diary back end version.")
140 85
141 86
142;; Compatibility functions ================================================== 87;; Compatibility functions ==================================================
@@ -334,7 +279,7 @@ Optional prefix (or REVERSE argument) means sort in reverse order."
334 )) 279 ))
335 280
336;; Called when a group is subscribed. This is needed because groups created 281;; Called when a group is subscribed. This is needed because groups created
337;; because of mail splitting are *not* created with the backend function. 282;; because of mail splitting are *not* created with the back end function.
338;; Thus, `nndiary-request-create-group-hooks' is inoperative. 283;; Thus, `nndiary-request-create-group-hooks' is inoperative.
339(defun gnus-diary-maybe-update-group-parameters (group) 284(defun gnus-diary-maybe-update-group-parameters (group)
340 (when (eq (car (gnus-find-method-for-group group)) 'nndiary) 285 (when (eq (car (gnus-find-method-for-group group)) 'nndiary)
@@ -452,7 +397,7 @@ If ARG (or prefix) is non-nil, force prompting for all fields."
452;; The end ================================================================== 397;; The end ==================================================================
453 398
454(defun gnus-diary-version () 399(defun gnus-diary-version ()
455 "Current Diary backend version." 400 "Current Diary back end version."
456 (interactive) 401 (interactive)
457 (message "NNDiary version %s" nndiary-version)) 402 (message "NNDiary version %s" nndiary-version))
458 403
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index 249a4fdb1ba..483c2ee1070 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -1,4 +1,4 @@
1;;; nndiary.el --- A diary backend for Gnus 1;;; nndiary.el --- A diary back end for Gnus
2 2
3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
4;; 2005, 2006, 2007 Free Software Foundation, Inc. 4;; 2005, 2006, 2007 Free Software Foundation, Inc.
@@ -33,127 +33,8 @@
33;; Description: 33;; Description:
34;; =========== 34;; ===========
35 35
36;; This package implements NNDiary, a diary backend for Gnus. NNDiary is a 36;; nndiary is a mail back end designed to handle mails as diary event
37;; mail backend, pretty similar to nnml in its functionnning (it has all the 37;; reminders. It is now fully documented in the Gnus manual.
38;; features of nnml, actually), but in which messages are treated as event
39;; reminders.
40
41;; Here is a typical scenario:
42;; - You've got a date with Andy Mc Dowell or Bruce Willis (select according
43;; to your sexual preference) in one month. You don't want to forget it.
44;; - Send a (special) diary message to yourself (see below).
45;; - Forget all about it and keep on getting and reading new mail, as usual.
46;; - From time to time, as you type `g' in the group buffer and as the date
47;; is getting closer, the message will pop up again, just like if it were
48;; new and unread.
49;; - Read your "new" messages, this one included, and start dreaming of the
50;; night you're gonna have.
51;; - Once the date is over (you actually fell asleep just after dinner), the
52;; message will be automatically deleted if it is marked as expirable.
53
54;; Some more notes on the diary backend:
55;; - NNDiary is a *real* mail backend. You *really* send real diary
56;; messsages. This means for instance that you can give appointements to
57;; anybody (provided they use Gnus and NNDiary) by sending the diary message
58;; to them as well.
59;; - However, since NNDiary also has a 'request-post method, you can also
60;; `C-u a' instead of `C-u m' on a diary group and the message won't actually
61;; be sent; just stored in the group.
62;; - The events you want to remember need not be punctual. You can set up
63;; reminders for regular dates (like once each week, each monday at 13:30
64;; and so on). Diary messages of this kind will never be deleted (unless
65;; you do it explicitely). But that, you guessed.
66
67
68;; Usage:
69;; =====
70
71;; 1/ NNDiary has two modes of operation: traditional (the default) and
72;; autonomous.
73;; a/ In traditional mode, NNDiary does not get new mail by itself. You
74;; have to move mails from your primary mail backend to nndiary
75;; groups.
76;; b/ In autonomous mode, NNDiary retrieves its own mail and handles it
77;; independantly of your primary mail backend. To use NNDiary in
78;; autonomous mode, you have several things to do:
79;; i/ Put (setq nndiary-get-new-mail t) in your gnusrc file.
80;; ii/ Diary messages contain several `X-Diary-*' special headers.
81;; You *must* arrange that these messages be split in a private
82;; folder *before* Gnus treat them. You need this because Gnus
83;; is not able yet to manage multiple backends for mail
84;; retrieval. Getting them from a separate source will
85;; compensate this misfeature to some extent, as we will see.
86;; As an example, here's my procmailrc entry to store diary files
87;; in ~/.nndiary (the default nndiary mail source file):
88;;
89;; :0 HD :
90;; * ^X-Diary
91;; .nndiary
92;; iii/ Customize the variables `nndiary-mail-sources' and
93;; `nndiary-split-methods'. These are replacements for the usual
94;; mail sources and split methods which, and will be used in
95;; autonomous mode. `nndiary-mail-sources' defaults to
96;; '(file :path "~/.nndiary").
97;; 2/ Install nndiary somewhere Emacs / Gnus can find it. Normally, you
98;; *don't* have to '(require 'nndiary) anywhere. Gnus will do so when
99;; appropriate as long as nndiary is somewhere in the load path.
100;; 3/ Now, customize the rest of nndiary. In particular, you should
101;; customize `nndiary-reminders', the list of times when you want to be
102;; reminded of your appointements (e.g. 3 weeks before, then 2 days
103;; before, then 1 hour before and that's it).
104;; 4/ You *must* use the group timestamp feature of Gnus. This adds a
105;; timestamp to each groups' parameters (please refer to the Gnus
106;; documentation ("Group Timestamp" info node) to see how it's done.
107;; 5/ Once you have done this, you may add a permanent nndiary virtual server
108;; (something like '(nndiary "")) to your `gnus-secondary-select-methods'.
109;; Yes, this server will be able to retrieve mails and split them when you
110;; type `g' in the group buffer, just as if it were your only mail backend.
111;; This is the benefit of using a private folder.
112;; 6/ Hopefully, almost everything (see the TODO section below) will work as
113;; expected when you restart Gnus: in the group buffer, `g' and `M-g' will
114;; also get your new diary mails, `F' will find your new diary groups etc.
115
116
117;; How to send diary messages:
118;; ==========================
119
120;; There are 7 special headers in diary messages. These headers are of the
121;; form `X-Diary-<something>', the <something> being one of `Minute', `Hour',
122;; `Dom', `Month', `Year', `Time-Zone' and `Dow'. `Dom' means "Day of Month",
123;; and `dow' means "Day of Week". These headers actually behave like crontab
124;; specifications and define the event date(s).
125
126;; For all headers but the `Time-Zone' one, a header value is either a
127;; star (meaning all possible values), or a list of fields (separated by a
128;; comma). A field is either an integer, or a range. A range is two integers
129;; separated by a dash. Possible integer values are 0-59 for `Minute', 0-23
130;; for `Hour', 1-31 for `Dom', `1-12' for Month, above 1971 for `Year' and 0-6
131;; for `Dow' (0 = sunday). As a special case, a star in either `Dom' or `Dow'
132;; doesn't mean "all possible values", but "use only the other field". Note
133;; that if both are star'ed, the use of either one gives the same result :-),
134
135;; The `Time-Zone' header is special in that it can have only one value (you
136;; bet ;-).
137;; A star doesn't mean "all possible values" (because it has no sense), but
138;; "the current local time zone".
139
140;; As an example, here's how you would say "Each Monday and each 1st of month,
141;; at 12:00, 20:00, 21:00, 22:00, 23:00 and 24:00, from 1999 to 2010" (I let
142;; you find what to do then):
143;;
144;; X-Diary-Minute: 0
145;; X-Diary-Hour: 12, 20-24
146;; X-Diary-Dom: 1
147;; X-Diary-Month: *
148;; X-Diary-Year: 1999-2010
149;; X-Diary-Dow: 1
150;; X-Diary-Time-Zone: *
151;;
152;;
153;; Sending a diary message is not different from sending any other kind of
154;; mail, except that such messages are identified by the presence of these
155;; special headers.
156
157 38
158 39
159;; Bugs / Todo: 40;; Bugs / Todo:
@@ -161,43 +42,43 @@
161 42
162;; * Respooling doesn't work because contrary to the request-scan function, 43;; * Respooling doesn't work because contrary to the request-scan function,
163;; Gnus won't allow me to override the split methods when calling the 44;; Gnus won't allow me to override the split methods when calling the
164;; respooling backend functions. 45;; respooling back end functions.
165;; * There's a bug in the time zone mechanism with variable TZ locations. 46;; * There's a bug in the time zone mechanism with variable TZ locations.
166;; * We could allow a keyword like `ask' in X-Diary-* headers, that would mean 47;; * We could allow a keyword like `ask' in X-Diary-* headers, that would mean
167;; "ask for value upon reception of the message". 48;; "ask for value upon reception of the message".
168;; * We could add an optional header X-Diary-Reminders to specify a special 49;; * We could add an optional header X-Diary-Reminders to specify a special
169;; reminders value for this message. Suggested by Jody Klymak. 50;; reminders value for this message. Suggested by Jody Klymak.
170;; * We should check messages validity in other circumstances than just 51;; * We should check messages validity in other circumstances than just
171;; moving an article from sonwhere else (request-accept). For instance, when 52;; moving an article from somewhere else (request-accept). For instance,
172;; editing / saving and so on. 53;; when editing / saving and so on.
173 54
174 55
175;; Remarks: 56;; Remarks:
176;; ======= 57;; =======
177 58
178;; * nnoo. 59;; * nnoo. NNDiary is very similar to nnml. This makes the idea of using nnoo
179;; NNDiary is very similar to nnml. This makes the idea of using nnoo (to 60;; (to derive nndiary from nnml) natural. However, my experience with nnoo
180;; derive nndiary from nnml) natural. However, my experience with nnoo is 61;; is that for reasonably complex back ends like this one, noo is a burden
181;; that for reasonably complex backends like this one, noo is a burden 62;; rather than an help. It's tricky to use, not everything can be inherited,
182;; rather than an help. It's tricky to use, not everything can be 63;; what can be inherited and when is not very clear, and you've got to be
183;; inherited, what can be inherited and when is not very clear, and you've 64;; very careful because a little mistake can fuck up your other back ends,
184;; got to be very careful because a little mistake can fuck up your your 65;; especially because their variables will be use instead of your real ones.
185;; other backends, especially because their variables will be use instead of 66;; Finally, I found it easier to just clone the needed parts of nnml, and
186;; your real ones. Finally, I found it easier to just clone the needed 67;; tracking nnml updates is not a big deal.
187;; parts of nnml, and tracking nnml updates is not a big deal.
188 68
189;; IMHO, nnoo is actually badly designed. A much simpler, and yet more 69;; IMHO, nnoo is actually badly designed. A much simpler, and yet more
190;; powerful one would be to make *real* functions and variables for a new 70;; powerful one would be to make *real* functions and variables for a new
191;; backend based on another. Lisp is a reflexive language so that's a very 71;; back end based on another. Lisp is a reflexive language so that's a very
192;; easy thing to do: inspect the function's form, replace occurences of 72;; easy thing to do: inspect the function's form, replace occurences of
193;; <nnfrom> (even in strings) with <nnto>, and you're done. 73;; <nnfrom> (even in strings) with <nnto>, and you're done.
194 74
195;; * nndiary-get-new-mail, nndiary-mail-source and nndiary-split-methods: 75;; * nndiary-get-new-mail, nndiary-mail-source and nndiary-split-methods:
196;; NNDiary has some experimental parts, in the sense Gnus normally uses only 76;; NNDiary has some experimental parts, in the sense Gnus normally uses only
197;; one mail backends for mail retreival and splitting. This backend is also 77;; one mail back ends for mail retreival and splitting. This back end is
198;; an attempt to make it behave differently. For Gnus developpers: as you 78;; also an attempt to make it behave differently. For Gnus developpers: as
199;; can see if you snarf into the code, that was not a very difficult thing 79;; you can see if you snarf into the code, that was not a very difficult
200;; to do. Something should be done about the respooling breakage though. 80;; thing to do. Something should be done about the respooling breakage
81;; though.
201 82
202 83
203;;; Code: 84;;; Code:
@@ -220,10 +101,10 @@
220 (apply #'error args)))) 101 (apply #'error args))))
221 102
222 103
223;; Backend behavior customization =========================================== 104;; Back End behavior customization ===========================================
224 105
225(defgroup nndiary nil 106(defgroup nndiary nil
226 "The Gnus Diary backend." 107 "The Gnus Diary back end."
227 :version "22.1" 108 :version "22.1"
228 :group 'gnus-diary) 109 :group 'gnus-diary)
229 110
@@ -326,27 +207,27 @@ The hooks will be called with the article in the current buffer."
326 :type 'boolean) 207 :type 'boolean)
327 208
328 209
329;; Backend declaration ====================================================== 210;; Back End declaration ======================================================
330 211
331;; Well, most of this is nnml clonage. 212;; Well, most of this is nnml clonage.
332 213
333(nnoo-declare nndiary) 214(nnoo-declare nndiary)
334 215
335(defvoo nndiary-directory (nnheader-concat gnus-directory "diary/") 216(defvoo nndiary-directory (nnheader-concat gnus-directory "diary/")
336 "Spool directory for the nndiary backend.") 217 "Spool directory for the nndiary back end.")
337 218
338(defvoo nndiary-active-file 219(defvoo nndiary-active-file
339 (expand-file-name "active" nndiary-directory) 220 (expand-file-name "active" nndiary-directory)
340 "Active file for the nndiary backend.") 221 "Active file for the nndiary back end.")
341 222
342(defvoo nndiary-newsgroups-file 223(defvoo nndiary-newsgroups-file
343 (expand-file-name "newsgroups" nndiary-directory) 224 (expand-file-name "newsgroups" nndiary-directory)
344 "Newsgroups description file for the nndiary backend.") 225 "Newsgroups description file for the nndiary back end.")
345 226
346(defvoo nndiary-get-new-mail nil 227(defvoo nndiary-get-new-mail nil
347 "Whether nndiary gets new mail and split it. 228 "Whether nndiary gets new mail and split it.
348Contrary to traditional mail backends, this variable can be set to t 229Contrary to traditional mail back ends, this variable can be set to t
349even if your primary mail backend also retreives mail. In such a case, 230even if your primary mail back end also retreives mail. In such a case,
350NDiary uses its own mail-sources and split-methods.") 231NDiary uses its own mail-sources and split-methods.")
351 232
352(defvoo nndiary-nov-is-evil nil 233(defvoo nndiary-nov-is-evil nil
@@ -367,10 +248,10 @@ all. This may very well take some time.")
367 248
368 249
369(defconst nndiary-version "0.2-b14" 250(defconst nndiary-version "0.2-b14"
370 "Current Diary backend version.") 251 "Current Diary back end version.")
371 252
372(defun nndiary-version () 253(defun nndiary-version ()
373 "Current Diary backend version." 254 "Current Diary back end version."
374 (interactive) 255 (interactive)
375 (message "NNDiary version %s" nndiary-version)) 256 (message "NNDiary version %s" nndiary-version))
376 257
@@ -631,7 +512,7 @@ all. This may very well take some time.")
631 512
632(deffoo nndiary-request-scan (&optional group server) 513(deffoo nndiary-request-scan (&optional group server)
633 ;; Use our own mail sources and split methods while Gnus doesn't let us have 514 ;; Use our own mail sources and split methods while Gnus doesn't let us have
634 ;; multiple backends for retrieving mail. 515 ;; multiple back ends for retrieving mail.
635 (let ((mail-sources nndiary-mail-sources) 516 (let ((mail-sources nndiary-mail-sources)
636 (nnmail-split-methods nndiary-split-methods)) 517 (nnmail-split-methods nndiary-split-methods))
637 (setq nndiary-article-file-alist nil) 518 (setq nndiary-article-file-alist nil)