+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.
--- /dev/null
+/* XPM */
+static char * blink_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".+++++++..++.",
+".++...++..++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * mad_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".++...++++++.",
+".++.+.+...++.",
+".++...+.+.++.",
+".++++++...++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * dead_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".++.+.+.+.++.",
+".+++.+++.+++.",
+".++.+.+.+.++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * diabolic_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".++.+++++.++.",
+".++..+++..++.",
+".++...+...++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.+++.+++.",
+".++++...++++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * forced_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".+.........+.",
+".+++++++++++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * frown_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".++.+++++.++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".+++.....+++.",
+".++.+++++.++.",
+".+++++++++++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * indifferent_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".+++++++++++.",
+".++.......++.",
+".+++++++++++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * sad_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".++++...++++.",
+".+++.+++.+++.",
+".++.+++++.++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * smile_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+.+++++++.+.",
+".+.+++++++.+.",
+".++.+++++.++.",
+".+++.....+++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
--- /dev/null
+/* XPM */
+static char * wry_xpm[] = {
+"13 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFDD00",
+" ....... ",
+" ..+++++.. ",
+" .+++++++++. ",
+".+++++++++++.",
+".++..+++..++.",
+".++..+++..++.",
+".+++++++++++.",
+".+++++++++++.",
+".++++++++..+.",
+".++++++..+++.",
+".++++..+++++.",
+" .+++++++++. ",
+" ..+++++.. ",
+" ....... "};
+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.
;;; 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))
["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
"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)))
(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."
(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)
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)
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
(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)
(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))
"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'."
"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))
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)
\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
(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))
(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))
(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
;;
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
;;; Code:
(eval-when-compile
+ (require 'canlock)
(require 'cl)
(require 'smtp)
(defvar gnus-list-identifiers)) ; gnus-sum is required where necessary
: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...")
(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.
(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)
(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 ""))
(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))
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)
(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
;;; (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))
;;;###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))
;; /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."
(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.
(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:
(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)
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'.
(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)
: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
(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))))
(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)
;;
;; 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
("\\(:-{\\)\\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")
(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
+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.
* 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.
\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
\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
\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
@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
\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
@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
@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
\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)
\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
\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
\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
\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
@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
\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
\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
@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
\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
@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
\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
\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
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
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}).
@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
@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,
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}).
@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
@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
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)
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}
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
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}).
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
@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.
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
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
(@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
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
@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
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
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
\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}).
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}).
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
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
@lisp
(autoload 'sieve-mode "sieve-mode")
+@end lisp
+@lisp
(setq auto-mode-alist (cons '("\\.si\\(v\\|eve\\)\\'" . sieve-mode)
auto-mode-alist))
@end lisp
@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.
(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
;; 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
* Be able to run `J u' from summary buffers.
+ [Done]
+
* Solve the halting problem.
\f