From: yamaoka Date: Mon, 5 Nov 2001 01:01:17 +0000 (+0000) Subject: Synch with Oort Gnus. X-Git-Tag: t-gnus-6_15_4-08-quimby-last-~23 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2355cf2abc48a6231599d143b34d59fa888e708e;p=elisp%2Fgnus.git- Synch with Oort Gnus. --- diff --git a/ChangeLog b/ChangeLog index 3bcd175..a17a4d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-11-01 07:00:00 ShengHuo ZHU + + * etc/smilies/blink.xpm: New set of xpm. From Oliver Scholz + . + 2001-10-29 Per Abrahamsen * etc/smilies/sad.pbm: New bitmap. diff --git a/etc/smilies/blink.xpm b/etc/smilies/blink.xpm new file mode 100644 index 0000000..1813780 --- /dev/null +++ b/etc/smilies/blink.xpm @@ -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 index 0000000..25bd3e7 --- /dev/null +++ b/etc/smilies/braindamaged.xpm @@ -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 index 0000000..fa9c38f --- /dev/null +++ b/etc/smilies/dead.xpm @@ -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 index 0000000..c364ac3 --- /dev/null +++ b/etc/smilies/evil.xpm @@ -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 index 0000000..d4bb256 --- /dev/null +++ b/etc/smilies/forced.xpm @@ -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 index 0000000..b4fd03b --- /dev/null +++ b/etc/smilies/frown.xpm @@ -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 index 0000000..6395238 --- /dev/null +++ b/etc/smilies/indifferent.xpm @@ -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 index 0000000..c445377 --- /dev/null +++ b/etc/smilies/sad.xpm @@ -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 index 0000000..cc2d2ad --- /dev/null +++ b/etc/smilies/smile.xpm @@ -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 index 0000000..58f42ce --- /dev/null +++ b/etc/smilies/wry.xpm @@ -0,0 +1,20 @@ +/* XPM */ +static char * wry_xpm[] = { +"13 14 3 1", +" c None", +". c #000000", +"+ c #FFDD00", +" ....... ", +" ..+++++.. ", +" .+++++++++. ", +".+++++++++++.", +".++..+++..++.", +".++..+++..++.", +".+++++++++++.", +".+++++++++++.", +".++++++++..+.", +".++++++..+++.", +".++++..+++++.", +" .+++++++++. ", +" ..+++++.. ", +" ....... "}; diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 934fb4f..37c8b48 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,113 @@ +2001-11-04 10:00:00 ShengHuo ZHU + + * 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 . + + * gnus-topic.el (gnus-topic-rename): Initial-input. + Suggested by Katsuhiro Hermit Endo . + +2001-11-03 Per Abrahamsen + + * 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 + + * mm-util.el (mm-iso-8859-15-compatible): Fix doc. + (mm-hack-charsets): Fix doc. + +2001-11-02 Simon Josefsson + + * 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 + + * 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 + + * 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 + + * gnus-msg.el (gnus-copy-article-buffer): Copy sequence. + +2001-11-01 12:00:00 ShengHuo ZHU + + * 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 + + * mm-util.el (mm-charset-synonym-alist): Revert (some). + +2001-11-01 09:00:00 ShengHuo ZHU + + * 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 + + * gnus-group.el (gnus-group-make-menu-bar): Add Sieve. + +2001-11-01 08:00:00 ShengHuo ZHU + + * mm-util.el (mm-charset-to-coding-system): Return nil, if charset + is nil. + +2001-11-01 07:00:00 ShengHuo ZHU + + * 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 + + * sieve.el: Don't require easy-mmode. Suggested by Katsumi Yamaoka + . + 2001-10-31 20:00:00 ShengHuo ZHU * sieve-manage.el (sieve-string-bytes): No complain. diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index f7d7796..b6ced4a 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -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)) diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index a38020a..ffab7ca 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -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 diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 0fb9a18..d3fd3e0 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -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." diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index 7a26243..e0908e1 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -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) diff --git a/lisp/gnus-sieve.el b/lisp/gnus-sieve.el index e3477de..0e52cac 100644 --- a/lisp/gnus-sieve.el +++ b/lisp/gnus-sieve.el @@ -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) diff --git a/lisp/gnus-topic.el b/lisp/gnus-topic.el index bca0737..0d5e04a 100644 --- a/lisp/gnus-topic.el +++ b/lisp/gnus-topic.el @@ -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)) diff --git a/lisp/imap.el b/lisp/imap.el index b082201..2c402c2 100644 --- a/lisp/imap.el +++ b/lisp/imap.el @@ -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.") + ;; 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." ;; 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 ;; diff --git a/lisp/lpath.el b/lisp/lpath.el index 1d5ecb5..188dcd0 100644 --- a/lisp/lpath.el +++ b/lisp/lpath.el @@ -18,12 +18,13 @@ 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 diff --git a/lisp/message.el b/lisp/message.el index b3d7570..9158811 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -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." diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index dacb792..1241326 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -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. diff --git a/lisp/mm-util.el b/lisp/mm-util.el index cbf1ca0..18c144b 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -111,28 +111,29 @@ (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.") @@ -165,7 +166,7 @@ "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. @@ -240,6 +241,36 @@ (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'. diff --git a/lisp/mml.el b/lisp/mml.el index a16c613..4ab18fc 100644 --- a/lisp/mml.el +++ b/lisp/mml.el @@ -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) diff --git a/lisp/nnimap.el b/lisp/nnimap.el index c88021c..48b43e1 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -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) diff --git a/lisp/sieve.el b/lisp/sieve.el index fbcaaba..d40efa2 100644 --- a/lisp/sieve.el +++ b/lisp/sieve.el @@ -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 diff --git a/lisp/smiley-ems.el b/lisp/smiley-ems.el index 876c88c..9b4020b 100644 --- a/lisp/smiley-ems.el +++ b/lisp/smiley-ems.el @@ -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 diff --git a/texi/ChangeLog b/texi/ChangeLog index f59f910..a8806e5 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,32 @@ +2001-11-04 09:00:00 ShengHuo ZHU + + * gnus.texi: Use C-M- instead of M-C-. + * message.texi (Insertion): Ditto. + * sieve.texi (Managing Sieve): Ditto. + Suggested by Eli Zaretskii . + +2001-11-02 Simon Josefsson + + * dir (File): Add Sieve. + + * gnus.texi (Sieve Commands): Add crossposting. + +2001-11-01 23:00:00 ShengHuo ZHU + + * texi2latex.el (latexi-translate): Typo. + (latexi-translate-file): Nine in a herd is enough. + +2001-11-01 Simon Josefsson + + * 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 + + * gnus.texi (Article Washing): Add a note. + 2001-11-01 Simon Josefsson * Makefile.in: Add sieve. diff --git a/texi/dir b/texi/dir index bb68184..3877572 100644 --- 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. diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 7eee151..a640d28 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -2166,8 +2166,8 @@ Gnus $B$O(B @code{gnus-user-format-function-}@samp{X} $B4X?t$r8F$S=P$7$^$9!#$ $B$3$N%3%^%s%I$O5-;v>C5n$HJ]N15-;v$r1#$9=hM}$r9T$$$^$;(B $B$s(B (@code{gnus-group-visible-select-group})$B!#(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 $B:G8e$K$3$N%3%^%s%I$O!"8=:_$N%0%k!<%W$r0lEY8B$j!"$=$NFbMF$K0l@Z$N=hM}$r$9(B $B$k$3$H$N$J$$$h$&$KA*Br$7$^(B @@ -3301,8 +3301,8 @@ kill $B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9(B (@code{gnus-group-list-killed})$B!#@\ $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(B $B$9!#(B(@pxref{Expiring Mail})$B!#(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 $BA4$F$N%0%k!<%W$NA4$F$N4|8B@Z$l:o=|2DG=$J5-;v$KBP$7$F!"%(%/%9%Q%$%"=hM}$r(B $B9T$$$^$9!#(B(@code{gnus-group-expire-all-groups})$B!#(B @@ -4157,6 +4157,23 @@ Sieve $B$O%5!<%P!C$5$l$F$7$^$&$3$H$O$"$j$^$;$s!#(B +@vindex gnus-sieve-crosspost +$BJQ?t(B @code{gnus-sieve-crosspost} $B$O(B Sieve $B%9%/%j%W%H$,$I$N$h$&$K:n$i$l$k(B +$B$+$r@)8f$7$^$9!#$b$7Hs(B-nil ($B%G%#%U%)%k%H(B) $B$@$C$?$i5-;v$O5,B'$K%^%C%A$9$k(B +$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(B +$B$k%0%k!<%W$@$1$KCV$+$l$^$9!#Nc$($P%0%k!<%W%Q%i%a!<%?(B @samp{(sieve +address "sender" "owner-ding@@hpc.uh.edu")} $B$O!"(B +@code{gnus-sieve-crosspost} $B$,(B nil $B$@$C$?$i0J2<$N(B Sieve $B%3!<%I$NCGJR$r:n(B +$B$j$^$9!#(B(@code{gnus-sieve-crosspost} $B$,Hs(B-nil $B$@$C$?>l9g$O!"9T$,4^(B +$B$`(B @code{stop} $B$N8F$S=P$7$,:o=|$5$l$k$3$H0J30$OF1$8$G$9!#(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 $B$OA4$F$N5-;v$N40A4$J(B @code{References} $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 ($B35N,(B) -@kindex M-C-k ($B35N,(B) +@kindex C-M-k ($B35N,(B) @findex gnus-summary-kill-thread $B8=:_$N(B ($BItJ,(B) $B%9%l%C%I$K4{FI$N0u$rIU$1$^(B $B$9(B (@code{gnus-summary-kill-thread})$B!#$b$7@\F,0z?t$,@5$G$"$k$H!"Be$o$j$K(B @@ -6261,9 +6278,9 @@ gnus $B$OA4$F$N5-;v$N40A4$J(B @code{References} $BMs$r8+$F!"F1$8%9%l%C%I$KB0$ $B$9!#(B @item T l -@itemx M-C-l +@itemx C-M-l @kindex T l ($B35N,(B) -@kindex M-C-l ($B35N,(B) +@kindex C-M-l ($B35N,(B) @findex gnus-summary-lower-thread $B8=:_$N(B ($BItJ,(B) $B%9%l%C%I$N%9%3%"$r2<$2$^(B $B$9(B (@code{gnus-summary-lower-thread})$B!#(B @@ -6333,8 +6350,8 @@ gnus $B$OA4$F$N5-;v$N40A4$J(B @code{References} $BMs$r8+$F!"F1$8%9%l%C%I$KB0$ @table @kbd @item T n @kindex T n ($B35N,(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 $B$OA4$F$N5-;v$N40A4$J(B @code{References} $BMs$r8+$F!"F1$8%9%l%C%I$KB0$ @item T p @kindex T p ($B35N,(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 $B$^$?$O(B HZP $B$r=hM}$7$^$9!#(BHZ ($B$^$?$O(B HZP) $B$OCf9q8l$N5-;v$ $B$7:,K\E*(B X-Face $B5!G=$,$J$$$N$G$"$l$P!"(Bgnus $B$O(B @code{pbmplus} $B$d$=$NCg4V(B $B$N30It%W%m%0%i%`$r;H$C$F(B @code{X-Face} $BMs$rJQ49$7$h$&$H;n$_$^$9!#(B) $B$3$N(B $B4X?t$rI=<(%U%C%/$KF~$l$?$$$N$G$"$l$P!"$*$=$i$/$=$l$O:G8e$K$J$k$Y$-$G$7$g(B -$B$&!#(B +$B$&!#(B($BCm(B: $BJQ?t(B/$B4X?tL>$K$O(B @code{xface} $B$G$O$J$/(B @code{x-face} $B$,;H$o$l$^(B +$B$9!#(B) @item W b @kindex W b ($B35N,(B) @@ -8585,8 +8603,8 @@ Line Formatting})$B!#%G%#%U%)%k%H$O(B @samp{Gnus: %%b %S %Z} $B$G$9!#;HMQ2DG= $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(B $B$H$G$9!#(B(@pxref{Expiring Mail})$B!#(B -@item B M-C-e -@kindex B M-C-e ($B35N,(B) +@item B C-M-e +@kindex B C-M-e ($B35N,(B) @findex gnus-summary-expire-articles-now $B%0%k!<%W$N$9$Y$F$N4|8B:o=|2DG=$J5-;v$r:o=|$7$^(B $B$9(B (@code{gnus-summay-expire-articles-now})$B!#$3$l$O8=:_$N%0%k!<%W$N3:Ev(B @@ -8862,8 +8880,8 @@ Gnus $B$N(B info $B$N@a(B (node) $B$K0\F0$7$^$9(B (@code{gnus-info-find-no $B$N%a%C%;!<%8$N=89g$G$"$C$?$H$-$O!"(B@kbd{C-d} $B$H$9$k$3$H$K$h$j$b$C$HJXMx$J(B $BJ}K!$G$=$l$i$N%a%C%;!<%8$rFI$`;v$,$G$-$k$h$&$K$J$j$^$9!#(B -@item M-C-d -@kindex M-C-d ($B35N,(B) +@item C-M-d +@kindex C-M-d ($B35N,(B) @findex gnus-summary-read-document $B$3$NL?Na$O>e$N$b$N$KHs>o$K;w$F$$$^$9$,!"$$$/$D$+$NJ8=q$r0l$D$NBg!<$-$$%0(B $B%k!<%W$K=8$a$^$9(B (@code{gnus-summary-read-read-document})$B!#$=$l$O$$$/$D(B @@ -8886,14 +8904,14 @@ Gnus $B$N(B info $B$N@a(B (node) $B$K0\F0$7$^$9(B (@code{gnus-info-find-no $B$9(B (@code{gnus-summary-expand-window})$B!#@\F,0z?t$rM?$($i$l$l$P!"(B @code{$B5-;v(B} $B%&%#%s%I%&$r3HBg$7$^$9!#(B -@item M-C-e -@kindex M-C-e ($B35N,(B) +@item C-M-e +@kindex C-M-e ($B35N,(B) @findex gnus-summary-edit-parameters $B8=:_$N%0%k!<%W$N%0%k!<%W$NG^2pJQ?t(B (parameter) (@pxref{Group Parameters}) $B$rJT=8$7$^$9(B (@code{gnus-summary-edit-parameters})$B!#(B -@item M-C-a -@kindex M-C-a ($B35N,(B) +@item C-M-a +@kindex C-M-a ($B35N,(B) @findex gnus-summary-customize-parameters $B8=:_$N%0%k!<%W$N%0%k!<%W%Q%i%a!<%?(B (@pxref{Group Parameters}) $B$r%+%9%?%^(B $B%$%:$7$^$9(B (@code{gnus-summary-customize-parameters})$B!#(B @@ -17817,8 +17835,8 @@ Gnus $B$r=*N;$9$kA0$K3NG'$rMW5a$7$^$9!#$3$NJQ?t$O=i4|@_Dj$G(B @code{t} $B$G$9 $B?t(B---@dfn{$B%7%s%\%k@\F,0z?t(B} $B$r2C$($^$7$?!#@\F,%-!<(B $B$O(B @kbd{M-i} (@code{gnus-symbolic-argument}) $B$G!"$`$@$1B?$/$N(B @kbd{M-i} $B@\F,8l$r@Q$_=E$M$k;v$,$G$-$^$9!#(B -@kbd{M-i a M-C-u} $B$O(B ``$BL?Na(B @kbd{M-C-u} $B$K%7%s%\%k@\F,0z?t(B @code{a} $B$rM?(B -$B$($k(B'' $B$H$$$&$3$H$G$9!#(B@kbd{M-i a M-i b M-C-u} $B$OL?Na(B @kbd{M-C-u} $B$K%7%s(B +@kbd{M-i a C-M-u} $B$O(B ``$BL?Na(B @kbd{C-M-u} $B$K%7%s%\%k@\F,0z?t(B @code{a} $B$rM?(B +$B$($k(B'' $B$H$$$&$3$H$G$9!#(B@kbd{M-i a M-i b C-M-u} $B$OL?Na(B @kbd{C-M-u} $B$K%7%s(B $B%\%k@\F,0z?t(B @code{a} @code{b} $B$rM?$($k(B'' $B$H$$$&;v$G$9!#$75!G=$O(B @code{gnus-undo-mode} $B%^%$%J!<%b!<%I$K$h$C$FDs6!$5$l$^$9!#(B $B$3$l$O(B @code{gnus-use-undo} $B$,(B @code{nil} $B0J30$G$"$l$P;HMQ$5$l!"$3$l$,=i(B -$B4|@_Dj$G$9!#(B@kbd{M-C-_} $B%-!<$,(B @code{gnus-undo} $BL?Na$ro$N(B Emacs $B$N(B @code{undo} $BL?Na$K$A$g$C$H$@$1;w$F$$$k$H;W$o$l$k$G$7$g$&!#(B @node Moderation @@ -18973,6 +18991,7 @@ Gnus $B$K(B picon $B$rI=<($5$;$k$K$O(B @code{x} $B%5%]!<%HIU$-$G(B XEmacs $B%]!<%HIU$-$G%3%s%Q%$%k$7$J$1$l$P$J$j$^$;$s!#$=$&$G$J$1$l$P!"(B @code{netpbm} $B%f!<%F%#%j%F%#$r%$%s%9%H!<%k$7$F$*$/$+!"$"$k$$$OB>$N2?$+$r(B $B;H$&$h$&$K(B @code{gnus-picons-convert-x-face} $BJQ?t$r$$$8$/$C$F$/$@$5$$!#(B +($BCm(B: $BJQ?t(B/$B4X?tL>$K$O(B @code{xface} $B$G$O$J$/(B @code{x-face} $B$,;H$o$l$^$9!#(B) @node Easy Picons @subsubsection $B3Z!9(B Picons @@ -19057,8 +19076,9 @@ picon $B2hA|$,I=<($5$l$k>l=j!#$3$l$O=i4|@_Dj$G$O(B @code{picons} $B$G$9(B ( $B%U%!$KI=<($7$^$9!#(B @item gnus-picons-article-display-x-face -@findex gnus-article-display-picons -X-Face $B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#(B +@findex gnus-picons-article-display-x-face +X-Face $B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#(B($BCm(B: $BJQ?t(B/$B4X?tL>$K(B +$B$O(B @code{xface} $B$G$O$J$/(B @code{x-face} $B$,;H$o$l$^$9!#(B) @end table @node Picon Useless Configuration @@ -19096,12 +19116,14 @@ X-Face $B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#(B @code{X-Face} $B%X%C%@!<$r(B X $B%S%C%H%^%C%W(B (@code{xbm}) $B$KJQ49$9$k$N$K;HMQ(B $B$5$l$^$9!#=i4|@_DjCM(B $B$O(B @code{(format "@{ echo '/* Width=48, Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)} $B$G(B -$B$9!#(B +$B$9!#(B($BCm(B: $BJQ?t(B/$B4X?tL>$K$O(B @code{xface} $B$G$O$J$/(B @code{x-face} $B$,;H$o$l$^(B +$B$9!#(B) @item gnus-picons-x-face-file-name @vindex gnus-picons-x-face-file-name @code{X-Face} $B%S%C%H%^%C%W$r3JG<$7$F$*$/0l;~%U%!%$%k$NL>A0!#=i4|@_DjCM(B -$B$O(B @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}$B!#(B +$B$O(B @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}$B!#(B($BCm(B: $BJQ(B +$B?t(B/$B4X?tL>$K$O(B @code{xface} $B$G$O$J$/(B @code{x-face} $B$,;H$o$l$^$9!#(B) @item gnus-picons-has-modeline-p @vindex gnus-picons-has-modeline-p @@ -20628,7 +20650,7 @@ Signature})$B!#(B $B;XDj$9$kJ}K!$,$"$j$^$9(B (@pxref{Advanced Formatting})$B!#(B @item -$B%0%k!<%W%P%C%U%!$G$N$$$/$D$+$NL?Na$O(B @kbd{M-C-_} $B$G85$KLa$9;v$,$G$-$k$h(B +$B%0%k!<%W%P%C%U%!$G$N$$$/$D$+$NL?Na$O(B @kbd{C-M-_} $B$G85$KLa$9;v$,$G$-$k$h(B $B$&$K$J$j$^$7$?(B (@pxref{Undo})$B!#(B @item @@ -20660,7 +20682,7 @@ Signature})$B!#(B @item $BJ8=q$N=89g$rFI$`$?$a$N?7$7$$L?Na(B (@code{nndoc} $B$H(B @code{nnvirtual} $B$N>e(B -$B$G(B) $B$,2C$($i$l$^$7$?(B---@kbd{M-C-d} (@pxref{Really Various Summary +$B$G(B) $B$,2C$($i$l$^$7$?(B---@kbd{C-M-d} (@pxref{Really Various Summary Commands})$B!#(B @item @@ -22759,7 +22781,7 @@ description = $B?.$8$k$+$I$&$+$OCN$j$^$;$s$,!"(Bgnus $B$r;H$&?M$NCf$K$O(B Gnus Love Boat $B$G$N(B $BN9$KEk>h$9$kA0$K$"$^$j(B Emacs $B$r;H$C$?;v$,L5$$$H$$$&?M$,$$$^$9!#$b$7$"$J(B -$B$?$,(B ``@kbd{M-C-a}'' $B$d(B ``$B%j!<%8%g%s$r@Z$k(B''$B!"$=$7(B +$B$?$,(B ``@kbd{C-M-a}'' $B$d(B ``$B%j!<%8%g%s$r@Z$k(B''$B!"$=$7(B $B$F(B ``@code{gnus-flargblossen} $B$rO"A[%j%9%H$K@_Dj$7$F$/$@$5$$!#$=$N%-!<$O(B $B%0%k!<%WL>$K9gCW$9$k$?$a$K;H$o$l$k@55,I=8=$G$9(B'' $B$,>/$7$N0UL#$+A4$/0UL#(B $B$NL5$$KbK!$N8@MU$G$"$kIT9,$J?M$G$"$l$P!"$3$NIUO?$O$"$J$?$N$?$a$K$"$j$^$9!#(B @@ -22796,11 +22818,11 @@ A: $BC %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 = 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 index dc26eb4..0000000 Binary files a/texi/herds/new-herd-10.png and /dev/null differ diff --git a/texi/message-ja.texi b/texi/message-ja.texi index 0ec7123..f30b4e3 100644 --- a/texi/message-ja.texi +++ b/texi/message-ja.texi @@ -434,8 +434,8 @@ Message $B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"(B $BE=$jIU$1$^$9!#IaDL$O(B @code{gnus-article-copy} $B$O$"$J$?$,JVEz$7$h$&$H$7$F(B $B$$$k%a%C%;!<%8$G$9(B (@code{messsage-yank-original})$B!#(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}). diff --git a/texi/message.texi b/texi/message.texi index 4704117..c7a5910 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -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}). diff --git a/texi/ps/Makefile.in b/texi/ps/Makefile.in index e41dabe..644ad50 100644 --- a/texi/ps/Makefile.in +++ b/texi/ps/Makefile.in @@ -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 diff --git a/texi/sieve.texi b/texi/sieve.texi index 8fe8500..a2894f0 100644 --- a/texi/sieve.texi +++ b/texi/sieve.texi @@ -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. diff --git a/texi/texi2latex.el b/texi/texi2latex.el index bab1b6b..a53e6f5 100644 --- a/texi/texi2latex.el +++ b/texi/texi2latex.el @@ -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." @@ -115,10 +116,8 @@ (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 --- 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.