+2003-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-setup-message): Get the evaliation order
+ right.
+ (gnus-inews-make-draft): New function.
+ (gnus-setup-message): Use it.
+
+ * message.el (message-required-headers): Add From.
+
+2003-01-02 Katsumi Yamaoka <yamaoka@jpl.org>
+ Trivial patch from Norbert Koch <nk@viteno.net>.
+
+ * gnus-msg.el (gnus-gcc-externalize-attachments): Fix typo.
+
+2003-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-generate-headers): Let header formatters do
+ their work.
+
+2003-01-02 Raymond Scholz <ray-2003@zonix.de>
+
+ * deuglify.el (gnus-article-outlook-deuglify-article):
+ Rehighlight, reapply treatments and call
+ `gnus-article-prepare-hook'. Suggested by Niels Olof Bouvin.
+ (gnus-outlook-repair-attribution-block): Recognize cited
+ attributions. Suggested by Niklas Morberg.
+
+2003-01-02 Pete Kazmier <pete@kazmier.com>
+
+ * gnus-art.el (gnus-treat-predicate): Check condition first.
+
+2003-01-02 Jesper Harder <harder@ifa.au.dk>
+
+ * lpath.el: Add url-http-file-exists-p.
+
+ * gnus-group.el (gnus-group-fetch-charter): Use
+ http://TLH.news-admin.org/charters/GROUPNAME as a fallback.
+
2003-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * message.el (message-draft-headers): Also generate From to get a
+ nicer draft buffer summary.
+
+ * gnus-xmas.el (gnus-xmas-read-event-char): Take an optional
+ parameter.
+
+ * gnus-art.el (article-wash-html): Clean up.
+ (article-wash-html): Typo fix.
+
+ * gnus-msg.el (gnus-summary-mail-forward): Clean up.
+ (gnus-summary-mail-forward): To many lists of lists.
+
+ * gnus-art.el (article-wash-html): Clean up.
+
+2003-01-02 pete-temp <pete-temp-12-29-2002@kazmier.com>
+
+ * gnus-art.el (gnus-treat-wash-html): New variable.
+
+2003-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-check-news-header-syntax): Allow posting.
+ (message-check-news-header-syntax): Fix logic for sure, this
+ time.
+
+2003-01-02 Matthieu Moy <Matthieu.Moy@imag.fr>
+
+ * message.el (message-check-news-header-syntax): Check syntax of
+ continuation headers.
+
+2003-01-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-button-url-regexp,
+ (gnus-button-mid-or-mail-regexp, gnus-button-alist,
+ (gnus-header-button-alist): Regexps are case insensitive here.
+
+2003-01-02 Simon Josefsson <jas@extundo.com>
+
+ * dig.el (query-dig): Doc fix.
+
+2003-01-02 Kai Gro\e,A_\e(Bjohann <kai.grossjohann@uni-duisburg.de>
+
+ * gnus-agent.el (gnus-agent-fetch-selected-article): Update whole
+ summary buffer line, not just the download mark.
+
+2003-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-summary-goto-subjects): New function.
+ (gnus-summary-insert-dormant-articles): New command and
+ keystroke.
+
+ * gnus-cache.el (gnus-summary-insert-cached-articles): Use new
+ function for mass insertion of subjects.
+
+ * nndraft.el (nndraft-generate-headers): Don't move point.
+
+ * gnus.el (nnheader): Require nnheader.
+
* nndraft.el (nndraft-request-associate-buffer): Use
make-local-variable.
2003-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.el (gnus-group-parameter-value): Take an extra param.
- (gnus-group-fast-parameter): Let group param results be nil.
+ (gnus-group-fast-parameter): Let group param results be nil.
* gnus-art.el (gnus-article-forward-header): New function.
- (article-date-ut): Use it to remove continuation date headers.
+ (article-date-ut): Use it to remove continuation date headers.
* gnus-sum.el (gnus-summary-walk-group-buffer): Supply prompt to
- read-event.
+ read-event.
(gnus-summary-remove-bookmark): Clean up.
(gnus-summary-set-bookmark): Clean up.
- * gnus-util.el (gnus-read-event-char): Take an optional prompt.
+ * gnus-util.el (gnus-read-event-char): Take an optional prompt.
* gnus.el (gnus-group-startup-message): Bind data-directory to
the Gnus etc directory.
* gnus-sum.el (gnus-summary-display-while-building): New
variable.
-2002-01-01 Raymond Scholz <ray-2003@zonix.de>
+2003-01-01 Raymond Scholz <ray-2003@zonix.de>
* deuglify.el (gnus-outlook-rearrange-article): Kill overlays
before rearranging the article.
(replace-match "\\1\\2 \\3")
(goto-char (match-beginning 0))))))))))
-(defun gnus-outlook-rearrange-article (from-where)
- "Put the text from `from-where' to the end of buffer at the top of the article buffer."
+(defun gnus-outlook-rearrange-article (attr-start)
+ "Put the text from `attr-start' to the end of buffer at the top of the article buffer."
(save-excursion
(let ((inhibit-read-only t)
(cite-marks gnus-outlook-deuglify-cite-marks))
(gnus-with-article-buffer
(article-goto-body)
- ;; attribution out of place?
- (unless (= (point) from-where)
+ ;; article does not start with attribution
+ (unless (= (point) attr-start)
(gnus-kill-all-overlays)
- (transpose-regions (point) (+ from-where 1)
- (+ from-where 1) (point-max)))))))
+ (let ((cur (point))
+ ;; before signature or end of buffer
+ (to (if (gnus-article-search-signature)
+ (point)
+ (point-max))))
+ ;; handle the case where the full quote is below the
+ ;; signature
+ (if (< to attr-start)
+ (setq to (point-max)))
+ (transpose-regions cur attr-start attr-start to)))))))
;; John Doe <john.doe@some.domain> wrote in message
;; news:a87usw8$dklsssa$2@some.news.server...
(gnus-with-article-buffer
(article-goto-body)
(if (re-search-forward
- (concat "^----* ?[^-]+ ?----*\n"
- "[^\n]+: \\([^\n]+\\)\n"
- "[^\n]+: [^\n]+\n"
- "[^\n]+: [^\n]+\n"
- "[^\n]+: [^\n]+$")
+ (concat "^[" cite-marks " \t]*----* ?[^-]+ [^-]+ ?----*\n"
+ "[^\n:]+:[ \t]*\\([^\n]+\\)\n"
+ "\\([^\n:]+:[ \t]*[^\n]+\n\\)+")
nil t)
(progn
(gnus-kill-all-overlays)
- (replace-match "\\1 wrote:")
+ (replace-match "\\1 wrote:\n")
(match-beginning 0)))))))
;; On Wed, 16 Jan 2002 23:23:30 +0100, John Doe <john.doe@some.domain> wrote:
(interactive)
(gnus-outlook-deuglify-article)
(with-current-buffer (or gnus-article-buffer (current-buffer))
- (gnus-article-highlight t)))
+ ;; "Emulate" `gnus-article-prepare-display' without calling
+ ;; it. Calling `gnus-article-prepare-display' on an already
+ ;; prepared article removes all MIME parts. I'm unsure whether
+ ;; this is a bug or not.
+ (gnus-article-highlight t)
+ (gnus-treat-article nil)
+ (gnus-run-hooks 'gnus-article-prepare-hook)))
(provide 'deuglify)
;; named for consistency with query-dns in dns.el
(defun query-dig (domain &optional
- query-type query-class query-option dig-option server)
- "Query addresses of a DOMAIN using dig, by calling `dig-invoke' and `dig-extract-rr'.
-Optional arguments are passed to `dig-invoke' and `dig-extract-rr'. Returns nil for a nonexistent domain."
-(let ((buffer (dig-invoke domain query-type query-class query-option dig-option server)))
+ query-type query-class query-option dig-option server)
+ "Query addresses of a DOMAIN using dig.
+It works by calling `dig-invoke' and `dig-extract-rr'. Optional
+arguments are passed to `dig-invoke' and `dig-extract-rr'. Returns
+nil for domain/class/type queries that results in no data."
+(let ((buffer (dig-invoke domain query-type query-class
+ query-option dig-option server)))
(when buffer
(switch-to-buffer buffer)
(let ((digger (dig-extract-rr domain query-type query-class)))
gnus-newsgroup-name
(list gnus-current-article))
(setq gnus-newsgroup-undownloaded (delq gnus-current-article gnus-newsgroup-undownloaded))
- (gnus-summary-update-download-mark gnus-current-article)))))
+ (gnus-summary-update-article gnus-current-article)))))
;;;
;;; Internal functions
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
+(defcustom gnus-treat-wash-html nil
+ "Format as HTML.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See Info node `(gnus)Customizing Articles' for details."
+ :group 'gnus-article-treat
+ :link '(custom-manual "(gnus)Customizing Articles")
+ :type gnus-article-treat-custom)
+
(defcustom gnus-treat-fill-long-lines nil
"Fill long lines.
Valid values are nil, t, `head', `last', an integer or a predicate.
(gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
(gnus-treat-display-smileys gnus-treat-smiley)
(gnus-treat-capitalize-sentences gnus-article-capitalize-sentences)
+ (gnus-treat-wash-html gnus-article-wash-html)
(gnus-treat-emphasize gnus-article-emphasize)
(gnus-treat-hide-citation gnus-article-hide-citation)
(gnus-treat-hide-citation-maybe gnus-article-hide-citation-maybe)
(defun article-wash-html (&optional read-charset)
- "Format an html article.
+ "Format an HTML article.
If READ-CHARSET, ask for a coding system."
(interactive "P")
(save-excursion
(let ((buffer-read-only nil)
charset)
- (if (gnus-buffer-live-p gnus-original-article-buffer)
- (with-current-buffer gnus-original-article-buffer
- (let* ((ct (gnus-fetch-field "content-type"))
- (ctl (and ct
- (ignore-errors
- (mail-header-parse-content-type ct)))))
- (setq charset (and ctl
- (mail-content-type-get ctl 'charset)))
- (if (stringp charset)
- (setq charset (intern (downcase charset)))))))
- (if read-charset
- (setq charset (mm-read-coding-system "Charset: " charset)))
+ (when (gnus-buffer-live-p gnus-original-article-buffer)
+ (with-current-buffer gnus-original-article-buffer
+ (let* ((ct (gnus-fetch-field "content-type"))
+ (ctl (and ct
+ (ignore-errors
+ (mail-header-parse-content-type ct)))))
+ (setq charset (and ctl
+ (mail-content-type-get ctl 'charset)))
+ (when (stringp charset)
+ (setq charset (intern (downcase charset)))))))
+ (when read-charset
+ (setq charset (mm-read-coding-system "Charset: " charset)))
(unless charset
(setq charset gnus-newsgroup-charset))
(article-goto-body)
(narrow-to-region (point) (point-max))
(let* ((func (or gnus-article-wash-function mm-text-html-renderer))
(entry (assq func mm-text-html-washer-alist)))
- (if entry
- (setq func (cdr entry)))
+ (when entry
+ (setq func (cdr entry)))
(cond
((gnus-functionp func)
(funcall func))
(defcustom gnus-button-url-regexp
(if (string-match "[[:digit:]]" "1") ;; support POSIX?
- "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?[-a-zA-Z0-9_=!?#$@~`%&*+|\\/:;.,[:word:]]+[-a-zA-Z0-9_=#$@~`%&*+|\\/[:word:]]\\)"
- "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?\\([-a-zA-Z0-9_=!?#$@~`%&*+|\\/:;.,]\\|\\w\\)+\\([-a-zA-Z0-9_=#$@~`%&*+|\\/]\\|\\w\\)\\)")
+ "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?[-a-z0-9_=!?#$@~`%&*+|\\/:;.,[:word:]]+[-a-z0-9_=#$@~`%&*+|\\/[:word:]]\\)"
+ "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\([-a-z0-9_=!?#$@~`%&*+|\\/:;.,]\\|\\w\\)+\\([-a-z0-9_=#$@~`%&*+|\\/]\\|\\w\\)\\)")
"Regular expression that matches URLs."
:group 'gnus-article-buttons
:type 'regexp)
(regexp :tag "Other")))
(defcustom gnus-button-mid-or-mail-regexp
- (concat "\\b\\(<?[a-zA-Z0-9][^<>\")!;:,{}\n\t ]*@"
+ (concat "\\b\\(<?[a-z0-9][^<>\")!;:,{}\n\t ]*@"
gnus-button-valid-fqdn-regexp
">?\\)\\b")
"Regular expression that matches a message ID or a mail address."
("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2
t gnus-button-message-id 3)
("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>" 0 t gnus-url-mailto 2)
- ("mailto:\\([-a-zA-Z.@_+0-9%=?]+\\)" 0 t gnus-url-mailto 1)
+ ("mailto:\\([-a-z.@_+0-9%=?]+\\)" 0 t gnus-url-mailto 1)
("\\bmailto:\\([^ \n\t]+\\)" 0 t gnus-url-mailto 1)
;; CTAN
("\\bCTAN:[ \t\n]*\\([^>)!;:,\n\t ]*\\)" 0 (>= gnus-button-tex-level 1)
(and (>= gnus-button-man-level 1) (< gnus-button-man-level 3))
gnus-button-handle-man 1)
;; more man pages: resolv.conf(5), iso_8859-1(7), xterm(1x)
- ("\\b\\([a-zA-Z][-_.a-zA-Z0-9]+\\)([1-9])\\W" 0
+ ("\\b\\([a-z][-_.a-z0-9]+\\)([1-9])\\W" 0
(and (>= gnus-button-man-level 3) (< gnus-button-man-level 5))
gnus-button-handle-man 1)
;; even more: Apache::PerlRun(3pm), PDL::IO::FastRaw(3pm),
;; SoWWWAnchor(3iv), XSelectInput(3X11)
- ("\\b\\([a-zA-Z][-_.:a-zA-Z0-9]+\\)([1-9][X1a-z]*)\\W" 0
+ ("\\b\\([a-z][-_.:a-z0-9]+\\)([1-9][X1a-z]*)\\W" 0
(>= gnus-button-man-level 5) gnus-button-handle-man 1)
;; MID or mail: To avoid too many false positives we don't try to catch
;; all kind of allowed MIDs or mail addresses. Domain part must contain
"*Alist of regexps matching buttons in article bodies.
Each entry has the form (REGEXP BUTTON FORM CALLBACK PAR...), where
-REGEXP: is the string matching text around the button (can also be lisp
-expression evaluating to a string),
+REGEXP: is the string (case insensitive) matching text around the button (can
+also be lisp expression evaluating to a string),
BUTTON: is the number of the regexp grouping actually matching the button,
FORM: is a lisp expression which must eval to true for the button to
be added,
("^X-[Uu][Rr][Ll]:" gnus-button-url-regexp 0 t browse-url 0)
("^Subject:" gnus-button-url-regexp 0 t browse-url 0)
("^[^:]+:" gnus-button-url-regexp 0 t browse-url 0)
- ("^[^:]+:" "\\bmailto:\\([-a-zA-Z.@_+0-9%=?]+\\)" 0 t gnus-url-mailto 1)
+ ("^[^:]+:" "\\bmailto:\\([-a-z.@_+0-9%=?]+\\)" 0 t gnus-url-mailto 1)
("^[^:]+:" "\\(<\\(url: \\)?news:\\([^>\n ]*\\)>\\)" 1 t
gnus-button-message-id 3))
"*Alist of headers and regexps to match buttons in article heads.
val elem buttonized)
(gnus-run-hooks 'gnus-part-display-hook)
(unless gnus-inhibit-treatment
- (while (setq elem (pop alist))
+ (dolist (elem alist)
(setq val
(save-excursion
- (if (gnus-buffer-live-p gnus-summary-buffer)
- (set-buffer gnus-summary-buffer))
+ (when (gnus-buffer-live-p gnus-summary-buffer)
+ (set-buffer gnus-summary-buffer))
(symbol-value (car elem))))
(when (and (or (consp val)
treated-type)
(cond
((null val)
nil)
+ (condition
+ (eq condition val))
((and (listp val)
(stringp (car val)))
(apply 'gnus-or (mapcar `(lambda (s)
(error "%S is not a valid predicate" pred)))))
((eq val 'mime)
gnus-show-mime)
- (condition
- (eq condition val))
((eq val t)
t)
((eq val 'head)
(defun gnus-summary-insert-cached-articles ()
"Insert all the articles cached for this group into the current buffer."
(interactive)
- (let ((cached gnus-newsgroup-cached)
- (gnus-verbose (max 6 gnus-verbose)))
- (if (not cached)
+ (let ((gnus-verbose (max 6 gnus-verbose)))
+ (if (not gnus-newsgroup-cached)
(gnus-message 3 "No cached articles for this group")
- (save-excursion
- (while cached
- (gnus-summary-goto-subject (pop cached) t)))
- (gnus-summary-limit (append gnus-newsgroup-cached gnus-newsgroup-limit))
- (gnus-summary-position-point))))
+ (gnus-summary-goto-subjects gnus-newsgroup-cached))))
(defun gnus-summary-limit-include-cached ()
"Limit the summary buffer to articles that are cached."
(unless group
(error "No group name given"))
(require 'mm-url)
+ (condition-case nil (require 'url-http) (error nil))
(let ((name (mm-url-form-encode-xwfu (gnus-group-real-name group)))
url hierarchy)
(when (string-match "\\(^[^\\.]+\\)\\..*" name)
(setq hierarchy (match-string 1 name))
- (if (setq url (cdr (assoc hierarchy gnus-group-charter-alist)))
+ (if (and (setq url (cdr (assoc hierarchy gnus-group-charter-alist)))
+ (if (fboundp 'url-http-file-exists-p)
+ (url-http-file-exists-p (eval url))
+ t))
(browse-url (eval url))
- (gnus-group-fetch-control group)))))
+ (setq url (concat "http://" hierarchy
+ ".news-admin.org/charters/" name))
+ (if (and (fboundp 'url-http-file-exists-p)
+ (url-http-file-exists-p url))
+ (browse-url url)
+ (gnus-group-fetch-control group))))))
(defun gnus-group-fetch-control (group)
"Fetch the archived control messages for the current group.
(setq gnus-newsgroup-unselected
(nreverse gnus-newsgroup-unselected)))))
(gnus-activate-group group)
- (gnus-group-make-articles-read group
- (list article))
+ (gnus-group-make-articles-read group (list article))
(when (gnus-group-auto-expirable-p group)
(gnus-add-marked-articles
group 'expire (list article))))))
"Should local-file attachments be included as external parts in Gcc copies?
If it is `all', attach files as external parts;
if a regexp and matches the Gcc group name, attach files as external parts;
-If nil, attach files as normal parts."
+if nil, attach files as normal parts."
:version "21.1"
:group 'gnus-message
:type '(choice (const nil :tag "None")
;;; Internal functions.
+(defun gnus-inews-make-draft ()
+ `(lambda ()
+ (gnus-inews-make-draft-meta-information
+ ,gnus-newsgroup-name ,gnus-article-reply)))
+
(defvar gnus-article-reply nil)
(defmacro gnus-setup-message (config &rest forms)
(let ((winconf (make-symbol "gnus-setup-message-winconf"))
message-required-headers)
(when (and ,group
(not (string= ,group "")))
- (push '(,(intern gnus-draft-meta-information-header)
- . (lambda ()
- (gnus-inews-make-draft-meta-information
- ,gnus-newsgroup-name ,gnus-article-reply)))
+ (push (cons
+ (intern gnus-draft-meta-information-header)
+ (gnus-inews-make-draft))
message-required-headers))
(unwind-protect
(progn
Note that this function definition for T-gnus is totally different
from the original Gnus."
(interactive "P")
- (if (null (cdr (gnus-summary-work-articles nil)))
- (let* ((gnus-article-reply (gnus-summary-article-number))
- (gnus-article-yanked-articles (list (list gnus-article-reply)))
- charset
- (message-included-forward-headers
- (if full-headers "" message-included-forward-headers)))
- (gnus-setup-message 'forward
- (gnus-summary-select-article)
- (setq charset default-mime-charset)
- (set-buffer gnus-original-article-buffer)
- (make-local-variable 'default-mime-charset)
- (setq default-mime-charset charset)
- (message-forward post)))
- (gnus-summary-digest-mail-forward nil post)))
+ (if (cdr (gnus-summary-work-articles nil))
+ ;; Process marks are given.
+ (gnus-summary-digest-mail-forward nil post)
+ ;; No process marks.
+ (let* ((gnus-article-reply (gnus-summary-article-number))
+ (gnus-article-yanked-articles (list (list gnus-article-reply)))
+ charset
+ (message-included-forward-headers
+ (if full-headers "" message-included-forward-headers)))
+ (gnus-setup-message 'forward
+ (gnus-summary-select-article)
+ (setq charset default-mime-charset)
+ (set-buffer gnus-original-article-buffer)
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset)
+ (message-forward post)))))
(defun gnus-summary-digest-mail-forward (&optional n post)
"Digests and forwards all articles in this series.
group))))
(when gcc
(insert "Gcc: "
- (if (stringp gcc)
+ (if (stringp gcc)
(if (string-match " " gcc)
(concat "\"" gcc "\"")
gcc)
(setq results (delq name (delq address results)))
;; make-local-hook is not obsolete in Emacs 20 or XEmacs.
(make-local-hook 'message-setup-hook)
- (setq results (sort results (lambda (x y)
+ (setq results (sort results (lambda (x y)
(string-lessp (car x) (car y)))))
(dolist (result results)
(add-hook 'message-setup-hook
(gnus-define-keys (gnus-summary-buffer-map "Y" gnus-summary-mode-map)
"g" gnus-summary-prepare
- "c" gnus-summary-insert-cached-articles)
+ "c" gnus-summary-insert-cached-articles
+ "d" gnus-summary-insert-dormant-articles)
(gnus-define-keys (gnus-summary-exit-map "Z" gnus-summary-mode-map)
"c" gnus-summary-catchup-and-exit
("Regeneration"
["Regenerate" gnus-summary-prepare t]
["Insert cached articles" gnus-summary-insert-cached-articles t]
+ ["Insert dormant articles" gnus-summary-insert-dormant-articles t]
["Toggle threading" gnus-summary-toggle-threads t])
["See old articles" gnus-summary-insert-old-articles t]
["See new articles" gnus-summary-insert-new-articles t]
(interactive "p")
(gnus-summary-next-subject (- n) t))
+(defun gnus-summary-goto-subjects (articles)
+ "Insert the subject header for ARTICLES in the current buffer."
+ (save-excursion
+ (dolist (article articles)
+ (gnus-summary-goto-subject articles t)))
+ (gnus-summary-limit (append articles gnus-newsgroup-limit))
+ (gnus-summary-position-point))
+
(defun gnus-summary-goto-subject (article &optional force silent)
"Go the subject line of ARTICLE.
If FORCE, also allow jumping to articles not currently shown."
(gnus-summary-limit (nconc articles gnus-newsgroup-limit))
(gnus-summary-position-point))))
+(defun gnus-summary-insert-dormant-articles ()
+ "Insert all the dormat articles for this group into the current buffer."
+ (interactive)
+ (let ((gnus-verbose (max 6 gnus-verbose)))
+ (if (not gnus-newsgroup-dormant)
+ (gnus-message 3 "No cached articles for this group")
+ (gnus-summary-goto-subjects gnus-newsgroup-dormant))))
+
(defun gnus-summary-limit-include-dormant ()
"Display all the hidden articles that are marked as dormant.
Note that this command only works on a subset of the articles currently
(gnus-xmas-menu-add grouplens
gnus-grouplens-menu))
-(defun gnus-xmas-read-event-char ()
+(defun gnus-xmas-read-event-char (&optional prompt)
"Get the next event."
+ (when prompt
+ (message "%s" prompt))
(let ((event (next-command-event)))
(sit-for 0)
;; We junk all non-key events. Is this naughty?
(eval-when-compile (require 'static))
(require 'wid-edit)
+(require 'nnheader)
(require 'gnus-vers)
put-image replace-regexp-in-string rmail-msg-is-pruned
rmail-msg-restore-non-pruned-header sort-coding-systems
tool-bar-add-item tool-bar-add-item-from-menu
- tool-bar-local-item-from-menu vcard-pretty-print
- w32-focus-frame w3m-charset-to-coding-system
- x-focus-frame))
+ tool-bar-local-item-from-menu url-http-file-exists-p
+ vcard-pretty-print w32-focus-frame
+ w3m-charset-to-coding-system x-focus-frame))
(maybe-bind '(filladapt-mode
mc-pgp-always-sign rmail-enable-mime-composing
rmail-insert-mime-forwarded-message-function
mouse-minibuffer-check mouse-movement-p mouse-scroll-subr
overlay-lists pgg-parse-crc24-string posn-point
posn-window read-event set-buffer-multibyte track-mouse
- window-edges))
+ window-edges w3m-region))
(maybe-bind '(adaptive-fill-first-line-regexp
buffer-display-table buffer-file-coding-system
current-language-environment
`new-text', `quoting-style', `redirected-followup', `signature',
`approved', `sender', `empty', `empty-headers', `message-id', `from',
`subject', `shorten-followup-to', `existing-newsgroups',
-`buffer-file-name', `unchanged', `newsgroups', `reply-to'."
+`buffer-file-name', `unchanged', `newsgroups', `reply-to',
+'continuation-headers'."
:group 'message-news
:type '(repeat sexp)) ; Fixme: improve this
-(defcustom message-required-headers '((optional . References))
+(defcustom message-required-headers '((optional . References) From)
"*Headers to be generated or promted for when sending a message.
Also see `message-required-news-headers' and
1message-required-mail-headers'."
:group 'message-headers
:type '(repeat sexp))
-(defcustom message-draft-headers '(References)
+(defcustom message-draft-headers '(References From)
"*Headers to be generated when saving a draft message."
:group 'message-news
:group 'message-headers
(if (= (length errors) 1) "this" "these")
(if (= (length errors) 1) "" "s")
(mapconcat 'identity errors ", ")))))))
+ ;; Check continuation headers.
+ (message-check 'continuation-headers
+ (goto-char (point-min))
+ (let ((do-posting t))
+ (while (re-search-forward "^[^ \t\n][^:\n]*$" nil t)
+ (if (y-or-n-p "Fix continuation lines? ")
+ (progn
+ (goto-char (match-beginning 0))
+ (insert " "))
+ (unless (y-or-n-p "Send anyway? ")
+ (setq do-posting nil))))
+ do-posting))
;; Check the Newsgroups & Followup-To headers for syntax errors.
(message-check 'valid-newsgroups
(let ((case-fold-search t)
(progn
;; This header didn't exist, so we insert it.
(goto-char (point-max))
- (insert (if (stringp header) header (symbol-name header))
- ": " value)
- ;; We check whether the value was ended by a
- ;; newline. If now, we insert one.
- (unless (bolp)
- (insert "\n"))
- (forward-line -1))
+ (let ((formatter
+ (cdr (assq header message-header-format-alist))))
+ (if formatter
+ (funcall formatter header value)
+ (insert (if (stringp header)
+ header (symbol-name header))
+ ": " value))
+ ;; We check whether the value was ended by a
+ ;; newline. If now, we insert one.
+ (unless (bolp)
+ (insert "\n"))
+ (forward-line -1)))
;; The value of this header was empty, so we clear
;; totally and insert the new value.
(delete-region (point) (gnus-point-at-eol))
t)
(defun nndraft-generate-headers ()
- (message-generate-headers
- (message-headers-to-generate
- message-required-headers message-draft-headers nil)))
+ (save-excursion
+ (message-generate-headers
+ (message-headers-to-generate
+ message-required-headers message-draft-headers nil))))
(deffoo nndraft-request-associate-buffer (group)
"Associate the current buffer with some article in the draft group."
+2003-01-02 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Troubleshooting): Add.
+
+2003-01-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Article Buttons): Regexps are case insensitive here.
+
+2003-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Summary Generation Commands): Addition.
+
2003-01-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
* message.texi (Message Headers): Added example.
\e$B$9\e(B (@code{gnus-group-sort-groups-by-method})\e$B!#\e(B
@item G S n
-@kindex G S n (Group)
+@kindex G S n (\e$B%0%k!<%W\e(B)
@findex gnus-group-sort-groups-by-real-name
\e$B%0%k!<%W%P%C%U%!$rK\Ev$N\e(B (\e$BA0$K2?$bIU$$$F$$$J$$\e(B) \e$B%0%k!<%WL>$G%"%k%U%!%Y%C\e(B
\e$B%H=g$KJB$YBX$($^$9\e(B (@code{gnus-group-sort-groups-by-real-name})\e$B!#\e(B
\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-method})\e$B!#\e(B
@item G P n
-@kindex G P n (Group)
+@kindex G P n (\e$B%0%k!<%W\e(B)
@findex gnus-group-sort-selected-groups-by-real-name
\e$B%0%k!<%W$rK\Ev$N\e(B (\e$BA0$K2?$bIU$$$F$$$J$$\e(B) \e$B%0%k!<%WL>$G%"%k%U%!%Y%C%H=g$KJB\e(B
\e$B$YBX$($^$9\e(B (@code{gnus-group-sort-selected-groups-by-real-name})\e$B!#\e(B
\e$B$_$h$&$H$7$^$9!#\e(B
@item H c
-@kindex H c (Group)
+@kindex H c (\e$B%0%k!<%W\e(B)
@findex gnus-group-fetch-charter
@vindex gnus-group-charter-alist
@cindex charter
\e$B$7$^$9!#$=$l$K$O7{>O$r4^$s$G$$$k$3$H$,$"$j$^$9$+$i!#\e(B
@item H C
-@kindex H C (Group)
+@kindex H C (\e$B%0%k!<%W\e(B)
@findex gnus-group-fetch-control
@vindex gnus-group-fetch-control-use-browse-url
@cindex control message
\e$B@)8B$r%9%?%C%/$+$i<h$j=P$7$^$9!#\e(B
@item / .
-@kindex / . (Summary)
+@kindex / . (\e$B35N,\e(B)
@findex gnus-summary-limit-to-unseen
\e$B35N,%P%C%U%!$r$^$@FI$^$l$?$3$H$,L5$$5-;v$K@)8B$7$^\e(B
\e$B$9\e(B (@code{gnus-summary-limit-to-unseen})\e$B!#\e(B
\e$B$h$&$JE57?E*$JJ8;zNs$r:n$j$^$9!#\e(B
@item W u
-@kindex W u (Summary)
+@kindex W u (\e$B35N,\e(B)
@findex gnus-article-unsplit-urls
URL \e$B$K4^$^$l$k2~9T$r:o=|$7$^$9!#$$$/$D$+$N%a%$%i!<$O!"9T$rC;$/$9$k$?$a$K\e(B
\e$B=P$F$$$/%a!<%k$K2~9T$rA^F~$7$^$9$,!"$3$l$OD9$$\e(B URL \e$B$rJ#?t$N9T$KJ,3d$7$F\e(B
@table @var
@item regexp
-\e$B$3$N@55,I=8=\e(B (regexp) \e$B$K9gCW$9$k$9$Y$F$NJ8$O30It;2>H$G$"$k$H$_$J$5$l$^$9!#\e(B
-\e$B$3$l$OKd$a9~$^$l$?\e(B URL \e$B$K9gCW$9$kE57?E*$J@55,I=8=$G\e(B
-\e$B$9\e(B @samp{<URL:\\([^\n\r>]*\\)>}\e$B!#$3$l$O$^$?@55,I=8=$NCM$r;}$DJQ?t$G$"$C\e(B
-\e$B$F$b$h$/!"M-MQ$JJQ?t$H$7$F\e(B @code{gnus-button-url-regexp} \e$B$,$"$j$^$9!#\e(B
+\e$B$3$N@55,I=8=\e(B (\e$BBgJ8;z$H>.J8;z$O6hJL$5$l$J$$\e(B) \e$B$K9gCW$9$k$9$Y$F$NJ8$O30It;2\e(B
+\e$B>H$G$"$k$H$_$J$5$l$^$9!#$3$l$OKd$a9~$^$l$?\e(B URL \e$B$K9gCW$9$kE57?E*$J@55,I=\e(B
+\e$B8=$G$9\e(B @samp{<URL:\\([^\n\r>]*\\)>}\e$B!#$3$l$O$^$?@55,I=8=$NCM$r;}$DJQ?t$G\e(B
+\e$B$"$C$F$b$h$/!"M-MQ$JJQ?t$H$7$F\e(B @code{gnus-button-url-regexp} \e$B$,$"$j$^$9!#\e(B
@item button-par
Gnus \e$B$O9gCW$7$?$b$N$N$I$NItJ,$,%O%$%i%$%H$5$l$k$N$+$rCN$i$J$1$l$P$J$j$^\e(B
\e$B%9%3%"$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-score})\e$B!#\e(B
@item C-c C-s C-r
-@kindex C-c C-s C-r (Summary)
+@kindex C-c C-s C-r (\e$B35N,\e(B)
@findex gnus-summary-sort-by-random
\e$B%i%s%@%`$KJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-random})\e$B!#\e(B
@item Y c
@kindex Y c (\e$B35N,\e(B)
@findex gnus-summary-insert-cached-articles
-\e$BA4$F$N\e(B (\e$B8=:_$N%0%k!<%W$K\e(B) \e$B%-%c%C%7%e$5$l$?5-;v\e(B \e$B$r35N,%P%C%U%!$KA^F~$7$^\e(B
+\e$B$9$Y$F$N\e(B (\e$B8=:_$N%0%k!<%W$K\e(B) \e$B%-%c%C%7%e$5$l$?5-;v$r35N,%P%C%U%!$KA^F~$7$^\e(B
\e$B$9\e(B (@code{gnus-summary-insert-cached-articles})\e$B!#\e(B
+
+@item Y d
+@kindex Y d (\e$B35N,\e(B)
+@findex gnus-summary-insert-dormant-articles
+\e$B$9$Y$F$N\e(B (\e$B8=:_$N%0%k!<%W$N\e(B) \e$BJ]N15-;v$r35N,%P%C%U%!$KA^F~$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-insert-dormant-articles})\e$B!#\e(B
@end table
@node Really Various Summary Commands
@item gnus-treat-strip-pgp (t, last, integer)
@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
@item gnus-treat-unsplit-urls (t, integer)
+@item gnus-treat-wash-html (t, integer)
@item gnus-treat-decode-article-as-default-mime-charset (t, integer)
@xref{Article Washing}.
\e$B$9\e(B (@code{gnus-server-remove-denials})\e$B!#\e(B
@item L
-@kindex L (Server)
+@kindex L (\e$B%5!<%P!<\e(B)
@findex gnus-server-offline-server
\e$B%5!<%P!<$N>uBV$r%*%U%i%$%s$K$7$^$9\e(B (@code{gnus-server-offline-server})\e$B!#\e(B
@end table
\e$BI>2A!"\e(B@kbd{C-h v} \e$B$GJQ?t$r8!::!"\e(B@kbd{q} \e$B$G<B9T$rCfCG!"$"$k$$\e(B
\e$B$O\e(B @kbd{c} \e$B$+\e(B @kbd{g} \e$B$G<B9T$r:F3+$9$k$3$H$,$G$-$^$9!#\e(B
+@c TRANSLATEME!
+@cindex elp
+@cindex profile
+@cindex slow
+Sometimes, a problem do not directly generate a elisp error but
+manifests itself by causing Gnus to be very slow. In these cases, you
+can use @kbd{M-x toggle-debug-on-quit} and press C-j when things are
+slow, and then try to analyze the backtrace (repeating the procedure
+helps isolating the real problem areas). A fancier approach is to use
+the elisp profiler, ELP. The profiler is (or should be) fully
+documented elsewhere, but to get you started there are a few steps
+that need to be followed. First, instrument the part of Gnus you are
+interested in for profiling, e.g. @kbd{M-x elp-instrument-package RET
+gnus} or @kbd{M-x elp-instrument-packagre RET message}. Then perform
+the operation that is slow and press @kbd{M-x elp-results}. You will
+then see which operations that takes time, and can debug them further.
+If the entire operation takes much longer than the time spent in the
+slowest function in the profiler output, you probably profiled the
+wrong part of Gnus. To reset profiling statistics, use @kbd{M-x
+elp-reset-all}. @kbd{M-x elp-restore-all} is supposed to remove
+profiling, but given the complexities and dynamic code generation in
+Gnus, it might not always work perfectly.
+
\e$B$b$71g=u$,M_$7$$$@$1$G$"$l$P!"\e(B@samp{gnu.emacs.gnus} \e$B$G?R$M$k$N$,NI$$$G$7$g\e(B
\e$B$&!#;d$O$"$^$jLr$KN)$A$^$;$s!#\e(B
@table @var
@item regexp
-All text that match this regular expression will be considered an
-external reference. Here's a typical regexp that matches embedded URLs:
-@samp{<URL:\\([^\n\r>]*\\)>}. This can also be a variable containing a
-regexp, useful variables to use include @code{gnus-button-url-regexp}.
+All text that match this regular expression (case insensitive) will be
+considered an external reference. Here's a typical regexp that matches
+embedded URLs: @samp{<URL:\\([^\n\r>]*\\)>}. This can also be a
+variable containing a regexp, useful variables to use include
+@code{gnus-button-url-regexp}.
@item button-par
Gnus has to know which parts of the matches is to be highlighted. This
Pull all cached articles (for the current group) into the summary buffer
(@code{gnus-summary-insert-cached-articles}).
+@item Y d
+@kindex Y d (Summary)
+@findex gnus-summary-insert-dormant-articles
+Pull all dormant articles (for the current group) into the summary buffer
+(@code{gnus-summary-insert-dormant-articles}).
+
@end table
@item gnus-treat-strip-pgp (t, last, integer)
@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
@item gnus-treat-unsplit-urls (t, integer)
+@item gnus-treat-wash-html (t, integer)
@item gnus-treat-decode-article-as-default-mime-charset (t, integer)
@xref{Article Washing}.
@kbd{C-h v}, abort execution with @kbd{q}, and resume execution with
@kbd{c} or @kbd{g}.
+@cindex elp
+@cindex profile
+@cindex slow
+Sometimes, a problem do not directly generate a elisp error but
+manifests itself by causing Gnus to be very slow. In these cases, you
+can use @kbd{M-x toggle-debug-on-quit} and press C-j when things are
+slow, and then try to analyze the backtrace (repeating the procedure
+helps isolating the real problem areas). A fancier approach is to use
+the elisp profiler, ELP. The profiler is (or should be) fully
+documented elsewhere, but to get you started there are a few steps
+that need to be followed. First, instrument the part of Gnus you are
+interested in for profiling, e.g. @kbd{M-x elp-instrument-package RET
+gnus} or @kbd{M-x elp-instrument-packagre RET message}. Then perform
+the operation that is slow and press @kbd{M-x elp-results}. You will
+then see which operations that takes time, and can debug them further.
+If the entire operation takes much longer than the time spent in the
+slowest function in the profiler output, you probably profiled the
+wrong part of Gnus. To reset profiling statistics, use @kbd{M-x
+elp-reset-all}. @kbd{M-x elp-restore-all} is supposed to remove
+profiling, but given the complexities and dynamic code generation in
+Gnus, it might not always work perfectly.
+
If you just need help, you are better off asking on
@samp{gnu.emacs.gnus}. I'm not very helpful.