Synch with Oort Gnus.
authoryamaoka <yamaoka>
Mon, 5 Nov 2001 01:01:17 +0000 (01:01 +0000)
committeryamaoka <yamaoka>
Mon, 5 Nov 2001 01:01:17 +0000 (01:01 +0000)
38 files changed:
ChangeLog
etc/smilies/blink.xpm [new file with mode: 0644]
etc/smilies/braindamaged.xpm [new file with mode: 0644]
etc/smilies/dead.xpm [new file with mode: 0644]
etc/smilies/evil.xpm [new file with mode: 0644]
etc/smilies/forced.xpm [new file with mode: 0644]
etc/smilies/frown.xpm [new file with mode: 0644]
etc/smilies/indifferent.xpm [new file with mode: 0644]
etc/smilies/sad.xpm [new file with mode: 0644]
etc/smilies/smile.xpm [new file with mode: 0644]
etc/smilies/wry.xpm [new file with mode: 0644]
lisp/ChangeLog
lisp/dgnushack.el
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-msg.el
lisp/gnus-sieve.el
lisp/gnus-topic.el
lisp/imap.el
lisp/lpath.el
lisp/message.el
lisp/mm-bodies.el
lisp/mm-util.el
lisp/mml.el
lisp/nnimap.el
lisp/sieve.el
lisp/smiley-ems.el
texi/ChangeLog
texi/dir
texi/gnus-ja.texi
texi/gnus.texi
texi/herds/new-herd-10.png [deleted file]
texi/message-ja.texi
texi/message.texi
texi/ps/Makefile.in
texi/sieve.texi
texi/texi2latex.el
todo

index 3bcd175..a17a4d9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-11-01 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * etc/smilies/blink.xpm: New set of xpm. From Oliver Scholz
+       <oscholz@my.gnus.org>.
+
 2001-10-29  Per Abrahamsen  <abraham@dina.kvl.dk>
 
        * etc/smilies/sad.pbm: New bitmap.
diff --git a/etc/smilies/blink.xpm b/etc/smilies/blink.xpm
new file mode 100644 (file)
index 0000000..1813780
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * blink_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".+++++++..++.",
+".++...++..++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/braindamaged.xpm b/etc/smilies/braindamaged.xpm
new file mode 100644 (file)
index 0000000..25bd3e7
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * mad_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".++...++++++.",
+".++.+.+...++.",
+".++...+.+.++.",
+".++++++...++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/dead.xpm b/etc/smilies/dead.xpm
new file mode 100644 (file)
index 0000000..fa9c38f
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * dead_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".++.+.+.+.++.",
+".+++.+++.+++.",
+".++.+.+.+.++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/evil.xpm b/etc/smilies/evil.xpm
new file mode 100644 (file)
index 0000000..c364ac3
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * diabolic_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".++.+++++.++.",
+".++..+++..++.",
+".++...+...++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.+++.+++.",
+".++++...++++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/forced.xpm b/etc/smilies/forced.xpm
new file mode 100644 (file)
index 0000000..d4bb256
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * forced_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".+.........+.",
+".+++++++++++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/frown.xpm b/etc/smilies/frown.xpm
new file mode 100644 (file)
index 0000000..b4fd03b
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * frown_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".++.+++++.++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".+++.....+++.",
+".++.+++++.++.",
+".+++++++++++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/indifferent.xpm b/etc/smilies/indifferent.xpm
new file mode 100644 (file)
index 0000000..6395238
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * indifferent_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".+++++++++++.",
+".++.......++.",
+".+++++++++++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/sad.xpm b/etc/smilies/sad.xpm
new file mode 100644 (file)
index 0000000..c445377
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * sad_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".++++...++++.",
+".+++.+++.+++.",
+".++.+++++.++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/smile.xpm b/etc/smilies/smile.xpm
new file mode 100644 (file)
index 0000000..cc2d2ad
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * smile_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
diff --git a/etc/smilies/wry.xpm b/etc/smilies/wry.xpm
new file mode 100644 (file)
index 0000000..58f42ce
--- /dev/null
@@ -0,0 +1,20 @@
+/* XPM */
+static char * wry_xpm[] = {
+"13 14 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFDD00",
+"   .......   ",
+"  ..+++++..  ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".++++++++..+.",
+".++++++..+++.",
+".++++..+++++.",
+" .+++++++++. ",
+"  ..+++++..  ",
+"   .......   "};
index 934fb4f..37c8b48 100644 (file)
@@ -1,3 +1,113 @@
+2001-11-04 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-kill-buffer): Remove auto-save file after
+       confirm.
+
+       * message.el (message-send-mail): Call message-generate-headers
+       once.  Suggested by Matt Armstrong <matt@lickey.com>.
+
+       * gnus-topic.el (gnus-topic-rename): Initial-input.
+       Suggested by Katsuhiro Hermit Endo <hermit@koka-in.org>.
+
+2001-11-03  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-forbidden-properties): New constant.
+       (message-strip-forbidden-properties): New function.
+       (message-mode): Activate it.
+
+2001-11-02 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-15-compatible): Fix doc.
+       (mm-hack-charsets): Fix doc.
+
+2001-11-02  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-int.el (gnus-check-server): Message "...done" when done.
+
+       * imap.el (imap-close): Don't message (imap-send-command-wait
+       returns if the connection is dropped).
+       (imap-wait-for-tag): Nix out message only when necessary.
+
+       * gnus-sieve.el (gnus-sieve-script): Use "stop" instead of "elsif"
+       for non-crossposting.
+       (gnus-sieve-crosspost): Default to t to be consistent with other
+       parts of Gnus.
+
+2001-11-01 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-15-compatible): Add inconvertible chars.
+       (mm-iso-8859-x-to-15-table): Ditto.
+       (mm-iso-8859-x-to-15-region): Ditto.
+       (mm-find-mime-charset-region): Ditto.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-close-asynchronous): New variable.
+       (nnimap-close-group): Use it.
+       (nnimap-expunge): Don't use it.
+
+       * imap.el (imap-callbacks): New variable.
+       (imap-remassoc): Copied from `gnus-remassoc'.
+       (imap-add-callback): New function.
+       (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous
+       behaviour.
+       (imap-parse-response): Call the callback.
+
+       * message.el (message-insert-canlock): New variable.
+       (message-canlock-generate, message-canlock-password) 
+       (message-insert-canlock): New functions.
+       (message-send-news): Call `message-insert-canlock'.
+       (top-level): Require canlock when compiling.
+       (message-insert-canlock): Require canlock before we need it.
+
+2001-11-01 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-copy-article-buffer): Copy sequence.
+
+2001-11-01 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-make-load): A workaround for
+       custom-add-loads bug in some versions of XEmacs.
+
+2001-11-01 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-synonym-alist): Revert (some).
+
+2001-11-01 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-x-to-15-region): New.
+       (mm-hack-charsets): New.
+       (mm-iso-8859-15-compatible): New.
+       (mm-iso-8859-x-to-15-table): New.
+       (mm-find-mime-charset-region): Add parameter hack-charsets.
+
+       * mm-bodies.el (mm-encode-body): Use it.
+       * mml.el (mml-parse-1): Ditto.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-make-menu-bar): Add Sieve.
+
+2001-11-01 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-to-coding-system): Return nil, if charset
+       is nil.
+
+2001-11-01 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * smiley-ems.el (smiley-update-cache): Auto detect file type.
+
+       * message.el (message-forward-rmail-make-body):
+       save-window-excursion.
+       (message-encode-message-body): no error.
+       (message-setup-1): compose-mail send-actions are different from
+       message-send-actions.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * sieve.el: Don't require easy-mmode. Suggested by Katsumi Yamaoka
+       <yamaoka@jpl.org>.
+
 2001-10-31 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
        * sieve-manage.el (sieve-string-bytes): No complain.
index f7d7796..b6ced4a 100644 (file)
@@ -656,7 +656,19 @@ Modify to suit your needs."))
 ;;; no-byte-compile: t
 ;;; no-update-autoloads: t
 ;;; End:
-;;; gnus-load.el ends here\n"))
+;;; gnus-load.el ends here
+")
+    ;; Workaround the bug in some version of XEmacs.
+    (when (featurep 'xemacs)
+      (condition-case nil
+         (require 'cus-load)
+       (error nil))
+      (goto-char (point-min))
+      (when (and (fboundp 'custom-add-loads)
+                (not (search-forward "\n(autoload 'custom-add-loads " nil t)))
+       (search-forward "\n;;; Code:" nil t)
+       (forward-line 1)
+       (insert "\n(autoload 'custom-add-loads \"cus-load\")\n"))))
   (message (format "Compiling %s..." dgnushack-gnus-load-file))
   (byte-compile-file dgnushack-gnus-load-file))
 
index a38020a..ffab7ca 100644 (file)
@@ -857,6 +857,9 @@ simple manner.")
        ["Jump to group" gnus-group-jump-to-group t]
        ["First unread group" gnus-group-first-unread-group t]
        ["Best unread group" gnus-group-best-unread-group t])
