Sync up with qgnus-0.37.
authorshuhei-k <shuhei-k>
Sun, 8 Mar 1998 18:11:25 +0000 (18:11 +0000)
committershuhei-k <shuhei-k>
Sun, 8 Mar 1998 18:11:25 +0000 (18:11 +0000)
lisp/ChangeLog
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-sum.el
lisp/gnus.el
lisp/nnheader.el

index 9bafbe5..6b2a1b3 100644 (file)
@@ -1,3 +1,114 @@
+Sat Mar  7 21:59:18 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.37 is released.
+
+Sat Mar  7 20:10:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-expire-days): New variable.
+       (gnus-agent-expire): New function.
+
+Sat Mar  7 17:35:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.36 is released.
+
+Sat Mar  7 17:29:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-wait-for): Reversed logic.
+
+Sat Mar  7 17:19:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.35 is released.
+
+Sat Mar  7 15:01:57 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-picon.el (gnus-picons-x-face-sentinel): Check whether
+       gnus-picons-x-face-file-name exists.
+
+       * gnus-art.el (gnus-article-read-summary-keys): Move window point
+       in the summary buffer.
+
+       * nndoc.el (nndoc-type-alist): Allow spaces around separator.
+
+       * gnus-sum.el (gnus-summary-edit-parameters): Interactive.
+
+Sat Mar  7 15:00:05 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
+
+       * gnus-art.el (gnus-article-prepare): Mark articles as
+       downloadable. 
+
+Wed Mar  4 22:33:27 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * gnus-int.el (gnus-get-function): New version, caches symbol
+       names.
+
+Fri Mar  6 01:10:22 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * nnml.el (nnml-article-to-file): Build pathname using
+       expand-file-name.  (Thanks, Colin Rafferty, for catching
+       this.)
+
+Sat Feb 28 23:33:40 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * nnml.el (nnml-article-to-file): Don't add extra "/" when
+       building pathname.
+
+       * nnheader.el (nnheader-file-to-number): Check value of
+       nnheader-numerical-short-files instead of checking if jka-compr is
+       loaded.
+
+1998-03-03  Dave Love  <d.love@dl.ac.uk>
+
+       * nnheader.el (nnheader-parse-head): Fix in-reply-to code. Return
+       nil consistently if not found.
+
+Sat Mar  7 13:50:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el: Check whether the connection died.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
+
+Mon Mar  2 16:17:36 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-exit-no-update): Run
+       gnus-summary-prepare-exit-hook here as well.
+
+Sat Feb 28 13:35:26 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-authinforc-file): Changed default.
+       (nntp-authinfo-file): Changed name.
+       (nntp-record-commands): New variable.
+       (nntp-record-command): New function.
+
+       * gnus-agent.el (gnus-agent-group-path): Use real name of group. 
+
+       * gnus-sum.el (gnus-summary-insert-subject): Don't allow nil
+       articles. 
+       (gnus-summary-read-group): Respect backward movement.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus-win.el (gnus-window-to-buffer): change "*Picons*" to
+       `gnus-picons-buffer'.
+       (gnus-window-to-buffer-helper): Support dynamic picon buffer
+       name (i.e a symbol that names a function to be called).
+       (gnus-configure-frame): Use it.
+       (gnus-delete-windows-in-gnusey-frames): Use it.
+       (gnus-all-windows-visible-p): Use it.
+       (gnus-remove-some-windows): Use it.
+
+       * gnus-picon.el (gnus-get-buffer-name): Use it.
+       (gnus-picons-kill-buffer): New function.
+       (gnus-picons-setup-buffer): New function.
+       (gnus-picons-set-buffer): Use them.
+       (gnus-picons-display-x-face): Put back the `buf' binding: it is
+       needed when `gnus-picons-display-where' is not set to article.
+       Also move the X-Face to the left, near the address.  It seems more
+       logical.
+
 Sat Feb 28 08:27:20 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.34 is released.
index df71437..864cc1b 100644 (file)
   :group 'gnus-agent
   :type 'integer)
 
+(defcustom gnus-agent-expire-days 7
+  "Read articles older than this will be expired."
+  :group 'gnus-agent
+  :type 'integer)
+
 ;;; Internal variables
 
 (defvar gnus-agent-history-buffers nil)
@@ -488,9 +493,9 @@ the actual number of articles toggled is returned."
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a path."
   (if nnmail-use-long-file-names
-      group
+      (gnus-group-real-name group)
     (nnheader-replace-chars-in-string
-     (nnheader-translate-file-chars group)
+     (nnheader-translate-file-chars (gnus-group-real-name group))
      ?. ?/)))
 
 \f
@@ -546,7 +551,7 @@ the actual number of articles toggled is returned."
     (goto-char (point-max))
     (insert id "\t" (number-to-string date) "\t")
     (while group-arts
-      (insert (caar group-arts) "/" (number-to-string (cdr (pop group-arts)))
+      (insert (caar group-arts) " " (number-to-string (cdr (pop group-arts)))
              " "))
     (insert "\n")))
 
@@ -1203,6 +1208,88 @@ The following commands are available:
   "Expire all old articles."
   (interactive)
   (let ((methods gnus-agent-covered-methods)
+       (day (- (gnus-time-to-day (current-time)) gnus-agent-expire-days))
+       (expiry-hashtb (gnus-make-hashtable 1023))
+       gnus-command-method sym group articles
+       history overview file histories elem art nov-file low info
+       unreads marked article)
+    (save-excursion
+      (setq overview (get-buffer-create " *expire overview*"))
+      (while (setq gnus-command-method (pop methods))
+       (gnus-agent-open-history)
+       (set-buffer
+        (setq gnus-agent-current-history
+              (setq history (gnus-agent-history-buffer))))
+       (goto-char (point-min))
+       (while (not (eobp))
+         (skip-chars-forward "^\t")
+         (if (> (read (current-buffer)) day)
+             ;; New article; we don't expire it.
+             (forward-line 1)
+           ;; Old article.  Schedule it for possible nuking.
+           (while (not (eolp))
+             (setq sym (let ((obarray expiry-hashtb))
+                         (read (current-buffer))))
+             (if (boundp sym)
+                 (set sym (cons (cons (read (current-buffer)) (point))
+                                (symbol-value sym)))
+               (set sym (list (cons (read (current-buffer)) (point)))))
+             (skip-chars-forward " "))
+           (forward-line 1)))
+       ;; We now have all articles that can possibly be expired.
+       (mapatoms
+        (lambda (sym)
+          (setq group (symbol-name sym)
+                articles (sort (symbol-value sym) 'car-less-than-car)
+                low (car (gnus-active group))
+                info (gnus-get-info group)
+                unreads (ignore-errors (gnus-list-of-unread-articles group))
+                marked (nconc (gnus-uncompress-range
+                               (cdr (assq 'ticked (gnus-info-marks info))))
+                              (gnus-uncompress-range
+                               (cdr (assq 'dormant (gnus-info-marks info)))))
+                nov-file (gnus-agent-article-name ".overview" group))
+          (gnus-message 5 "Expiring articles in %s" group)
+          (set-buffer overview)
+          (erase-buffer)
+          (when (file-exists-p nov-file)
+            (insert-file-contents nov-file))
+          (goto-char (point-min))
+          (while (setq elem (pop articles))
+            (setq article (car elem))
+            (when (or (null low)
+                      (< article low)
+                      (and (not (memq article unreads))
+                           (not (memq article marked))))
+              ;; Find and nuke the NOV line.
+              (while (and (not (eobp))
+                          (< (setq art (read (current-buffer))) article))
+                (forward-line 1))
+              (if (or (eobp)
+                      (/= art article))
+                  (beginning-of-line)
+                (gnus-delete-line))
+              ;; Nuke the article.
+              (when (file-exists-p (setq file (gnus-agent-article-name
+                                               (number-to-string article)
+                                               group)))
+                (delete-file file))
+              ;; Schedule the history line for nuking.
+              (push (cdr elem) histories)))
+          (write-region (point-min) (point-max) nov-file nil 'silent))
+        expiry-hashtb)
+       (set-buffer history)
+       (setq histories (nreverse (sort histories '<)))
+       (while histories
+         (goto-char (pop histories))
+         (gnus-delete-line))
+       (gnus-agent-save-history)
+       (gnus-agent-close-history)))))
+  
+(defun gnus-agent-expire-old ()
+  "Expire all old articles."
+  (interactive)
+  (let ((methods gnus-agent-covered-methods)
        (alist (cdr gnus-newsrc-alist))
        gnus-command-method ofiles info method file group)
     (while (setq gnus-command-method (pop methods))
index 762f0e9..6229bfb 100644 (file)
@@ -2028,10 +2028,14 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (cons gnus-newsgroup-name article))
                (set-buffer gnus-summary-buffer)
                (setq gnus-current-article article)
-               (gnus-summary-mark-article article gnus-canceled-mark))
-             (unless (memq article gnus-newsgroup-sparse)
-               (gnus-error
-                1 "No such article (may have expired or been canceled)")))
+               (if (eq (gnus-article-mark article) gnus-undownloaded-mark)
+                   (progn
+                     (gnus-summary-set-agent-mark article)
+                     (message "Message marked for downloading"))
+                 (gnus-summary-mark-article article gnus-canceled-mark)
+                 (unless (memq article gnus-newsgroup-sparse)
+                   (gnus-error 1 
+                    "No such article (may have expired or been canceled)")))))
          (if (or (eq result 'pseudo) (eq result 'nneething))
              (progn
                (save-excursion
@@ -2306,7 +2310,7 @@ Argument LINES specifies lines to be scrolled down."
         '("\C-d"))
         (up-to-top
          '("n" "Gn" "p" "Gp"))
-       keys)
+       keys new-sum-point)
     (save-excursion
       (set-buffer gnus-article-current-summary)
       (let (gnus-pick-mode)
@@ -2327,22 +2331,26 @@ Argument LINES specifies lines to be scrolled down."
              (ding)
            (unless (member keys nosave-in-article)
              (set-buffer gnus-article-current-summary))
-           (call-interactively func))
+           (call-interactively func)
+           (setq new-sum-point (point)))
          (when (member keys nosave-but-article)
            (pop-to-buffer gnus-article-buffer 'norecord)))
       ;; These commands should restore window configuration.
       (let ((obuf (current-buffer))
            (owin (current-window-configuration))
            (opoint (point))
+           (summary gnus-article-current-summary)
            func in-buffer)
        (if not-restore-window
-           (pop-to-buffer gnus-article-current-summary 'norecord)
-         (switch-to-buffer gnus-article-current-summary 'norecord))
+           (pop-to-buffer summary 'norecord)
+         (switch-to-buffer summary 'norecord))
        (setq in-buffer (current-buffer))
        ;; We disable the pick minor mode commands.
        (if (setq func (let (gnus-pick-mode)
                         (lookup-key (current-local-map) keys)))
-           (call-interactively func)
+           (progn
+             (call-interactively func)
+             (setq new-sum-point (point)))
          (ding))
        (when (eq in-buffer (current-buffer))
          (set-buffer obuf)
@@ -2350,7 +2358,10 @@ Argument LINES specifies lines to be scrolled down."
            (set-window-configuration owin))
           (unless (member keys up-to-top)
             (set-window-point (get-buffer-window (current-buffer))
-                              opoint)))))))
+                              opoint))
+         (let ((win (get-buffer-window gnus-article-current-summary)))
+           (when win
+             (set-window-point win new-sum-point))))))))
 
 (defun gnus-article-hide (&optional arg force)
   "Hide all the gruft in the current article.
index 6637221..db74b92 100644 (file)
@@ -2615,7 +2615,7 @@ the thread are to be displayed."
             (set (car elem) (eval (nth 1 elem))))))))
 
 (defun gnus-summary-read-group (group &optional show-all no-article
-                                     kill-buffer no-display)
+                                     kill-buffer no-display backward)
   "Start reading news in newsgroup GROUP.
 If SHOW-ALL is non-nil, already read articles are also listed.
 If NO-ARTICLE is non-nil, no article is selected initially.
@@ -2630,6 +2630,11 @@ If NO-DISPLAY, don't generate a summary buffer."
                                  (setq show-all nil)))))
                (eq gnus-auto-select-next 'quietly))
       (set-buffer gnus-group-buffer)
+      ;; The entry function called above goes to the next
+      ;; group automatically, so we go two groups back
+      ;; if we are searching for the previous group.
+      (when backward
+       (gnus-group-prev-unread-group 2))
       (if (not (equal group (gnus-group-group-name)))
          (setq group (gnus-group-group-name))
        (setq group nil)))
@@ -4667,7 +4672,8 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
       ;; article we have fetched.
       (when (and (not gnus-show-threads)
                 old-header)
-       (when (setq d (gnus-data-find (mail-header-number old-header)))
+       (when (and number
+                  (setq d (gnus-data-find (mail-header-number old-header))))
          (goto-char (gnus-data-pos d))
          (gnus-data-remove
           number
@@ -5183,6 +5189,7 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
              gnus-expert-user
              (gnus-y-or-n-p "Discard changes to this group and exit? "))
       (gnus-async-halt-prefetch)
+      (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
       ;; If we have several article buffers, we kill them at exit.
       (unless gnus-single-article-buffer
        (gnus-kill-buffer gnus-article-buffer)
@@ -5422,7 +5429,8 @@ previous group instead."
                       (and unreads (not (zerop unreads))))
                   (gnus-summary-read-group
                    target-group nil no-article
-                   (and (buffer-name current-buffer) current-buffer)))
+                   (and (buffer-name current-buffer) current-buffer)
+                   nil backward))
              (setq entered t)
            (setq current-group target-group
                  target-group nil)))))))
@@ -6497,6 +6505,7 @@ or `gnus-select-method', no matter what backend the article comes from."
 
 (defun gnus-summary-edit-parameters ()
   "Edit the group parameters of the current group."
+  (interactive)
   (gnus-group-edit-group gnus-newsgroup-name 'params))
 
 (defun gnus-summary-enter-digest-group (&optional force)
index 17d7c58..0b86f72 100644 (file)
@@ -250,7 +250,7 @@ is restarted, and sometimes reloaded."
   "Version number for this version of gnus.")
 
 (defconst gnus-version
-  (format "Semi-gnus %s (based on Quassia Gnus v0.34)" gnus-version-number)
+  (format "Semi-gnus %s (based on Quassia Gnus v0.37)" gnus-version-number)
   "Version string for this version of gnus.")
 
 (defcustom gnus-inhibit-startup-message nil
@@ -1628,7 +1628,9 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
      ("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
       gnus-list-of-unread-articles gnus-list-of-read-articles
       gnus-offer-save-summaries gnus-make-thread-indent-array
-      gnus-summary-exit gnus-update-read-articles)
+      gnus-summary-exit gnus-update-read-articles gnus-summary-last-subject
+      gnus-summary-skip-intangible gnus-summary-article-number
+      gnus-data-header gnus-data-find)
      ("gnus-group" gnus-group-insert-group-line gnus-group-quit
       gnus-group-list-groups gnus-group-first-unread-group
       gnus-group-set-mode-line gnus-group-set-info gnus-group-save-newsrc
@@ -1673,7 +1675,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-async-halt-prefetch)
      ("gnus-agent" gnus-open-agent gnus-agent-get-function
       gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
-      gnus-agent-get-undownloaded-list gnus-agent-fetch-session)
+      gnus-agent-get-undownloaded-list gnus-agent-fetch-session
+      gnus-summary-set-agent-mark)
      ("gnus-agent" :interactive t
       gnus-unplugged gnus-agentize gnus-agent-batch)
      ("gnus-vm" :interactive t gnus-summary-save-in-vm
index c16bdef..44f3079 100644 (file)
@@ -238,8 +238,9 @@ on your system, you could say something like:
                       (setq ref2 (substring in-reply-to (match-beginning 0)
                                             (match-end 0)))
                       (when (> (length ref2) (length ref))
-                        (setq ref ref2))))
-                "")))
+                        (setq ref ref2)))
+                     ref)
+                nil)))
           ;; Chars.
           0
           ;; Lines.
@@ -559,7 +560,7 @@ If FILE is t, return the buffer contents as a string."
 
 (defsubst nnheader-file-to-number (file)
   "Take a file name and return the article number."
-  (if (not (boundp 'jka-compr-compression-info-list))
+  (if (string= nnheader-numerical-short-files "^[0-9]+$")
       (string-to-int file)
     (string-match nnheader-numerical-short-files file)
     (string-to-int (match-string 0 file))))