Synch to No Gnus 200504181439.
[elisp/gnus.git-] / lisp / gnus-art.el
index 0891d4f..caf46cf 100644 (file)
 
 (require 'path-util)
 (require 'gnus)
-(require 'gnus-sum)
+;; Avoid the "Recursive load suspected" error in Emacs 21.1.
+(eval-and-compile
+  (let ((recursive-load-depth-limit 100))
+    (require 'gnus-sum)))
 (require 'gnus-spec)
 (require 'gnus-int)
 (require 'gnus-win)
@@ -60,6 +63,7 @@
 (autoload 'gnus-msg-mail "gnus-msg" nil t)
 (autoload 'gnus-button-mailto "gnus-msg")
 (autoload 'gnus-button-reply "gnus-msg" nil t)
+(autoload 'parse-time-string "parse-time" nil nil)
 (autoload 'ansi-color-apply-on-region "ansi-color")
 
 (defgroup gnus-article nil
@@ -676,7 +680,7 @@ The following additional specs are available:
 (defcustom gnus-copy-article-ignored-headers nil
   "List of headers to be removed when copying an article.
 Each element is a regular expression."
-  :version "22.0" ;; No Gnus
+  :version "23.0" ;; No Gnus
   :type '(repeat regexp)
   :group 'gnus-article-various)
 
@@ -5671,7 +5675,7 @@ not have a face in `gnus-article-boring-faces'."
              (when (eq win (selected-window))
                (setq new-sum-point (point)
                      new-sum-start (window-start win)
-                     new-sum-hscroll (window-hscroll win))
+                     new-sum-hscroll (window-hscroll win)))
              (when (eq in-buffer (current-buffer))
                (setq selected (gnus-summary-select-article))
                (set-buffer obuf)
@@ -5687,7 +5691,7 @@ not have a face in `gnus-article-boring-faces'."
                           new-sum-point)
                  (set-window-point win new-sum-point)
                  (set-window-start win new-sum-start)
-                 (set-window-hscroll win new-sum-hscroll)))))
+                 (set-window-hscroll win new-sum-hscroll))))
          (set-window-configuration owin)
          (ding))))))
 
@@ -6819,7 +6823,7 @@ variable it the real callback function."
     ("^\\(From\\|Reply-To\\):" ": *\\(.+\\)$"
      1 (>= gnus-button-message-level 0) gnus-button-reply 1)
     ("^\\(Cc\\|To\\):" "[^ \t\n<>,()\"]+@[^ \t\n<>,()\"]+"
-     0 (>= gnus-button-message-level 0) gnus-button-mailto 0)
+     0 (>= gnus-button-message-level 0) gnus-msg-mail 0)
     ("^X-[Uu][Rr][Ll]:" gnus-button-url-regexp
      0 (>= gnus-button-browse-level 0) browse-url 0)
     ("^Subject:" gnus-button-url-regexp
@@ -7146,15 +7150,18 @@ specified by `gnus-button-alist'."
                      (cons fun args)))))))
 
 (defun gnus-parse-news-url (url)
-  (let (scheme server group message-id articles)
+  (let (scheme server port group message-id articles)
     (with-temp-buffer
       (insert url)
       (goto-char (point-min))
       (when (looking-at "\\([A-Za-z]+\\):")
        (setq scheme (match-string 1))
        (goto-char (match-end 0)))
-      (when (looking-at "//\\([^/]+\\)/")
+      (when (looking-at "//\\([^:/]+\\)\\(:?\\)\\([0-9]+\\)?/")
        (setq server (match-string 1))
+       (setq port (if (stringp (match-string 3))
+                      (string-to-number (match-string 3))
+                    (match-string 3)))
        (goto-char (match-end 0)))
 
       (cond
@@ -7167,18 +7174,23 @@ specified by `gnus-button-alist'."
        (setq group (match-string 1)))
        (t
        (error "Unknown news URL syntax"))))
-    (list scheme server group message-id articles)))
+    (list scheme server port group message-id articles)))
 
 (defun gnus-button-handle-news (url)
   "Fetch a news URL."
-  (destructuring-bind (scheme server group message-id articles)
+  (destructuring-bind (scheme server port group message-id articles)
       (gnus-parse-news-url url)
     (cond
      (message-id
       (save-excursion
        (set-buffer gnus-summary-buffer)
        (if server
-           (let ((gnus-refer-article-method (list (list 'nntp server))))
+           (let ((gnus-refer-article-method
+                  (nconc (list (list 'nntp server))
+                         gnus-refer-article-method))
+                 (nntp-port-number (or port "nntp")))
+             (gnus-message 7 "Fetching %s with %s"
+                           message-id gnus-refer-article-method)
              (gnus-summary-refer-article message-id))
          (gnus-summary-refer-article message-id))))
      (group