+       ("Sieve"
+       ["Generate" gnus-sieve-generate t]
+       ["Generate and update" gnus-sieve-update t])
        ["Delete bogus groups" gnus-group-check-bogus-groups t]
        ["Find new newsgroups" gnus-group-find-new-groups t]
        ["Transpose" gnus-group-transpose-groups
index 0fb9a18..d3fd3e0 100644 (file)
@@ -111,7 +111,8 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
   "Check whether the connection to METHOD is down.
 If METHOD is nil, use `gnus-select-method'.
 If it is down, start it up (again)."
-  (let ((method (or method gnus-select-method)))
+  (let ((method (or method gnus-select-method))
+       result)
     ;; Transform virtual server names into select methods.
     (when (stringp method)
       (setq method (gnus-server-to-method method)))
@@ -126,11 +127,14 @@ If it is down, start it up (again)."
       (gnus-run-hooks 'gnus-open-server-hook)
       (prog1
          (condition-case ()
-             (gnus-open-server method)
+             (setq result (gnus-open-server method))
            (quit (message "Quit gnus-check-server")
                  nil))
        (unless silent
-         (message ""))))))
+         (gnus-message 5 "Opening %s server%s...%s" (car method)
+                       (if (equal (nth 1 method) "") ""
+                         (format " on %s" (nth 1 method)))
+                       (if result "done" "failed")))))))
 
 (defun gnus-get-function (method function &optional noerror)
   "Return a function symbol based on METHOD and FUNCTION."
index 7a26243..e0908e1 100644 (file)
@@ -634,7 +634,8 @@ header line with the old Message-ID."
            (insert-buffer-substring gnus-original-article-buffer beg end)
            ;; Decode charsets.
            (let ((gnus-article-decode-hook
-                  (delq 'article-decode-charset gnus-article-decode-hook)))
+                  (delq 'article-decode-charset
+                        (copy-sequence gnus-article-decode-hook))))
              ;; Needed for T-gnus.
              (add-hook 'gnus-article-decode-hook
                        'article-decode-encoded-words)
index e3477de..0e52cac 100644 (file)
@@ -64,7 +64,7 @@ your Sieve script."
 For example: \"nnimap:mailbox\""
   :group 'gnus-sieve)
 
-(defcustom gnus-sieve-crosspost nil
+(defcustom gnus-sieve-crosspost t
   "Whether the generated Sieve script should do crossposting."
   :type 'bool
   :group 'gnus-sieve)
@@ -202,9 +202,8 @@ considered.  This parameter should contain an elisp test
 such group, a Sieve IF control structure is generated, having the
 test as the condition and { fileinto \"group.name\"; } as the body.
 
-If CROSSPOST is non-nil, concatenate these conditionals
-sequencially, otherwsie with `elsif', causing a match on one group the
-other tests to be skipped.
+If CROSSPOST is nil, each conditional body contains a \"stop\" command
+which stops execution after a match is found.
 
 For example: If the INBOX.list.sieve group has the
 
@@ -225,11 +224,14 @@ This is returned as a string."
        (let* ((group (gnus-info-group info))
               (spec (gnus-group-find-parameter group 'sieve t)))
          (when spec
-           (push (concat "if " (gnus-sieve-test spec) " {\n\t"
-                         "fileinto \"" (gnus-group-real-name group) 
-                         "\";\n}")
+           (push (concat "if " (gnus-sieve-test spec) " {\n"
+                         "\tfileinto \"" (gnus-group-real-name group) "\";\n"
+                         (if gnus-sieve-crosspost
+                             ""
+                           "\tstop;\n")
+                         "}")
                  script)))))
-    (mapconcat 'identity script (if crosspost "\n" "\nels"))))
+    (mapconcat 'identity script "\n")))
 
 (provide 'gnus-sieve)
 
index bca0737..0d5e04a 100644 (file)
@@ -1451,7 +1451,7 @@ If RECURSIVE is t, unmark its subtopics too."
   (interactive
    (let ((topic (gnus-current-topic)))
      (list topic
-          (read-string "Rename topic to: " topic))))
+          (read-string (format "Rename %s to: " topic) topic))))
   ;; Check whether the new name exists.
   (when (gnus-topic-find-topology new-name)
     (error "Topic '%s' already exists" new-name))
index b082201..2c402c2 100644 (file)
@@ -389,9 +389,26 @@ human readable response text (a string).")
   "Non-nil indicates that the server emitted a continuation request.
 The actually value is really the text on the continuation line.")
 
+(defvar imap-callbacks nil
+  "List of response tags and callbacks, on the form `(number . function)'.
+The function should take two arguments, the first the IMAP tag and the
+second the status (OK, NO, BAD etc) of the command.")
+
 \f
 ;; Utility functions:
 
+(defun imap-remassoc (key alist)
+  "Delete by side effect any elements of LIST whose car is `equal' to KEY.
+The modified LIST is returned.  If the first member
+of LIST has a car that is `equal' to KEY, there is no way to remove it
+by side effect; therefore, write `(setq foo (remassoc key foo))' to be
+sure of changing the value of `foo'."
+  (when alist
+    (if (equal key (caar alist))
+       (cdr alist)
+      (setcdr alist (imap-remassoc key (cdr alist)))
+      alist)))
+
 (defun imap-read-passwd (prompt &rest args)
   "Read a password using PROMPT.
 If ARGS, PROMPT is used as an argument to `format'."
@@ -996,9 +1013,8 @@ password is remembered in the buffer."
   "Close connection to server in BUFFER.
 If BUFFER is nil, the current buffer is used."
   (with-current-buffer (or buffer (current-buffer))
-    (and (imap-opened)
-        (not (imap-ok-p (imap-send-command-wait "LOGOUT")))
-        (message "Server %s didn't let me log out" imap-server))
+    (when (imap-opened)
+      (imap-send-command-wait "LOGOUT"))
     (when (and imap-process
               (memq (process-status imap-process) '(open run)))
       (delete-process imap-process))
@@ -1130,22 +1146,38 @@ If EXAMINE is non-nil, do a read-only select."
            imap-state 'auth)
       t)))
 
-(defun imap-mailbox-expunge (&optional buffer)
+(defun imap-mailbox-expunge (&optional asynch buffer)
   "Expunge articles in current folder in BUFFER.
+If ASYNCH, do not wait for succesful completion of the command.
 If BUFFER is nil the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
     (when (and imap-current-mailbox (not (eq imap-state 'examine)))
-      (imap-ok-p (imap-send-command-wait "EXPUNGE")))))
+      (if asynch
+         (imap-send-command "EXPUNGE")
+      (imap-ok-p (imap-send-command-wait "EXPUNGE"))))))
 
-(defun imap-mailbox-close (&optional buffer)
+(defun imap-mailbox-close (&optional asynch buffer)
   "Expunge articles and close current folder in BUFFER.
+If ASYNCH, do not wait for succesful completion of the command.
 If BUFFER is nil the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
-    (when (and imap-current-mailbox
-              (imap-ok-p (imap-send-command-wait "CLOSE")))
-      (setq imap-current-mailbox nil
-           imap-message-data nil
-           imap-state 'auth)
+    (when imap-current-mailbox
+      (if asynch
+         (imap-add-callback (imap-send-command "CLOSE")
+                            `(lambda (tag status)
+                               (message "IMAP mailbox `%s' closed... %s"
+                                        imap-current-mailbox status)
+                               (when (eq ,imap-current-mailbox
+                                         imap-current-mailbox)
+                                 ;; Don't wipe out data if another mailbox
+                                 ;; was selected...
+                                 (setq imap-current-mailbox nil
+                                       imap-message-data nil
+                                       imap-state 'auth))))
+       (when (imap-ok-p (imap-send-command-wait "CLOSE"))
+         (setq imap-current-mailbox nil
+               imap-message-data nil
+               imap-state 'auth)))
       t)))
 
 (defun imap-mailbox-create-1 (mailbox)
@@ -1560,6 +1592,9 @@ on failure."
 \f
 ;; Internal functions.
 
+(defun imap-add-callback (tag func)
+  (setq imap-callbacks (append (list (cons tag func)) imap-callbacks)))
+
 (defun imap-send-command-1 (cmdstr)
   (setq cmdstr (concat cmdstr imap-client-eol))
   (and imap-log
@@ -1631,20 +1666,23 @@ on failure."
 
 (defun imap-wait-for-tag (tag &optional buffer)
   (with-current-buffer (or buffer (current-buffer))
-    (while (and (null imap-continuation)
-               (memq (process-status imap-process) '(open run))
-               (< imap-reached-tag tag))
-      (let ((len (/ (point-max) 1024))
-           message-log-max)
-       (unless (< len 10)
-         (message "imap read: %dk" len))
-       (accept-process-output imap-process 1)))
-    (message "")
-    (and (memq (process-status imap-process) '(open run))
-        (or (assq tag imap-failed-tags)
-            (if imap-continuation
-                'INCOMPLETE
-              'OK)))))
+    (let (imap-have-messaged)
+      (while (and (null imap-continuation)
+                 (memq (process-status imap-process) '(open run))
+                 (< imap-reached-tag tag))
+       (let ((len (/ (point-max) 1024))
+             message-log-max)
+         (unless (< len 10)
+           (setq imap-have-messaged t)
+           (message "imap read: %dk" len))
+         (accept-process-output imap-process 1)))
+      (when imap-have-messaged
+       (message ""))
+      (and (memq (process-status imap-process) '(open run))
+          (or (assq tag imap-failed-tags)
+              (if imap-continuation
+                  'INCOMPLETE
+                'OK))))))
 
 (defun imap-sentinel (process string)
   (delete-process process))
@@ -1926,9 +1964,9 @@ Return nil if no complete line has arrived."
                        (read (concat "(" (buffer-substring (point) (point-max)) ")"))))
           (STATUS     (imap-parse-status))
           (CAPABILITY (setq imap-capability
-                            (read (concat "(" (upcase (buffer-substring
-                                                       (point) (point-max)))
-                                          ")"))))
+                              (read (concat "(" (upcase (buffer-substring
+                                                         (point) (point-max)))
+                                            ")"))))
           (ACL        (imap-parse-acl))
           (t       (case (prog1 (read (current-buffer))
                            (imap-forward))
@@ -1970,7 +2008,11 @@ Return nil if no complete line has arrived."
                        (push (list token status code text) imap-failed-tags)
                        (error "Internal error, tag %s status %s code %s text %s"
                               token status code text))))
-              (t   (message "Garbage: %s" (buffer-string))))))))))
+              (t   (message "Garbage: %s" (buffer-string))))
+            (when (assq token imap-callbacks)
+              (funcall (cdr (assq token imap-callbacks)) token status)
+              (setq imap-callbacks
+                    (imap-remassoc token imap-callbacks)))))))))
 
 ;;   resp-text       = ["[" resp-text-code "]" SP] text
 ;;
index 1d5ecb5..188dcd0 100644 (file)
               find-image font-create-object gnus-mule-get-coding-system
               font-lock-set-defaults
               image-size image-type-available-p insert-image
+              image-type-from-file-header
               make-temp-file message-xmas-redefine
               mail-aliases-setup mm-copy-tree
               mule-write-region-no-coding-system put-image
               ring-elements
               charsetp sort-coding-systems
-              coding-system-p
+              coding-system-p coding-system-list
               propertize make-mode-line-mouse2-map
               make-mode-line-mouse-map
               rmail-select-summary rmail-summary-exists rmail-update-summary
index b3d7570..9158811 100644 (file)
@@ -37,6 +37,7 @@
 ;;; Code:
 
 (eval-when-compile
+  (require 'canlock)
   (require 'cl)
   (require 'smtp)
   (defvar gnus-list-identifiers))      ; gnus-sum is required where necessary
@@ -1247,6 +1248,11 @@ no, only reply back to the author."
   :group 'message-headers
   :type 'boolean)
 
+(defcustom message-insert-canlock t
+  "Whether to insert a Cancel-Lock header in news postings."
+  :group 'message-headers
+  :type 'boolean)
+
 ;;; Internal variables.
 
 (defvar message-sending-message "Sending...")
@@ -1824,6 +1830,33 @@ Point is left at the beginning of the narrowed-to region."
   (defvar facemenu-add-face-function)
   (defvar facemenu-remove-face-function))
 
+;;; Forbidden properties
+;;
+;; We use `after-change-functions' to keep special text properties
+;; that interfer with the normal function of message mode out of the
+;; buffer. 
+
+(defconst message-forbidden-properties 
+  ;; No reason this should be clutter up customize.  We make it a
+  ;; property list (rather than a list of property symbols), to be
+  ;; directly useful for `remove-text-properties'.
+  '(field nil read-only nil intangible nil invisible nil 
+         mouse-face nil modification-hooks nil insert-in-front-hooks nil
+         insert-behind-hooks nil point-entered nil point-left nil) 
+  ;; Other special properties:
+  ;; category, face, display: probably doesn't do any harm.
+  ;; fontified: is used by font-lock.
+  ;; syntax-table, local-map: I dunno.
+  ;; We need to add XEmacs names to the list.
+  "Property list of with properties.forbidden in message buffers.
+The values of the properties are ignored, only the property names are used.")
+
+(defun message-strip-forbidden-properties (begin end &optional old-length)
+  "Strip forbidden properties between BEGIN and END, ignoring the third arg.
+This function is intended to be called from `after-change-functions'.
+See also `message-forbidden-properties'."
+  (remove-text-properties begin end message-forbidden-properties))
+
 ;;;###autoload
 (define-derived-mode message-mode text-mode "Message"
   "Major mode for editing mail and news to be sent.
@@ -1885,6 +1918,8 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
        (set (make-local-variable 'tool-bar-map) (message-tool-bar-map))))
   (easy-menu-add message-mode-menu message-mode-map)
   (easy-menu-add message-mode-field-menu message-mode-map)
+  ;; Mmmm... Forbidden properties...
+  (add-hook 'after-change-functions 'message-strip-forbidden-properties nil t)
   ;; Allow mail alias things.
   (when (eq message-mail-alias-type 'abbrev)
     (if (fboundp 'mail-abbrevs-setup)
@@ -2728,10 +2763,24 @@ The text will also be indented the normal way."
            (funcall message-kill-buffer-query-function
                     "The buffer modified; kill anyway? "))
     (let ((actions message-kill-actions)
+         (draft-article message-draft-article)
+         (auto-save-file-name buffer-auto-save-file-name)
+         (file-name buffer-file-name)
+         (modified (buffer-modified-p))
          (frame (selected-frame))
          (org-frame message-original-frame))
       (setq buffer-file-name nil)
       (kill-buffer (current-buffer))
+      (when (and (or (and auto-save-file-name
+                         (file-exists-p auto-save-file-name))
+                    (and file-name
+                         (file-exists-p file-name)))
+                (yes-or-no-p (format "Remove the backup file%s? "
+                                     (if modified " too" ""))))
+       (ignore-errors
+         (delete-file auto-save-file-name))
+       (let ((message-draft-article draft-article))
+         (message-disassociate-draft)))
       (message-do-actions actions)
       (message-delete-frame frame org-frame)))
   (message ""))
@@ -3065,23 +3114,26 @@ This sub function is for exclusive use of `message-send-mail'."
         (case-fold-search nil)
         (news (message-news-p))
         (message-this-is-mail t)
+        (headers message-required-mail-headers)
         failure)
     (save-restriction
       (message-narrow-to-headers)
-      ;; Insert some headers.
-      (let ((message-deletable-headers
-            (if news nil message-deletable-headers)))
-       (message-generate-headers message-required-mail-headers))
       ;; Generate the Mail-Followup-To header if the header is not there...
       (if (and (or message-subscribed-regexps
                   message-subscribed-addresses
                   message-subscribed-address-functions)
               (not (mail-fetch-field "mail-followup-to")))
-         (message-generate-headers
-          `(("Mail-Followup-To" . ,(message-make-mft))))
+         (setq headers
+               (cons
+                (cons "Mail-Followup-To" (message-make-mft))
+                message-required-mail-headers))
        ;; otherwise, delete the MFT header if the field is empty
        (when (equal "" (mail-fetch-field "mail-followup-to"))
-         (message-remove-header "Mail-Followup-To")))
+         (message-remove-header "^Mail-Followup-To:")))
+      ;; Insert some headers.
+      (let ((message-deletable-headers
+            (if news nil message-deletable-headers)))
+       (message-generate-headers headers))
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (if (not (message-check-mail-syntax))
@@ -3314,6 +3366,28 @@ This sub function is for exclusive use of `message-send-news'."
        nil)
      (not (funcall message-send-news-function method)))))
 
+(defun message-canlock-generate ()
+  "Return a string that is non-trival to guess.
+Do not use this for anything important, it is cryptographically weak."
+  (md5 (concat (message-unique-id)
+              (format "%x%x%x" (random) (random t) (random))
+              (prin1-to-string (recent-keys))
+              (prin1-to-string (garbage-collect)))))
+
+(defun message-canlock-password ()
+  "The password used by message for cancel locks.
+This is the value of `canlock-password', if that option is non-nil.
+Otherwise, generate and save a value for `canlock-password' first."
+  (unless canlock-password
+    (customize-save-variable 'canlock-password (message-canlock-generate)))
+  canlock-password)
+
+(defun message-insert-canlock ()
+  (when message-insert-canlock
+    (require 'canlock)
+    (message-canlock-password)
+    (canlock-insert-header)))
+
 (defun message-send-news (&optional arg)
   (let* ((tembuf (message-generate-new-buffer-clone-locals " *message temp*"))
         (case-fold-search nil)
@@ -3352,6 +3426,7 @@ This sub function is for exclusive use of `message-send-news'."
       (message-narrow-to-headers)
       ;; Insert some headers.
       (message-generate-headers message-required-news-headers)
+      (message-insert-canlock)
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     ;; Note: This check will be disabled by the ".*" default value for
@@ -4691,8 +4766,10 @@ than 988 characters long, and if they are not, trim them until they are."
 ;;;     (push '(message-mode (encrypt . mc-encrypt-message)
 ;;;                     (sign . mc-sign-message))
 ;;;      mc-modes-alist))
-  (when actions
-    (setq message-send-actions actions))
+  (dolist (action actions)
+    (condition-case nil
+       (add-to-list 'message-send-actions
+                    `(apply ',(car action) ',(cdr action)))))
   (setq message-reply-buffer
        (or (message-get-parameter 'reply-buffer)
            replybuffer))
@@ -5432,7 +5509,8 @@ Optional NEWS will use news to forward instead of mail."
 
 ;;;###autoload
 (defun message-forward-rmail-make-body (forward-buffer)
-  (with-current-buffer forward-buffer
+  (save-window-excursion
+    (set-buffer forward-buffer)
     (let (rmail-enable-mime)
       (rmail-toggle-header 0)))
   (message-forward-make-body forward-buffer))
@@ -5909,9 +5987,10 @@ regexp varstr."
       ;; /usr/bin/mail.
       (unless content-type-p
        (goto-char (point-min))
-       (re-search-forward "^MIME-Version:")
-       (forward-line 1)
-       (insert "Content-Type: text/plain; charset=us-ascii\n")))))
+       ;; For unknown reason, MIME-Version doesn't exist.
+       (when (re-search-forward "^MIME-Version:" nil t)
+         (forward-line 1)
+         (insert "Content-Type: text/plain; charset=us-ascii\n"))))))
 
 (defun message-read-from-minibuffer (prompt)
   "Read from the minibuffer while providing abbrev expansion."
index dacb792..1241326 100644 (file)
@@ -82,7 +82,8 @@ If no encoding was done, nil is returned."
            (mm-encode-coding-region (point-min) (point-max) charset)
            charset)
        (goto-char (point-min))
-       (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))
+       (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)
+                                                    mm-hack-charsets))
              start)
          (cond
           ;; No encoding.
index cbf1ca0..18c144b 100644 (file)
 (defvar mm-charset-synonym-alist
   `(
     ;; Perfectly fine?  A valid MIME name, anyhow.
-    ,(unless (mm-coding-system-p 'big5)
-       '(big5 . cn-big5))
+    ,@(unless (mm-coding-system-p 'big5)
+       '((big5 . cn-big5)))
     ;; Not in XEmacs, but it's not a proper MIME charset anyhow.
-    ,(unless (mm-coding-system-p 'x-ctext)
-       '(x-ctext . ctext))
+    ,@(unless (mm-coding-system-p 'x-ctext)
+       '((x-ctext . ctext)))
     ;; Apparently not defined in Emacs 20, but is a valid MIME name.
-    ,(unless (mm-coding-system-p 'gb2312)
-       '(gb2312 . cn-gb-2312))
+    ,@(unless (mm-coding-system-p 'gb2312)
+       '((gb2312 . cn-gb-2312)))
+    ;; ISO-8859-15 is very similar to ISO-8859-1.
+    ,@(unless (mm-coding-system-p 'iso-8859-15) ; Emacs 21 defines it.
+       '((iso-8859-15 . iso-8859-1)))
     ;; Windows-1252 is actually a superset of Latin-1.  See also
     ;; `gnus-article-dumbquotes-map'.
-    ;;,(unless (mm-coding-system-p 'windows-1252)      
-                                       ; should be defined eventually
-    ;;  '(windows-1252 . iso-8859-1))
-    ;; ISO-8859-15 is very similar to ISO-8859-1.
-    ;;,(unless (mm-coding-system-p 'iso-8859-15) ; Emacs 21 defines it.
-    ;;   '(iso-8859-15 . iso-8859-1))
+    ,@(unless (mm-coding-system-p 'windows-1252)       
+       (if (mm-coding-system-p 'cp1252)
+          '((windows-1252 . cp1252))
+        '((windows-1252 . iso-8859-1))))
     ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft
     ;; Outlook users in Czech republic. Use this to allow reading of their
     ;; e-mails. cp1250 should be defined by M-x codepage-setup.
-    ;;,(unless (mm-coding-system-p 'windows-1250)      
-                                       ; should be defined eventually
-    ;;  '(windows-1250 . cp1250))
+    ,@(if (and (not (mm-coding-system-p 'windows-1250))
+              (mm-coding-system-p 'cp1250))
+         '((windows-1250 . cp1250)))
     )
   "A mapping from invalid charset names to the real charset names.")
 
   "Coding system of auto save file.")
 
 (defvar mm-universal-coding-system mm-auto-save-coding-system
-  "The universal Coding system.")
+  "The universal coding system.")
 
 ;; Fixme: some of the cars here aren't valid MIME charsets.  That
 ;; should only matter with XEmacs, though.
                                (coding-system-get cs 'safe-charsets))))))
          (sort-coding-systems (coding-system-list 'base-only))))))
 
+(defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2)
+  "A list of special charsets.
+Valid elements include:
+`iso-8859-15'    convert ISO-8859-1, -9 to ISO-8859-15 if ISO-8859-15 exists.
+`iso-2022-jp-2'  convert ISO-2022-jp to ISO-2022-jp-2 if ISO-2022-jp-2 exists."
+)
+
+(defvar mm-iso-8859-15-compatible 
+  '((iso-8859-1 "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE")
+    (iso-8859-9 "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE\xD0\xDD\xDE\xF0\xFD\xFE"))
+  "ISO-8859-15 exchangeable coding systems and inconvertible characters.")
+
+(defvar mm-iso-8859-x-to-15-table
+  (and (fboundp 'coding-system-p)
+       (mm-coding-system-p 'iso-8859-15)
+       (mapcar 
+       (lambda (cs)
+         (if (mm-coding-system-p (car cs))
+             (let ((c (string-to-char 
+                       (decode-coding-string "\341" (car cs)))))
+               (cons (char-charset c)
+                     (cons
+                      (- (string-to-char 
+                          (decode-coding-string "\341" 'iso-8859-15)) c)
+                      (string-to-list (decode-coding-string (car (cdr cs)) 
+                                                            (car cs))))))
+           '(gnus-charset 0)))
+       mm-iso-8859-15-compatible))
+  "A table of the difference character between ISO-8859-X and ISO-8859-15.")
+
 ;;; Internal variables:
 
 ;;; Functions:
@@ -272,6 +303,8 @@ used as the line break code type of the coding system."
   (when lbt
     (setq charset (intern (format "%s-%s" charset lbt))))
   (cond
+   ((null charset)
+    charset)
    ;; Running in a non-MULE environment.
    ((null (mm-get-coding-system-list))
     charset)
@@ -422,38 +455,63 @@ If the charset is `composition', return the actual one."
       enable-multibyte-characters
     (featurep 'mule)))
 
-(defun mm-find-mime-charset-region (b e)
+(defun mm-iso-8859-x-to-15-region (&optional b e)
+  (if (fboundp 'char-charset)
+      (let (charset item c inconvertible)
+       (save-restriction
+         (if e (narrow-to-region b e))
+         (goto-char (point-min))
+         (skip-chars-forward "\0-\177")
+         (while (not (eobp))
+           (cond 
+            ((not (setq item (assq (char-charset (setq c (char-after))) 
+                                   mm-iso-8859-x-to-15-table)))
+             (forward-char))
+            ((memq c (cdr (cdr item)))
+             (setq inconvertible t)
+             (forward-char))
+            (t
+             (insert (prog1 (+ c (car (cdr item))) (delete-char 1))))
+           (skip-chars-forward "\0-\177"))))
+       (not inconvertible))))
+
+(defun mm-find-mime-charset-region (b e &optional hack-charsets)
   "Return the MIME charsets needed to encode the region between B and E.
 Nil means ASCII, a single-element list represents an appropriate MIME
 charset, and a longer list means no appropriate charset."
-  ;; The return possibilities of this function are a mess...
-  (or (and
-       (mm-multibyte-p)
-       (fboundp 'find-coding-systems-region)
-       ;; Find the mime-charset of the most preferred coding
-       ;; system that has one.
-       (let ((systems (find-coding-systems-region b e))
-            result)
-        ;; Fixme: The `mime-charset' (`x-ctext') of `compound-text'
-        ;; is not in the IANA list.
-        (setq systems (delq 'compound-text systems))
-        (unless (equal systems '(undecided))
-          (while systems
-            (let ((cs (coding-system-get (pop systems) 'mime-charset)))
-              (if cs
-                  (setq systems nil
-                        result (list cs))))))
-        result))
-      ;; Otherwise we're not multibyte, XEmacs or a single coding
-      ;; system won't cover it.
-      (let ((charsets 
-            (mm-delete-duplicates
-             (mapcar 'mm-mime-charset
-                     (delq 'ascii
-                           (mm-find-charset-region b e))))))
-       (if (memq 'iso-2022-jp-2 charsets)
-           (delq 'iso-2022-jp charsets)
-         charsets))))
+  (let (charsets)
+    ;; The return possibilities of this function are a mess...
+    (or (and (mm-multibyte-p)
+            (fboundp 'find-coding-systems-region)
+            ;; Find the mime-charset of the most preferred coding
+            ;; system that has one.
+            (let ((systems (find-coding-systems-region b e)))
+              ;; Fixme: The `mime-charset' (`x-ctext') of `compound-text'
+              ;; is not in the IANA list.
+              (setq systems (delq 'compound-text systems))
+              (unless (equal systems '(undecided))
+                (while systems
+                  (let ((cs (coding-system-get (pop systems) 'mime-charset)))
+                    (if cs
+                        (setq systems nil
+                              charsets (list cs))))))
+              charsets))
+       ;; Otherwise we're not multibyte, XEmacs or a single coding
+       ;; system won't cover it.
+       (setq charsets 
+             (mm-delete-duplicates
+              (mapcar 'mm-mime-charset
+                      (delq 'ascii
+                            (mm-find-charset-region b e))))))
+    (if (and (memq 'iso-8859-15 charsets)
+            (memq 'iso-8859-15 hack-charsets)
+            (save-excursion (mm-iso-8859-x-to-15-region b e)))
+       (mapcar (lambda (x) (setq charsets (delq (car x) charsets)))
+               mm-iso-8859-15-compatible))
+    (if (and (memq 'iso-2022-jp-2 charsets)
+            (memq 'iso-2022-jp-2 hack-charsets))
+       (setq charsets (delq 'iso-2022-jp charsets)))
+    charsets))
 
 (defmacro mm-with-unibyte-buffer (&rest forms)
   "Create a temporary buffer, and evaluate FORMS there like `progn'.
index a16c613..4ab18fc 100644 (file)
@@ -154,7 +154,8 @@ one charsets.")
                         (list
                          (intern (downcase (cdr (assq 'charset tag))))))
                        (t
-                        (mm-find-mime-charset-region point (point)))))
+                        (mm-find-mime-charset-region point (point) 
+                                                     mm-hack-charsets))))
        (when (and (not raw) (memq nil charsets))
          (if (or (memq 'unknown-encoding mml-confirmation-set)
                  (message-options-get 'unknown-encoding)
index c88021c..48b43e1 100644 (file)
@@ -196,6 +196,14 @@ RFC2060 section 6.4.4."
   :group 'nnimap
   :type 'sexp)
 
+(defcustom nnimap-close-asynchronous nil
+  "Close mailboxes asynchronously in `nnimap-close-group'.
+This means that errors cought by nnimap when closing the mailbox will
+not prevent Gnus from updating the group status, which may be harmful.
+However, it increases speed."
+  :type 'boolean
+  :group 'nnimap)
+
 ;; Authorization / Privacy variables
 
 (defvoo nnimap-auth-method nil
@@ -838,14 +846,14 @@ function is generally only called when Gnus is shutting down."
     (when (and (imap-opened)
               (nnimap-possibly-change-group group server))
       (case nnimap-expunge-on-close
-       ('always (imap-mailbox-expunge)
-                (imap-mailbox-close))
+       ('always (imap-mailbox-expunge nnimap-close-asynchronous)
+                (imap-mailbox-close nnimap-close-asynchronous))
        ('ask (if (and (imap-search "DELETED")
                       (gnus-y-or-n-p (format
                                       "Expunge articles in group `%s'? "
                                       imap-current-mailbox)))
-                 (progn (imap-mailbox-expunge)
-                        (imap-mailbox-close))
+                 (progn (imap-mailbox-expunge nnimap-close-asynchronous)
+                        (imap-mailbox-close nnimap-close-asynchronous))
                (imap-mailbox-unselect)))
        (t (imap-mailbox-unselect)))
       (not imap-current-mailbox))))
@@ -1308,7 +1316,7 @@ function is generally only called when Gnus is shutting down."
 
 (defun nnimap-expunge (mailbox server)
   (when (nnimap-possibly-change-group mailbox server)
-    (imap-mailbox-expunge nnimap-server-buffer)))
+    (imap-mailbox-expunge nil nnimap-server-buffer)))
 
 (defun nnimap-acl-get (mailbox server)
   (when (nnimap-possibly-change-server server)
index fbcaaba..d40efa2 100644 (file)
@@ -34,8 +34,6 @@
 ;;
 ;; 2001-10-31 Committed to Oort Gnus.
 ;;
-;; $Id: sieve.el,v 1.1.2.1 2001-11-01 08:25:40 yamaoka Exp $
-;;
 ;; Todo:
 ;;
 ;; * Namespace?  This file contains `sieve-manage' and
index 876c88c..9b4020b 100644 (file)
@@ -57,7 +57,7 @@
     ("\\(:-{\\)\\W" 1 "frown.pbm"))
   "*A list of regexps to map smilies to images.
 The elements are (REGEXP MATCH FILE), where MATCH is the submatch in
-rgexp to replace with IMAGE.  IMAGE is the name of a PBM file in
+regexp to replace with IMAGE.  IMAGE is the name of a PBM file in
 `smiley-data-directory'."
   :type '(repeat (list regexp
                       (integer :tag "Regexp match number")
@@ -75,7 +75,9 @@ rgexp to replace with IMAGE.  IMAGE is the name of a PBM file in
                   (symbol-value smiley-regexp-alist)
                 smiley-regexp-alist))
     (let* ((data-directory smiley-data-directory)
-          (image (find-image (list (list :type 'pbm
+          (image (find-image (list (list :type 
+                                         (image-type-from-file-header 
+                                          (nth 2 elt)) 
                                          :file (nth 2 elt)
                                          :ascent 'center)))))
       (if image
index f59f910..a8806e5 100644 (file)
@@ -1,3 +1,32 @@
+2001-11-04 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi: Use C-M- instead of M-C-.
+       * message.texi (Insertion): Ditto.
+       * sieve.texi (Managing Sieve): Ditto.
+       Suggested by Eli Zaretskii <eliz@is.elta.co.il>.
+
+2001-11-02  Simon Josefsson  <jas@extundo.com>
+
+       * dir (File): Add Sieve.
+
+       * gnus.texi (Sieve Commands): Add crossposting.
+
+2001-11-01 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * texi2latex.el (latexi-translate): Typo.
+       (latexi-translate-file): Nine in a herd is enough.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * sieve.texi (Installation): Workaround texi2latex bug (replacing
+       inside verbatim needs a \end{verbatim} earlier in the file).
+
+       * texi2latex.el (latexi-translate): Add sieve.
+
+2001-11-01 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Article Washing): Add a note.
+
 2001-11-01  Simon Josefsson  <jas@extundo.com>
 
        * Makefile.in: Add sieve.
index bb68184..3877572 100644 (file)
--- a/texi/dir
+++ b/texi/dir
@@ -19,3 +19,4 @@ File: dir     Node: Top       This is the Gnus Info tree
 * Gnus: (gnus).                        The news reader Gnus.
 * Message: (message).          The Message sending thingamabob.
 * Emacs MIME: (emacs-mime).    Libraries for handling MIME.
+* Sieve: (sieve).              Managing Sieve scripts in Emacs.
index 7eee151..a640d28 100644 (file)
@@ -2166,8 +2166,8 @@ Gnus \e$B$O\e(B @code{gnus-user-format-function-}@samp{X} \e$B4X?t$r8F$S=P$7$^$9!#$
 \e$B$3$N%3%^%s%I$O5-;v>C5n$HJ]N15-;v$r1#$9=hM}$r9T$$$^$;\e(B
 \e$B$s\e(B (@code{gnus-group-visible-select-group})\e$B!#\e(B
 
-@item M-C-RET
-@kindex M-C-RET (Group)
+@item C-M-RET
+@kindex C-M-RET (Group)
 @findex gnus-group-select-group-ephemerally
 \e$B:G8e$K$3$N%3%^%s%I$O!"8=:_$N%0%k!<%W$r0lEY8B$j!"$=$NFbMF$K0l@Z$N=hM}$r$9\e(B
 \e$B$k$3$H$N$J$$$h$&$KA*Br$7$^\e(B
@@ -3301,8 +3301,8 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 \e$B$7$P$i$/B8:_$7$F$$$?4|8B@Z$l:o=|2DG=$J$9$Y$F$N5-;v$r>C5n$9$k$H$$$&$3$H$G\e(B
 \e$B$9!#\e(B(@pxref{Expiring Mail})\e$B!#\e(B
 
-@item C-c M-C-x
-@kindex C-c M-C-x (Group)
+@item C-c C-M-x
+@kindex C-c C-M-x (Group)
 @findex gnus-group-expire-all-groups
 \e$BA4$F$N%0%k!<%W$NA4$F$N4|8B@Z$l:o=|2DG=$J5-;v$KBP$7$F!"%(%/%9%Q%$%"=hM}$r\e(B
 \e$B9T$$$^$9!#\e(B(@code{gnus-group-expire-all-groups})\e$B!#\e(B
@@ -4157,6 +4157,23 @@ Sieve \e$B$O%5!<%P!<B&$G;H$o$l$k%a!<%k%U%#%k%?!<8@8l$G$9!#\e(Bgnus \e$B$G$O!"3F%0%k
 \e$BCV$+$l$k$N$G!"$3$l$i$N6h@Z$j5-9f$N30$KDI2C$N\e(B Sieve \e$B%3!<%I$r=q$$$F$b!"<!\e(B
 \e$B2s\e(B Sieve \e$B%9%/%j%W%H$r:F:n@.$9$k$H$-$K>C$5$l$F$7$^$&$3$H$O$"$j$^$;$s!#\e(B
 
+@vindex gnus-sieve-crosspost
+\e$BJQ?t\e(B @code{gnus-sieve-crosspost} \e$B$O\e(B Sieve \e$B%9%/%j%W%H$,$I$N$h$&$K:n$i$l$k\e(B
+\e$B$+$r@)8f$7$^$9!#$b$7Hs\e(B-nil (\e$B%G%#%U%)%k%H\e(B) \e$B$@$C$?$i5-;v$O5,B'$K%^%C%A$9$k\e(B
+\e$B$9$Y$F$N%0%k!<%W$KCV$+$l$^$9!#$=$&$G$J$$>l9g!"5-;v$O:G=i$N5,B'$K%^%C%A$9\e(B
+\e$B$k%0%k!<%W$@$1$KCV$+$l$^$9!#Nc$($P%0%k!<%W%Q%i%a!<%?\e(B @samp{(sieve
+address "sender" "owner-ding@@hpc.uh.edu")} \e$B$O!"\e(B
+@code{gnus-sieve-crosspost} \e$B$,\e(B nil \e$B$@$C$?$i0J2<$N\e(B Sieve \e$B%3!<%I$NCGJR$r:n\e(B
+\e$B$j$^$9!#\e(B(@code{gnus-sieve-crosspost} \e$B$,Hs\e(B-nil \e$B$@$C$?>l9g$O!"9T$,4^\e(B
+\e$B$`\e(B @code{stop} \e$B$N8F$S=P$7$,:o=|$5$l$k$3$H0J30$OF1$8$G$9!#\e(B)
+
+@example
+if address "sender" "owner-ding@@hpc.uh.edu" @{
+       fileinto "INBOX.ding";
+       stop;
+@}
+@end example
+
 @xref{Top, ,Top, sieve, Emacs Sieve}.
 
 @table @kbd
@@ -6251,9 +6268,9 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 @table @kbd
 @item T k
-@itemx M-C-k
+@itemx C-M-k
 @kindex T k (\e$B35N,\e(B)
-@kindex M-C-k (\e$B35N,\e(B)
+@kindex C-M-k (\e$B35N,\e(B)
 @findex gnus-summary-kill-thread
 \e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$K4{FI$N0u$rIU$1$^\e(B
 \e$B$9\e(B (@code{gnus-summary-kill-thread})\e$B!#$b$7@\F,0z?t$,@5$G$"$k$H!"Be$o$j$K\e(B
@@ -6261,9 +6278,9 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 \e$B$9!#\e(B
 
 @item T l
-@itemx M-C-l
+@itemx C-M-l
 @kindex T l (\e$B35N,\e(B)
-@kindex M-C-l (\e$B35N,\e(B)
+@kindex C-M-l (\e$B35N,\e(B)
 @findex gnus-summary-lower-thread
 \e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$N%9%3%"$r2<$2$^\e(B
 \e$B$9\e(B (@code{gnus-summary-lower-thread})\e$B!#\e(B
@@ -6333,8 +6350,8 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 @table @kbd
 @item T n
 @kindex T n (\e$B35N,\e(B)
-@itemx M-C-n
-@kindex M-C-n (Summary)
+@itemx C-M-n
+@kindex C-M-n (Summary)
 @itemx M-down
 @kindex M-down (Summary)
 @findex gnus-summary-next-thread
@@ -6342,8 +6359,8 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 @item T p
 @kindex T p (\e$B35N,\e(B)
-@itemx M-C-p
-@kindex M-C-p (Summary)
+@itemx C-M-p
+@kindex C-M-p (Summary)
 @itemx M-up
 @kindex M-up (Summary)
 @findex gnus-summary-prev-thread
@@ -7845,7 +7862,8 @@ HZ \e$B$^$?$O\e(B HZP \e$B$r=hM}$7$^$9!#\e(BHZ (\e$B$^$?$O\e(B HZP) \e$B$OCf9q8l$N5-;v$
 \e$B$7:,K\E*\e(B X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V\e(B
 \e$B$N30It%W%m%0%i%`$r;H$C$F\e(B @code{X-Face} \e$BMs$rJQ49$7$h$&$H;n$_$^$9!#\e(B) \e$B$3$N\e(B
 \e$B4X?t$rI=<(%U%C%/$KF~$l$?$$$N$G$"$l$P!"$*$=$i$/$=$l$O:G8e$K$J$k$Y$-$G$7$g\e(B
-\e$B$&!#\e(B
+\e$B$&!#\e(B(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^\e(B
+\e$B$9!#\e(B)
 
 @item W b
 @kindex W b (\e$B35N,\e(B)
@@ -8585,8 +8603,8 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 \e$B%W$K$7$P$i$/B8:_$7$F$$$?4|8B@Z$l:o=|2DG=$J$9$Y$F$N5-;v$r>C5n$9$k$H$$$&$3\e(B
 \e$B$H$G$9!#\e(B(@pxref{Expiring Mail})\e$B!#\e(B
 
-@item B M-C-e
-@kindex B M-C-e (\e$B35N,\e(B)
+@item B C-M-e
+@kindex B C-M-e (\e$B35N,\e(B)
 @findex gnus-summary-expire-articles-now
 \e$B%0%k!<%W$N$9$Y$F$N4|8B:o=|2DG=$J5-;v$r:o=|$7$^\e(B
 \e$B$9\e(B (@code{gnus-summay-expire-articles-now})\e$B!#$3$l$O8=:_$N%0%k!<%W$N3:Ev\e(B
@@ -8862,8 +8880,8 @@ Gnus \e$B$N\e(B info \e$B$N@a\e(B (node) \e$B$K0\F0$7$^$9\e(B (@code{gnus-info-find-no
 \e$B$N%a%C%;!<%8$N=89g$G$"$C$?$H$-$O!"\e(B@kbd{C-d} \e$B$H$9$k$3$H$K$h$j$b$C$HJXMx$J\e(B
 \e$BJ}K!$G$=$l$i$N%a%C%;!<%8$rFI$`;v$,$G$-$k$h$&$K$J$j$^$9!#\e(B
 
-@item M-C-d
-@kindex M-C-d (\e$B35N,\e(B)
+@item C-M-d
+@kindex C-M-d (\e$B35N,\e(B)
 @findex gnus-summary-read-document
 \e$B$3$NL?Na$O>e$N$b$N$KHs>o$K;w$F$$$^$9$,!"$$$/$D$+$NJ8=q$r0l$D$NBg!<$-$$%0\e(B
 \e$B%k!<%W$K=8$a$^$9\e(B (@code{gnus-summary-read-read-document})\e$B!#$=$l$O$$$/$D\e(B
@@ -8886,14 +8904,14 @@ Gnus \e$B$N\e(B info \e$B$N@a\e(B (node) \e$B$K0\F0$7$^$9\e(B (@code{gnus-info-find-no
 \e$B$9\e(B (@code{gnus-summary-expand-window})\e$B!#@\F,0z?t$rM?$($i$l$l$P!"\e(B
 @code{\e$B5-;v\e(B} \e$B%&%#%s%I%&$r3HBg$7$^$9!#\e(B
 
-@item M-C-e
-@kindex M-C-e (\e$B35N,\e(B)
+@item C-M-e
+@kindex C-M-e (\e$B35N,\e(B)
 @findex gnus-summary-edit-parameters
 \e$B8=:_$N%0%k!<%W$N%0%k!<%W$NG^2pJQ?t\e(B (parameter) (@pxref{Group
 Parameters}) \e$B$rJT=8$7$^$9\e(B (@code{gnus-summary-edit-parameters})\e$B!#\e(B
 
-@item M-C-a
-@kindex M-C-a (\e$B35N,\e(B)
+@item C-M-a
+@kindex C-M-a (\e$B35N,\e(B)
 @findex gnus-summary-customize-parameters
 \e$B8=:_$N%0%k!<%W$N%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$r%+%9%?%^\e(B
 \e$B%$%:$7$^$9\e(B (@code{gnus-summary-customize-parameters})\e$B!#\e(B
@@ -17817,8 +17835,8 @@ Gnus \e$B$r=*N;$9$kA0$K3NG'$rMW5a$7$^$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9
 \e$B?t\e(B---@dfn{\e$B%7%s%\%k@\F,0z?t\e(B} \e$B$r2C$($^$7$?!#@\F,%-!<\e(B
 \e$B$O\e(B @kbd{M-i} (@code{gnus-symbolic-argument}) \e$B$G!"<!$K2!$5$l$kJ8;z$,CM$G\e(B
 \e$B$9!#K>$`$@$1B?$/$N\e(B @kbd{M-i} \e$B@\F,8l$r@Q$_=E$M$k;v$,$G$-$^$9!#\e(B
-@kbd{M-i a M-C-u} \e$B$O\e(B ``\e$BL?Na\e(B @kbd{M-C-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$rM?\e(B
-\e$B$($k\e(B'' \e$B$H$$$&$3$H$G$9!#\e(B@kbd{M-i a M-i b M-C-u} \e$B$OL?Na\e(B @kbd{M-C-u} \e$B$K%7%s\e(B
+@kbd{M-i a C-M-u} \e$B$O\e(B ``\e$BL?Na\e(B @kbd{C-M-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$rM?\e(B
+\e$B$($k\e(B'' \e$B$H$$$&$3$H$G$9!#\e(B@kbd{M-i a M-i b C-M-u} \e$B$OL?Na\e(B @kbd{C-M-u} \e$B$K%7%s\e(B
 \e$B%\%k@\F,0z?t\e(B @code{a} @code{b} \e$B$rM?$($k\e(B'' \e$B$H$$$&;v$G$9!#<q;]$OJ,$+$C$?$G\e(B
 \e$B$7$g$&!#\e(B
 
@@ -18841,7 +18859,7 @@ Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r9T$J$&F0\e(B
 @findex gnus-undo
 \e$B$d$jD>$75!G=$O\e(B @code{gnus-undo-mode} \e$B%^%$%J!<%b!<%I$K$h$C$FDs6!$5$l$^$9!#\e(B
 \e$B$3$l$O\e(B @code{gnus-use-undo} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P;HMQ$5$l!"$3$l$,=i\e(B
-\e$B4|@_Dj$G$9!#\e(B@kbd{M-C-_} \e$B%-!<$,\e(B @code{gnus-undo} \e$BL?Na$r<B9T$7$^$9!#$3$l$O\e(B
+\e$B4|@_Dj$G$9!#\e(B@kbd{C-M-_} \e$B%-!<$,\e(B @code{gnus-undo} \e$BL?Na$r<B9T$7$^$9!#$3$l$O\e(B
 \e$BDL>o$N\e(B Emacs \e$B$N\e(B @code{undo} \e$BL?Na$K$A$g$C$H$@$1;w$F$$$k$H;W$o$l$k$G$7$g$&!#\e(B
 
 @node Moderation
@@ -18973,6 +18991,7 @@ Gnus \e$B$K\e(B picon \e$B$rI=<($5$;$k$K$O\e(B @code{x} \e$B%5%]!<%HIU$-$G\e(B XEmacs
 \e$B%]!<%HIU$-$G%3%s%Q%$%k$7$J$1$l$P$J$j$^$;$s!#$=$&$G$J$1$l$P!"\e(B
 @code{netpbm} \e$B%f!<%F%#%j%F%#$r%$%s%9%H!<%k$7$F$*$/$+!"$"$k$$$OB>$N2?$+$r\e(B
 \e$B;H$&$h$&$K\e(B @code{gnus-picons-convert-x-face} \e$BJQ?t$r$$$8$/$C$F$/$@$5$$!#\e(B
+(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^$9!#\e(B)
 
 @node Easy Picons
 @subsubsection \e$B3Z!9\e(B Picons
@@ -19057,8 +19076,9 @@ picon \e$B2hA|$,I=<($5$l$k>l=j!#$3$l$O=i4|@_Dj$G$O\e(B @code{picons} \e$B$G$9\e(B (\e
 \e$B%U%!$KI=<($7$^$9!#\e(B
 
 @item gnus-picons-article-display-x-face
-@findex gnus-article-display-picons
-X-Face \e$B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#\e(B
+@findex gnus-picons-article-display-x-face
+X-Face \e$B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#\e(B(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K\e(B
+\e$B$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^$9!#\e(B)
 @end table
 
 @node Picon Useless Configuration
@@ -19096,12 +19116,14 @@ X-Face \e$B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#\e(B
 @code{X-Face} \e$B%X%C%@!<$r\e(B X \e$B%S%C%H%^%C%W\e(B (@code{xbm}) \e$B$KJQ49$9$k$N$K;HMQ\e(B
 \e$B$5$l$^$9!#=i4|@_DjCM\e(B
 \e$B$O\e(B @code{(format "@{ echo '/* Width=48, Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)} \e$B$G\e(B
-\e$B$9!#\e(B
+\e$B$9!#\e(B(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^\e(B
+\e$B$9!#\e(B)
 
 @item gnus-picons-x-face-file-name
 @vindex gnus-picons-x-face-file-name
 @code{X-Face} \e$B%S%C%H%^%C%W$r3JG<$7$F$*$/0l;~%U%!%$%k$NL>A0!#=i4|@_DjCM\e(B
-\e$B$O\e(B @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}\e$B!#\e(B
+\e$B$O\e(B @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}\e$B!#\e(B(\e$BCm\e(B: \e$BJQ\e(B
+\e$B?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^$9!#\e(B)
 
 @item gnus-picons-has-modeline-p
 @vindex gnus-picons-has-modeline-p
@@ -20628,7 +20650,7 @@ Signature})\e$B!#\e(B
 \e$B;XDj$9$kJ}K!$,$"$j$^$9\e(B (@pxref{Advanced Formatting})\e$B!#\e(B
 
 @item
-\e$B%0%k!<%W%P%C%U%!$G$N$$$/$D$+$NL?Na$O\e(B @kbd{M-C-_} \e$B$G85$KLa$9;v$,$G$-$k$h\e(B
+\e$B%0%k!<%W%P%C%U%!$G$N$$$/$D$+$NL?Na$O\e(B @kbd{C-M-_} \e$B$G85$KLa$9;v$,$G$-$k$h\e(B
 \e$B$&$K$J$j$^$7$?\e(B (@pxref{Undo})\e$B!#\e(B
 
 @item
@@ -20660,7 +20682,7 @@ Signature})\e$B!#\e(B
 
 @item
 \e$BJ8=q$N=89g$rFI$`$?$a$N?7$7$$L?Na\e(B (@code{nndoc} \e$B$H\e(B @code{nnvirtual} \e$B$N>e\e(B
-\e$B$G\e(B) \e$B$,2C$($i$l$^$7$?\e(B---@kbd{M-C-d} (@pxref{Really Various Summary
+\e$B$G\e(B) \e$B$,2C$($i$l$^$7$?\e(B---@kbd{C-M-d} (@pxref{Really Various Summary
 Commands})\e$B!#\e(B
 
 @item
@@ -22759,7 +22781,7 @@ description   = <string>
 
 \e$B?.$8$k$+$I$&$+$OCN$j$^$;$s$,!"\e(Bgnus \e$B$r;H$&?M$NCf$K$O\e(B Gnus Love Boat \e$B$G$N\e(B
 \e$BN9$KEk>h$9$kA0$K$"$^$j\e(B Emacs \e$B$r;H$C$?;v$,L5$$$H$$$&?M$,$$$^$9!#$b$7$"$J\e(B
-\e$B$?$,\e(B ``@kbd{M-C-a}'' \e$B$d\e(B ``\e$B%j!<%8%g%s$r@Z$k\e(B''\e$B!"$=$7\e(B
+\e$B$?$,\e(B ``@kbd{C-M-a}'' \e$B$d\e(B ``\e$B%j!<%8%g%s$r@Z$k\e(B''\e$B!"$=$7\e(B
 \e$B$F\e(B ``@code{gnus-flargblossen} \e$B$rO"A[%j%9%H$K@_Dj$7$F$/$@$5$$!#$=$N%-!<$O\e(B
 \e$B%0%k!<%WL>$K9gCW$9$k$?$a$K;H$o$l$k@55,I=8=$G$9\e(B'' \e$B$,>/$7$N0UL#$+A4$/0UL#\e(B
 \e$B$NL5$$KbK!$N8@MU$G$"$kIT9,$J?M$G$"$l$P!"$3$NIUO?$O$"$J$?$N$?$a$K$"$j$^$9!#\e(B
@@ -22796,11 +22818,11 @@ A: \e$BC<Kv$,%Z%@%k$r;}$C$F$$$?$i$J$!$H4j$&?M$N;v$G$9!#\e(B
 \e$B$O%-!<%\!<%I$N:8<jB&$K0LCV$7$F$$$F!"IaDL$O:G2<CJ$K$"$j$^$9!#\e(B
 
 \e$B$3$l$+$i!"2f!9\e(B Emacs \e$B$N?M!9$O!"$=$l$,$"$^$j$KITJX$J$?$a!"\e(B
-``meta-control-m \e$B%-!<$r2!$9\e(B'' \e$B$H$O8@$$$^$;$s!#;d$?$A$O\e(B ``@kbd{M-C-m} \e$B$r\e(B
+``meta-control-m \e$B%-!<$r2!$9\e(B'' \e$B$H$O8@$$$^$;$s!#;d$?$A$O\e(B ``@kbd{C-M-m} \e$B$r\e(B
 \e$B2!$9\e(B'' \e$B$H8@$$$^$9!#\e(B@kbd{M-} \e$B$O\e(B ``\e$B%a%?\e(B'' \e$B$r8=$9@\F,<-$G!"\e(B``C-'' \e$B$O\e(B ``\e$B%3%s\e(B
 \e$B%H%m!<%k\e(B'' \e$B$r0UL#$9$k@\F,<-$G$9!#$G$9$+$i!"\e(B``@kbd{C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%3\e(B
 \e$B%s%H%m!<%k%-!<$r2<$K2!$7!"\e(B@kbd{k} \e$B$r2!$7$F$$$k4V!"$=$l$r2<$KJ]$A$J$5\e(B
-\e$B$$\e(B'' \e$B$H8@$&;v$G$9!#\e(B``@kbd{M-C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%a%?%-!<$H%3%s%H%m!<%k%-!<\e(B
+\e$B$$\e(B'' \e$B$H8@$&;v$G$9!#\e(B``@kbd{C-M-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%a%?%-!<$H%3%s%H%m!<%k%-!<\e(B
 \e$B$r2!$7$F2<$KJ]$C$?8e$G\e(B @kbd{k} \e$B$r2!$9\e(B'' \e$B$H8@$&;v$G$9!#4JC1$G$7$g!#$M\e(B?
 
 \e$B$3$l$OA4$F$N%-!<%\!<%I$,%a%?%-!<$r;}$C$F$$$k$o$1$G$O$J$$$H8@$&;v<B$K$h$j\e(B
index fa94f95..03190ca 100644 (file)
@@ -2049,8 +2049,8 @@ This is yet one more command that does the same as the @kbd{RET}
 command, but this one does it without expunging and hiding dormants
 (@code{gnus-group-visible-select-group}).
 
-@item M-C-RET
-@kindex M-C-RET (Group)
+@item C-M-RET
+@kindex C-M-RET (Group)
 @findex gnus-group-select-group-ephemerally
 Finally, this command selects the current group ephemerally without
 doing any processing of its contents
@@ -3230,8 +3230,8 @@ process (if any) (@code{gnus-group-expire-articles}).  That is, delete
 all expirable articles in the group that have been around for a while.
 (@pxref{Expiring Mail}).
 
-@item C-c M-C-x
-@kindex C-c M-C-x (Group)
+@item C-c C-M-x
+@kindex C-c C-M-x (Group)
 @findex gnus-group-expire-all-groups
 Run all expirable articles in all groups through the expiry process
 (@code{gnus-group-expire-all-groups}).
@@ -4110,12 +4110,30 @@ script that can be transfered to the server somehow.
 @vindex gnus-sieve-region-start
 @vindex gnus-sieve-region-end
 The generated Sieve script is placed in @code{gnus-sieve-file} (by
-default @file{~/.sieve}).  The code Gnus generates is placed between
-two delimiters, @code{gnus-sieve-region-start} and
+default @file{~/.sieve}).  The Sieve code that Gnus generate is placed
+between two delimiters, @code{gnus-sieve-region-start} and
 @code{gnus-sieve-region-end}, so you may write additional Sieve code
 outside these delimiters that will not be removed the next time you
 regenerate the Sieve script.
 
+@vindex gnus-sieve-crosspost
+The variable @code{gnus-sieve-crosspost} controls how the Sieve script
+is generated.  If it is non-nil (the default) articles is placed in
+all groups that have matching rules, otherwise the article is only
+placed in the group with the first matching rule.  For example, the
+group parameter @samp{(sieve address "sender"
+"owner-ding@@hpc.uh.edu")} will generate the following piece of Sieve
+code if @code{gnus-sieve-crosspost} is nil. (When
+@code{gnus-sieve-crosspost} is non-nil, it looks the same except that
+the line containing the call to @code{stop} is removed.)
+
+@example
+if address "sender" "owner-ding@@hpc.uh.edu" @{
+       fileinto "INBOX.ding";
+       stop;
+@}
+@end example
+
 @xref{Top, ,Top, sieve, Emacs Sieve}.
 
 @table @kbd
@@ -6327,9 +6345,9 @@ meaningful.  Here's one example:
 @table @kbd
 
 @item T k
-@itemx M-C-k
+@itemx C-M-k
 @kindex T k (Summary)
-@kindex M-C-k (Summary)
+@kindex C-M-k (Summary)
 @findex gnus-summary-kill-thread
 Mark all articles in the current (sub-)thread as read
 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
@@ -6337,9 +6355,9 @@ remove all marks instead.  If the prefix argument is negative, tick
 articles instead.
 
 @item T l
-@itemx M-C-l
+@itemx C-M-l
 @kindex T l (Summary)
-@kindex M-C-l (Summary)
+@kindex C-M-l (Summary)
 @findex gnus-summary-lower-thread
 Lower the score of the current (sub-)thread
 (@code{gnus-summary-lower-thread}).
@@ -6410,8 +6428,8 @@ understand the numeric prefix.
 
 @item T n
 @kindex T n (Summary)
-@itemx M-C-n
-@kindex M-C-n (Summary)
+@itemx C-M-n
+@kindex C-M-n (Summary)
 @itemx M-down
 @kindex M-down (Summary)
 @findex gnus-summary-next-thread
@@ -6419,8 +6437,8 @@ Go to the next thread (@code{gnus-summary-next-thread}).
 
 @item T p
 @kindex T p (Summary)
-@itemx M-C-p
-@kindex M-C-p (Summary)
+@itemx C-M-p
+@kindex C-M-p (Summary)
 @itemx M-up
 @kindex M-up (Summary)
 @findex gnus-summary-prev-thread
@@ -7988,19 +8006,19 @@ sub-shell.  If it is a function, this function will be called with the
 face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
 is a regexp) matches the @code{From} header, the face will not be shown.
 The default action under Emacs is to fork off the @code{display}
-program@footnote{@code{display} is from the ImageMagick package.  For the
-@code{uncompface} and @code{icontopbm} programs look for a package
-like `compface' or `faces-xface' on a GNU/Linux system.}
-to view the face.  Under XEmacs or Emacs 21+ with suitable image
-support, the default action is to display the face before the
-@code{From} header.  (It's nicer if XEmacs has been compiled with X-Face
-support---that will make display somewhat faster.  If there's no native
-X-Face support, Gnus will try to convert the @code{X-Face} header using
-external programs from the @code{pbmplus} package and
-friends.@footnote{On a GNU/Linux system look for packages with names
-like @code{netpbm} or @code{libgr-progs}.})  If you
-want to have this function in the display hook, it should probably come
-last.
+program@footnote{@code{display} is from the ImageMagick package.  For
+the @code{uncompface} and @code{icontopbm} programs look for a package
+like `compface' or `faces-xface' on a GNU/Linux system.}  to view the
+face.  Under XEmacs or Emacs 21+ with suitable image support, the
+default action is to display the face before the @code{From} header.
+(It's nicer if XEmacs has been compiled with X-Face support---that will
+make display somewhat faster.  If there's no native X-Face support, Gnus
+will try to convert the @code{X-Face} header using external programs
+from the @code{pbmplus} package and friends.@footnote{On a GNU/Linux
+system look for packages with names like @code{netpbm} or
+@code{libgr-progs}.})  If you want to have this function in the display
+hook, it should probably come last.  
+(NOTE: @code{x-face} is used in the variable/function names, not @code{xface}).
 
 @item W b
 @kindex W b (Summary)
@@ -9055,8 +9073,8 @@ process (@code{gnus-summary-expire-articles}).  That is, delete all
 expirable articles in the group that have been around for a while.
 (@pxref{Expiring Mail}).
 
-@item B M-C-e
-@kindex B M-C-e (Summary)
+@item B C-M-e
+@kindex B C-M-e (Summary)
 @findex gnus-summary-expire-articles-now
 Delete all the expirable articles in the group
 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
@@ -9348,8 +9366,8 @@ whenever you see a message that is a collection of other messages of
 some format, you @kbd{C-d} and read these messages in a more convenient
 fashion.
 
-@item M-C-d
-@kindex M-C-d (Summary)
+@item C-M-d
+@kindex C-M-d (Summary)
 @findex gnus-summary-read-document
 This command is very similar to the one above, but lets you gather
 several documents into one biiig group
@@ -9373,14 +9391,14 @@ to have truncation switched off while reading articles.
 Expand the summary buffer window (@code{gnus-summary-expand-window}).
 If given a prefix, force an @code{article} window configuration.
 
-@item M-C-e
-@kindex M-C-e (Summary)
+@item C-M-e
+@kindex C-M-e (Summary)
 @findex gnus-summary-edit-parameters
 Edit the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-edit-parameters}).
 
-@item M-C-a
-@kindex M-C-a (Summary)
+@item C-M-a
+@kindex C-M-a (Summary)
 @findex gnus-summary-customize-parameters
 Customize the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-customize-parameters}).
@@ -18202,9 +18220,9 @@ same time?  You can't, and you're probably perfectly happy that way.
 I'm not, so I've added a second prefix---the @dfn{symbolic prefix}.  The
 prefix key is @kbd{M-i} (@code{gnus-symbolic-argument}), and the next
 character typed in is the value.  You can stack as many @kbd{M-i}
-prefixes as you want.  @kbd{M-i a M-C-u} means ``feed the @kbd{M-C-u}
-command the symbolic prefix @code{a}''.  @kbd{M-i a M-i b M-C-u} means
-``feed the @kbd{M-C-u} command the symbolic prefixes @code{a} and
+prefixes as you want.  @kbd{M-i a C-M-u} means ``feed the @kbd{C-M-u}
+command the symbolic prefix @code{a}''.  @kbd{M-i a M-i b C-M-u} means
+``feed the @kbd{C-M-u} command the symbolic prefixes @code{a} and
 @code{b}''.  You get the drift.
 
 Typing in symbolic prefixes to commands that don't accept them doesn't
@@ -19273,7 +19291,7 @@ never be totally undoable.
 @findex gnus-undo
 The undoability is provided by the @code{gnus-undo-mode} minor mode.  It
 is used if @code{gnus-use-undo} is non-@code{nil}, which is the
-default.  The @kbd{M-C-_} key performs the @code{gnus-undo}
+default.  The @kbd{C-M-_} key performs the @code{gnus-undo}
 command, which should feel kinda like the normal Emacs @code{undo}
 command.
 
@@ -19408,7 +19426,7 @@ If you want to display faces from @code{X-Face} headers, you should have
 the @code{xface} support compiled into XEmacs.  Otherwise you must have
 the @code{netpbm} utilities installed, or munge the
 @code{gnus-picons-convert-x-face} variable to use something else.
-
+(NOTE: @code{x-face} is used in the variable name, not @code{xface})
 
 @node Easy Picons
 @subsubsection Easy Picons
@@ -19497,8 +19515,9 @@ Looks up and displays the picons for the author and the author's domain
 in the @code{gnus-picons-display-where} buffer.
 
 @item gnus-picons-article-display-x-face
-@findex gnus-article-display-picons
+@findex gnus-picons-article-display-x-face
 Decodes and displays the X-Face header if present.
+(NOTE: @code{x-face} is used in the function name, not @code{xface})
 
 @end table
 
@@ -19542,11 +19561,13 @@ command to use to convert the @code{X-Face} header to an X bitmap
 (@code{xbm}).  Defaults to @code{(format "@{ echo '/* Width=48,
 Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s"
 gnus-picons-x-face-file-name)}
+(NOTE: @code{x-face} is used in the variable name, not @code{xface})
 
 @item gnus-picons-x-face-file-name
 @vindex gnus-picons-x-face-file-name
 Names a temporary file to store the @code{X-Face} bitmap in.  Defaults
 to @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}.
+(NOTE: @code{x-face} is used in the variable name, not @code{xface})
 
 @item gnus-picons-has-modeline-p
 @vindex gnus-picons-has-modeline-p
@@ -21074,7 +21095,7 @@ There's a way now to specify that ``uninteresting'' fields be suppressed
 when generating lines in buffers (@pxref{Advanced Formatting}).
 
 @item
-Several commands in the group buffer can be undone with @kbd{M-C-_}
+Several commands in the group buffer can be undone with @kbd{C-M-_}
 (@pxref{Undo}).
 
 @item
@@ -21106,7 +21127,7 @@ the native server (@pxref{Changing Servers}).
 
 @item
 A new command for reading collections of documents
-(@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{M-C-d}
+(@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{C-M-d}
 (@pxref{Really Various Summary Commands}).
 
 @item
@@ -23294,7 +23315,7 @@ description   = <string>
 
 Believe it or not, but some people who use Gnus haven't really used
 Emacs much before they embarked on their journey on the Gnus Love Boat.
-If you are one of those unfortunates whom ``@kbd{M-C-a}'', ``kill the
+If you are one of those unfortunates whom ``@kbd{C-M-a}'', ``kill the
 region'', and ``set @code{gnus-flargblossen} to an alist where the key
 is a regexp that is used for matching on the group name'' are magical
 phrases with little or no meaning, then this appendix is for you.  If
@@ -23334,11 +23355,11 @@ which is the meta key on this keyboard.  It's usually located somewhere
 to the left hand side of the keyboard, usually on the bottom row.
 
 Now, us Emacs people don't say ``press the meta-control-m key'',
-because that's just too inconvenient.  We say ``press the @kbd{M-C-m}
+because that's just too inconvenient.  We say ``press the @kbd{C-M-m}
 key''.  @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the
 prefix that means ``control''.  So ``press @kbd{C-k}'' means ``press
 down the control key, and hold it down while you press @kbd{k}''.
-``Press @kbd{M-C-k}'' means ``press down and hold down the meta key and
+``Press @kbd{C-M-k}'' means ``press down and hold down the meta key and
 the control key and then press @kbd{k}''.  Simple, ay?
 
 This is somewhat complicated by the fact that not all keyboards have a
diff --git a/texi/herds/new-herd-10.png b/texi/herds/new-herd-10.png
deleted file mode 100644 (file)
index dc26eb4..0000000
Binary files a/texi/herds/new-herd-10.png and /dev/null differ
index 0ec7123..f30b4e3 100644 (file)
@@ -434,8 +434,8 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 \e$BE=$jIU$1$^$9!#IaDL$O\e(B @code{gnus-article-copy} \e$B$O$"$J$?$,JVEz$7$h$&$H$7$F\e(B
 \e$B$$$k%a%C%;!<%8$G$9\e(B (@code{messsage-yank-original})\e$B!#\e(B
 
-@item C-c M-C-y
-@kindex C-c M-C-y
+@item C-c C-M-y
+@kindex C-c C-M-y
 @findex message-yank-buffer
 Prompt for a buffer name and yank the contents of that buffer into the
 message buffer (@code{message-yank-buffer}).
index 4704117..c7a5910 100644 (file)
@@ -450,8 +450,8 @@ Yank the message in the buffer @code{gnus-article-copy} into the message
 buffer. Normally @code{gnus-article-copy} is what you are replying to
 (@code{message-yank-original}).
 
-@item C-c M-C-y
-@kindex C-c M-C-y
+@item C-c C-M-y
+@kindex C-c C-M-y
 @findex message-yank-buffer
 Prompt for a buffer name and yank the contents of that buffer into the
 message buffer (@code{message-yank-buffer}).
index e41dabe..644ad50 100644 (file)
@@ -9,7 +9,7 @@ summary-article-c-ug.ps summary-article.ps summary-dummy.ps             \
 summary-empty.ps summary-none.ps summary-unthreaded.ps summary.ps
 
 HERDS_PS= gnus-herd-bw.ps gnus-herd-new.ps new-herd-1.ps               \
-new-herd-10.ps new-herd-2.ps new-herd-3.ps new-herd-4.ps new-herd-5.ps \
+ new-herd-2.ps new-herd-3.ps new-herd-4.ps new-herd-5.ps       \
 new-herd-6.ps new-herd-7.ps new-herd-8.ps new-herd-9.ps                        \
 new-herd-section.ps new-herd.ps new-herd2.ps
 
@@ -71,7 +71,7 @@ summary-article-c-ug.pdf summary-article.pdf summary-dummy.pdf                \
 summary-empty.pdf summary-none.pdf summary-unthreaded.pdf summary.pdf
 
 HERDS_PDF= gnus-herd-bw.pdf gnus-herd-new.pdf new-herd-1.pdf   \
-new-herd-10.pdf new-herd-2.pdf new-herd-3.pdf new-herd-4.pdf   \
+ new-herd-2.pdf new-herd-3.pdf new-herd-4.pdf  \
 new-herd-5.pdf new-herd-6.pdf new-herd-7.pdf new-herd-8.pdf    \
 new-herd-9.pdf new-herd-section.pdf new-herd.pdf new-herd2.pdf
 
index 8fe8500..a2894f0 100644 (file)
@@ -106,6 +106,8 @@ commands in your @code{~/.emacs}:
 
 @lisp
 (autoload 'sieve-mode "sieve-mode")
+@end lisp
+@lisp
 (setq auto-mode-alist (cons '("\\.si\\(v\\|eve\\)\\'" . sieve-mode)
                             auto-mode-alist))
 @end lisp
@@ -188,8 +190,8 @@ Activates the currently highlighted script.
 @findex sieve-deactivate
 Deactivates the currently highlighted script.
 
-@item M-C-?
-@kindex M-C-?
+@item C-M-?
+@kindex C-M-?
 @findex sieve-deactivate-all
 Deactivates all scripts.
 
index bab1b6b..a53e6f5 100644 (file)
@@ -37,7 +37,8 @@
   (latexi-translate-file "gnus")
   (latexi-translate-file "gnus-faq")
   (latexi-translate-file "message" t)
-  (latexi-translate-file "emacs-mime" t))
+  (latexi-translate-file "emacs-mime" t)
+  (latexi-translate-file "sieve" t))
 
 (defun latexi-translate-file (file &optional as-a-chapter)
   "Translate file a LaTeX file."
                    (latexi-switch-line 
                     (format 
                      "gnus%s{%s}" command
-                     (if (> (incf chapter) 10)
-                         ""
-                       (format "\\epsfig{figure=ps/new-herd-%d,scale=.5}"
-                               chapter)))
+                     (format "\\epsfig{figure=ps/new-herd-%d,scale=.5}"
+                             (if (> (incf chapter) 9) 9 chapter)))
                     arg))))
               ((member command '("section"))
                (if as-a-chapter
diff --git a/todo b/todo
index daa6f67..66571dd 100644 (file)
--- a/todo
+++ b/todo
@@ -1,7 +1,18 @@
 ;; Also know as the "wish list".  Some are done. For the others, no
 ;; promise when to be implemented.
 
+* Google group digest
+  
+  The result of Google group search return a thread. Is it a digest
+  format?
+
+* NOV caching.
+  
+  Implement NOV caching with Gnus Agent.
+
 * Multiple charsets for topic names.
+  
+  [Done]
 
 * Allow specification of server in Newsgroups header
   
@@ -1476,6 +1487,8 @@ exceeding lisp nesting on huge groups.
 
 * Be able to run `J u' from summary buffers.
 
+  [Done]
+
 * Solve the halting problem.
 
 \f