Importing pgnus-0.84
authorichikawa <ichikawa>
Tue, 4 May 1999 17:04:29 +0000 (17:04 +0000)
committerichikawa <ichikawa>
Tue, 4 May 1999 17:04:29 +0000 (17:04 +0000)
16 files changed:
lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-msg.el
lisp/gnus-sum.el
lisp/gnus-win.el
lisp/gnus.el
lisp/mail-source.el
lisp/message.el
lisp/mm-bodies.el
lisp/mm-decode.el
lisp/mm-util.el
lisp/nnheader.el
lisp/qp.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi

index d2317bc..f857607 100644 (file)
@@ -1,3 +1,71 @@
+Sat May  1 20:27:43 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v0.84 is released.
+
+1999-05-01 22:23:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-bug-message): Mime change.
+
+1999-04-22  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-sum.el (gnus-update-marks): Process null mark lists.
+
+1999-04-21  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Recognize
+       `x-uue'.
+
+1999-03-04  Aaron M. Ucko  <amu@mit.edu>
+
+       * mail-source.el (mail-source-fetch-pop): Only prompt for password
+       when authentication is 'password.
+
+1999-05-01 22:17:55    <pinard@iro.umontreal.ca>
+
+       * gnus-win.el (gnus-configure-windows): Accept a setting.
+
+1999-04-21 20:51:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-util.el (mm-quote-arg): Moved here.
+
+       * mm-decode.el (mm-quote-arg): Quote more chars.
+
+1999-04-18 20:12:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheader.el (nnheader-parse-head): Message-ID in In-Reply-To
+       with newlines would create buggy .nov files.
+
+       * gnus-art.el (gnus-article-date-lapsed-new-header): Default to nil.
+
+       * qp.el (quoted-printable-encode-region): Encode whitespace at the 
+       end of lines.
+
+       * message.el (message-mode): Doc fix.
+
+       * gnus-art.el (article-hide-headers): Delete the hidden headers. 
+
+       * gnus-msg.el (gnus-setup-posting-charset): Default group to "". 
+
+       * gnus-art.el (article-date-ut): Rewrite.
+
+       * mm-decode.el (mm-preferred-alternative-precedence): Reverse the
+       order. 
+
+       * gnus-msg.el (gnus-message-insert-stylings): Remove duplicate
+       headers. 
+
+       * gnus-art.el (gnus-article-date-lapsed-new-header): Doc fix. 
+
+1999-04-18  Didier Verna  <verna@inf.enst.fr>
+
+       * gnus-art.el (gnus-article-date-lapsed-new-header): new variable.
+       (article-date-ut): use it.
+
+1999-04-18 20:06:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch-pop): Call script
+       asynchronously. 
+
 Sun Apr 18 12:40:04 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.83 is released.
index e519bad..1bf48af 100644 (file)
@@ -596,6 +596,14 @@ on parts -- for instance, adding Vcard info to a database."
 (defcustom gnus-mime-multipart-functions nil
   "An alist of MIME types to functions to display them.")
 
+(defcustom gnus-article-date-lapsed-new-header nil
+  "Whether the X-Sent and Date headers can coexist.
+When using `gnus-treat-date-lapsed', the \"X-Sent:\" header will
+either replace the old \"Date:\" header (if this variable is nil), or
+be added below it (otherwise)."
+  :group 'gnus-article-headers
+  :type 'boolean)
+
 ;;;
 ;;; The treatment variables
 ;;;
@@ -861,7 +869,7 @@ See the manual for details."
   :type gnus-article-treat-custom)
 
 (defcustom gnus-treat-play-sounds nil
-  "Fill long lines.
+  "Play sounds.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
   :group 'gnus-article-treat
@@ -1007,78 +1015,59 @@ Initialized from `text-mode-syntax-table.")
     i))
 
 (defun article-hide-headers (&optional arg delete)
-  "Toggle whether to hide unwanted headers and possibly sort them as well.
-If given a negative prefix, always show; if given a positive prefix,
-always hide."
-  (interactive (gnus-article-hidden-arg))
-  (current-buffer)
-  (if (gnus-article-check-hidden-text 'headers arg)
-      ;; Show boring headers as well.
-      (gnus-article-show-hidden-text 'boring-headers)
-    ;; This function might be inhibited.
-    (unless gnus-inhibit-hiding
-      (save-excursion
-       (save-restriction
-         (let ((buffer-read-only nil)
-               (case-fold-search t)
-               (props (nconc (list 'article-type 'headers)
-                             gnus-hidden-properties))
-               (max (1+ (length gnus-sorted-header-list)))
-               (ignored (when (not gnus-visible-headers)
-                          (cond ((stringp gnus-ignored-headers)
-                                 gnus-ignored-headers)
-                                ((listp gnus-ignored-headers)
-                                 (mapconcat 'identity gnus-ignored-headers
-                                            "\\|")))))
-               (visible
-                (cond ((stringp gnus-visible-headers)
-                       gnus-visible-headers)
-                      ((and gnus-visible-headers
-                            (listp gnus-visible-headers))
-                       (mapconcat 'identity gnus-visible-headers "\\|"))))
-               (inhibit-point-motion-hooks t)
-               beg)
-           ;; First we narrow to just the headers.
-           (goto-char (point-min))
-           ;; Hide any "From " lines at the beginning of (mail) articles.
-           (while (looking-at "From ")
-             (forward-line 1))
-           (unless (bobp)
-             (if delete
-                 (delete-region (point-min) (point))
-               (gnus-article-hide-text (point-min) (point) props)))
-           ;; Then treat the rest of the header lines.
-           (narrow-to-region
-            (point)
-            (if (search-forward "\n\n" nil t) ; if there's a body
-                (progn (forward-line -1) (point))
-              (point-max)))
-           ;; Then we use the two regular expressions
-           ;; `gnus-ignored-headers' and `gnus-visible-headers' to
-           ;; select which header lines is to remain visible in the
-           ;; article buffer.
-           (goto-char (point-min))
-           (while (re-search-forward "^[^ \t]*:" nil t)
-             (beginning-of-line)
-             ;; Mark the rank of the header.
-             (put-text-property
-              (point) (1+ (point)) 'message-rank
-              (if (or (and visible (looking-at visible))
-                      (and ignored
-                           (not (looking-at ignored))))
-                  (gnus-article-header-rank)
-                (+ 2 max)))
-             (forward-line 1))
-           (message-sort-headers-1)
-           (when (setq beg (text-property-any
-                            (point-min) (point-max) 'message-rank (+ 2 max)))
-             ;; We make the unwanted headers invisible.
-             (if delete
-                 (delete-region beg (point-max))
-               ;; Suggested by Sudish Joseph <joseph@cis.ohio-state.edu>.
-               (gnus-article-hide-text-type beg (point-max) 'headers))
-             ;; Work around XEmacs lossage.
-             (put-text-property (point-min) beg 'invisible nil))))))))
+  "Hide unwanted headers and possibly sort them as well."
+  (interactive)
+  ;; This function might be inhibited.
+  (unless gnus-inhibit-hiding
+    (save-excursion
+      (save-restriction
+       (let ((buffer-read-only nil)
+             (case-fold-search t)
+             (max (1+ (length gnus-sorted-header-list)))
+             (ignored (when (not gnus-visible-headers)
+                        (cond ((stringp gnus-ignored-headers)
+                               gnus-ignored-headers)
+                              ((listp gnus-ignored-headers)
+                               (mapconcat 'identity gnus-ignored-headers
+                                          "\\|")))))
+             (visible
+              (cond ((stringp gnus-visible-headers)
+                     gnus-visible-headers)
+                    ((and gnus-visible-headers
+                          (listp gnus-visible-headers))
+                     (mapconcat 'identity gnus-visible-headers "\\|"))))
+             (inhibit-point-motion-hooks t)
+             beg)
+         ;; First we narrow to just the headers.
+         (article-narrow-to-head)
+         ;; Hide any "From " lines at the beginning of (mail) articles.
+         (while (looking-at "From ")
+           (forward-line 1))
+         (unless (bobp)
+           (delete-region (point-min) (point)))
+         ;; Then treat the rest of the header lines.
+         ;; Then we use the two regular expressions
+         ;; `gnus-ignored-headers' and `gnus-visible-headers' to
+         ;; select which header lines is to remain visible in the
+         ;; article buffer.
+         (while (re-search-forward "^[^ \t]*:" nil t)
+           (beginning-of-line)
+           ;; Mark the rank of the header.
+           (put-text-property
+            (point) (1+ (point)) 'message-rank
+            (if (or (and visible (looking-at visible))
+                    (and ignored
+                         (not (looking-at ignored))))
+                (gnus-article-header-rank)
+              (+ 2 max)))
+           (forward-line 1))
+         (message-sort-headers-1)
+         (when (setq beg (text-property-any
+                          (point-min) (point-max) 'message-rank (+ 2 max)))
+           ;; We delete the unwanted headers.
+           (add-text-properties (point-min) (+ 5 (point-min))
+                                '(article-type headers dummy-invisible t))
+           (delete-region beg (point-max))))))))
 
 (defun article-hide-boring-headers (&optional arg)
   "Toggle hiding of headers that aren't very interesting.
@@ -1710,7 +1699,8 @@ means show, 0 means toggle."
   "Say whether the current buffer contains hidden text of type TYPE."
   (let ((pos (text-property-any (point-min) (point-max) 'article-type type)))
     (while (and pos
-               (not (get-text-property pos 'invisible)))
+               (not (get-text-property pos 'invisible))
+               (not (get-text-property pos 'dummy-invisible)))
       (setq pos
            (text-property-any (1+ pos) (point-max) 'article-type type)))
     (if pos
@@ -1748,7 +1738,9 @@ If HIDE, hide the text instead."
 (defun article-date-ut (&optional type highlight header)
   "Convert DATE date to universal time in the current article.
 If TYPE is `local', convert to local time; if it is `lapsed', output
-how much time has lapsed since DATE."
+how much time has lapsed since DATE. For `lapsed', the value of
+`gnus-article-date-lapsed-new-header' says whether the \"X-Sent:\" header
+should replace the \"Date:\" one, or should be added below it."
   (interactive (list 'ut t))
   (let* ((header (or header
                     (mail-header-date (save-excursion
@@ -1756,38 +1748,50 @@ how much time has lapsed since DATE."
                                         gnus-current-headers))
                     (message-fetch-field "date")
                     ""))
+        (tdate-regexp "^Date:[ \t]\\|^X-Sent:[ \t]")
+        (date-regexp
+         (cond
+          ((not gnus-article-date-lapsed-new-header)
+           tdate-regexp)
+          ((eq type 'lapsed)
+           "^X-Sent:[ \t]")
+          (t
+           "^Date:[ \t]")))
         (date (if (vectorp header) (mail-header-date header)
                 header))
-        (date-regexp "^Date:[ \t]\\|^X-Sent:[ \t]")
         (inhibit-point-motion-hooks t)
-        bface eface newline)
+        (newline t)
+        bface eface)
     (when (and date (not (string= date "")))
       (save-excursion
        (save-restriction
          (article-narrow-to-head)
+         (when (re-search-forward tdate-regexp nil t)
+           (setq bface (get-text-property (gnus-point-at-bol) 'face)
+                 eface (get-text-property (1- (gnus-point-at-eol))
+                                          'face))
+           (forward-line 1))
+         (goto-char (point-min))
          (let ((buffer-read-only nil))
-           ;; Delete any old Date headers.
-           (if (re-search-forward date-regexp nil t)
-               (progn
-                 (setq bface (get-text-property (gnus-point-at-bol) 'face)
-                       eface (get-text-property (1- (gnus-point-at-eol))
-                                                'face))
+           ;; Delete any old Date headers.
+           (while (re-search-forward date-regexp nil t)
+             (if newline
                  (delete-region (progn (beginning-of-line) (point))
                                 (progn (end-of-line) (point)))
-                 (beginning-of-line))
-             (goto-char (point-max))
-             (setq newline t))
+               (delete-region (progn (beginning-of-line) (point))
+                              (progn (forward-line 1) (point))))
+             (setq newline nil))
            (insert (article-make-date-line date type))
+           (when newline
+             (insert "\n")
+             (forward-line -1))
            ;; Do highlighting.
            (beginning-of-line)
            (when (looking-at "\\([^:]+\\): *\\(.*\\)$")
              (put-text-property (match-beginning 1) (1+ (match-end 1))
                                 'face bface)
              (put-text-property (match-beginning 2) (match-end 2)
-                                'face eface))
-           (when newline
-             (end-of-line)
-             (insert "\n"))))))))
+                                'face eface))))))))
 
 (defun article-make-date-line (date type)
   "Return a DATE line of TYPE."
index 910e874..8be2d2b 100644 (file)
@@ -135,9 +135,10 @@ the second with the current group name.")
 The buffer below is a mail buffer.  When you press `C-c C-c', it will
 be sent to the Gnus Bug Exterminators.
 
-At the bottom of the buffer you'll see lots of variable settings.
-Please do not delete those.  They will tell the Bug People what your
-environment is, so that it will be easier to locate the bugs.
+The thing near the bottom of the buffer is how the environment
+settings will be included in the mail.  Please do not delete that.
+They will tell the Bug People what your environment is, so that it
+will be easier to locate the bugs.
 
 If you have found a bug that makes Emacs go \"beep\", set
 debug-on-error to t (`M-x set-variable RET debug-on-error RET t RET')
@@ -220,6 +221,7 @@ Thank you for your help in stamping out bugs.
 
 (defun gnus-setup-posting-charset (group)
   (let ((alist gnus-group-posting-charset-alist)
+       (group (or group ""))
        elem)
     (when group
       (catch 'found
@@ -1171,9 +1173,10 @@ this is a reply."
 (defun gnus-message-insert-stylings ()
   (let (val)
     (save-excursion
-      (message-goto-eoh)
       (while (setq val (pop gnus-message-style-insertions))
        (when (cdr val)
+         (message-remove-header (car val))
+         (message-goto-eoh)
          (insert (car val) ": " (cdr val) "\n"))
        (gnus-pull (car val) gnus-message-style-insertions t)))))
 
index 8ef602d..c92f080 100644 (file)
@@ -1446,6 +1446,7 @@ increase the score of each group you read."
     "e" gnus-summary-end-of-article
     "^" gnus-summary-refer-parent-article
     "r" gnus-summary-refer-parent-article
+    "D" gnus-summary-enter-digest-group
     "R" gnus-summary-refer-references
     "T" gnus-summary-refer-thread
     "g" gnus-summary-show-article
@@ -4264,13 +4265,14 @@ If SELECT-ARTICLES, only select those articles from GROUP."
        (uncompressed '(score bookmark killed))
        type list newmarked symbol delta-marks)
     (when info
-      ;; Add all marks lists that are non-nil to the list of marks lists.
+      ;; Add all marks lists to the list of marks lists.
       (while (setq type (pop types))
-       (when (setq list (symbol-value
+       (setq list (symbol-value
                          (setq symbol
                                (intern (format "gnus-newsgroup-%s"
                                                (car type))))))
 
+       (when list
          ;; Get rid of the entries of the articles that have the
          ;; default score.
          (when (and (eq (cdr type) 'score)
@@ -4285,7 +4287,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                    (setcdr prev (cdr arts))
                  (setq prev arts))
                (setq arts (cdr arts)))
-             (setq list (cdr all))))
+             (setq list (cdr all)))))
 
          (when (gnus-check-backend-function 'request-set-mark
                                             gnus-newsgroup-name)
@@ -4301,11 +4303,13 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                (if del
                    (push (list del 'del (list (cdr type))) delta-marks)))))
          
+       (when list
          (push (cons (cdr type)
                      (if (memq (cdr type) uncompressed) list
                        (gnus-compress-sequence
                         (set symbol (sort list '<)) t)))
                newmarked)))
+       
 
       (when delta-marks
        (unless (gnus-check-group gnus-newsgroup-name)
@@ -7027,7 +7031,7 @@ If ARG is a negative number, hide the unwanted header lines."
             (inhibit-point-motion-hooks t)
             hidden e)
        (save-restriction 
-         (message-narrow-to-head)
+         (article-narrow-to-head)
          (setq hidden (gnus-article-hidden-text-p 'headers)))
        (goto-char (point-min))
        (when (search-forward "\n\n" nil t)
index 788e6a7..254b401 100644 (file)
@@ -408,48 +408,50 @@ See the Gnus manual for an explanation of the syntax used.")
 (defvar gnus-frame-split-p nil)
 
 (defun gnus-configure-windows (setting &optional force)
-  (setq gnus-current-window-configuration setting)
-  (setq force (or force gnus-always-force-window-configuration))
-  (setq setting (gnus-windows-old-to-new setting))
-  (let ((split (if (symbolp setting)
-                  (cadr (assq setting gnus-buffer-configuration))
-                setting))
-       all-visible)
-
-    (setq gnus-frame-split-p nil)
-
-    (unless split
-      (error "No such setting: %s" setting))
-
-    (if (and (setq all-visible (gnus-all-windows-visible-p split))
-            (not force))
-       ;; All the windows mentioned are already visible, so we just
-       ;; put point in the assigned buffer, and do not touch the
-       ;; winconf.
-       (select-window all-visible)
-
-      ;; Either remove all windows or just remove all Gnus windows.
-      (let ((frame (selected-frame)))
-       (unwind-protect
-           (if gnus-use-full-window
-               ;; We want to remove all other windows.
-               (if (not gnus-frame-split-p)
-                   ;; This is not a `frame' split, so we ignore the
-                   ;; other frames.
-                   (delete-other-windows)
-                 ;; This is a `frame' split, so we delete all windows
-                 ;; on all frames.
-                 (gnus-delete-windows-in-gnusey-frames))
-             ;; Just remove some windows.
-             (gnus-remove-some-windows)
-             (switch-to-buffer nntp-server-buffer))
-         (select-frame frame)))
-
-      (switch-to-buffer nntp-server-buffer)
-      (let (gnus-window-frame-focus)
-       (gnus-configure-frame split (get-buffer-window (current-buffer)))
-       (when gnus-window-frame-focus
-         (select-frame (window-frame gnus-window-frame-focus)))))))
+  (if (window-configuration-p setting)
+      (set-window-configuration setting)
+    (setq gnus-current-window-configuration setting)
+    (setq force (or force gnus-always-force-window-configuration))
+    (setq setting (gnus-windows-old-to-new setting))
+    (let ((split (if (symbolp setting)
+                    (cadr (assq setting gnus-buffer-configuration))
+                  setting))
+         all-visible)
+
+      (setq gnus-frame-split-p nil)
+
+      (unless split
+       (error "No such setting: %s" setting))
+
+      (if (and (setq all-visible (gnus-all-windows-visible-p split))
+              (not force))
+         ;; All the windows mentioned are already visible, so we just
+         ;; put point in the assigned buffer, and do not touch the
+         ;; winconf.
+         (select-window all-visible)
+
+       ;; Either remove all windows or just remove all Gnus windows.
+       (let ((frame (selected-frame)))
+         (unwind-protect
+             (if gnus-use-full-window
+                 ;; We want to remove all other windows.
+                 (if (not gnus-frame-split-p)
+                     ;; This is not a `frame' split, so we ignore the
+                     ;; other frames.
+                     (delete-other-windows)
+                   ;; This is a `frame' split, so we delete all windows
+                   ;; on all frames.
+                   (gnus-delete-windows-in-gnusey-frames))
+               ;; Just remove some windows.
+               (gnus-remove-some-windows)
+               (switch-to-buffer nntp-server-buffer))
+           (select-frame frame)))
+
+       (switch-to-buffer nntp-server-buffer)
+       (let (gnus-window-frame-focus)
+         (gnus-configure-frame split (get-buffer-window (current-buffer)))
+         (when gnus-window-frame-focus
+           (select-frame (window-frame gnus-window-frame-focus))))))))
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
index 1dd5bfd..5fc357c 100644 (file)
@@ -260,7 +260,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.83"
+(defconst gnus-version-number "0.84"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number)
index 5a66e10..acd758c 100644 (file)
@@ -351,7 +351,7 @@ If ARGS, PROMPT is used as an argument to `format'."
       (if (and (symbolp prescript)
               (fboundp prescript))
          (funcall prescript)
-       (call-process shell-file-name nil nil nil
+       (call-process shell-file-name nil 0 nil
                      shell-command-switch 
                      (format-spec
                       prescript
@@ -360,7 +360,7 @@ If ARGS, PROMPT is used as an argument to `format'."
     (let ((from (format "%s:%s:%s" server user port))
          (mail-source-string (format "pop:%s@%s" user server))
          result)
-      (when (not (eq authentication 'apop))
+      (when (eq authentication 'password)
        (setq password
              (or password
                  (cdr (assoc from mail-source-password-cache))
@@ -396,7 +396,7 @@ If ARGS, PROMPT is used as an argument to `format'."
              (if (and (symbolp postscript)
                       (fboundp postscript))
                  (funcall prescript)
-               (call-process shell-file-name nil nil nil
+               (call-process shell-file-name nil 0 nil
                              shell-command-switch 
                              (format-spec
                               postscript
index a8042fd..6b709a7 100644 (file)
@@ -1352,6 +1352,7 @@ Point is left at the beginning of the narrowed-to region."
   "Major mode for editing mail and news to be sent.
 Like Text Mode but with these additional commands:
 C-c C-s  message-send (send the message)    C-c C-c  message-send-and-exit
+C-c C-d  Pospone sending the message        C-c C-k  Kill the message
 C-c C-f  move to a header field (and create it if there isn't):
         C-c C-f C-t  move to To        C-c C-f C-s  move to Subject
         C-c C-f C-c  move to Cc        C-c C-f C-b  move to Bcc
index 298a62d..79afd06 100644 (file)
@@ -166,7 +166,7 @@ If no encoding was done, nil is returned."
            )
           ((null encoding)
            )
-          ((eq encoding 'x-uuencode)
+          ((memq encoding '(x-uuencode x-uue))
            (funcall mm-uu-decode-function (point-min) (point-max)))
           ((eq encoding 'x-binhex)
            (funcall mm-uu-binhex-decode-function (point-min) (point-max)))
@@ -178,7 +178,7 @@ If no encoding was done, nil is returned."
         (message "Error while decoding: %s" error)
         nil))
     (when (and
-          (memq encoding '(base64 x-uuencode x-binhex))
+          (memq encoding '(base64 x-uuencode x-uue x-binhex))
           (equal type "text/plain"))
       (goto-char (point-min))
       (while (search-forward "\r\n" nil t)
index bbe1ba6..375efd6 100644 (file)
@@ -456,19 +456,6 @@ This overrides entries in the mailcap file."
   "Say whether HANDLE is displayed or not."
   (mm-handle-undisplayer handle))
 
-(defun mm-quote-arg (arg)
-  "Return a version of ARG that is safe to evaluate in a shell."
-  (let ((pos 0) new-pos accum)
-    ;; *** bug: we don't handle newline characters properly
-    (while (setq new-pos (string-match "[;!'`\"$\\& \t{} |()<>]" arg pos))
-      (push (substring arg pos new-pos) accum)
-      (push "\\" accum)
-      (push (list (aref arg new-pos)) accum)
-      (setq pos (1+ new-pos)))
-    (if (= pos 0)
-        arg
-      (apply 'concat (nconc (nreverse accum) (list (substring arg pos)))))))
-
 ;;;
 ;;; Functions for outputting parts
 ;;;
@@ -586,7 +573,8 @@ This overrides entries in the mailcap file."
 
 (defun mm-preferred-alternative-precedence (handles)
   "Return the precedence based on HANDLES and mm-discouraged-alternatives."
-  (let ((seq (mapcar (lambda (h) (car (mm-handle-type h))) handles)))
+  (let ((seq (nreverse (mapcar (lambda (h)
+                                (car (mm-handle-type h))) handles))))
     (dolist (disc (reverse mm-discouraged-alternatives))
       (dolist (elem (copy-sequence seq))
        (when (string-match disc elem)
index dfad2a2..2ade070 100644 (file)
@@ -286,6 +286,19 @@ See also `with-temp-file' and `with-output-to-string'."
            mm-mime-mule-charset-alist)
     nil t)))
 
+(defun mm-quote-arg (arg)
+  "Return a version of ARG that is safe to evaluate in a shell."
+  (let ((pos 0) new-pos accum)
+    ;; *** bug: we don't handle newline characters properly
+    (while (setq new-pos (string-match "[]*[;!'`\"$\\& \t{} |()<>]" arg pos))
+      (push (substring arg pos new-pos) accum)
+      (push "\\" accum)
+      (push (list (aref arg new-pos)) accum)
+      (setq pos (1+ new-pos)))
+    (if (= pos 0)
+        arg
+      (apply 'concat (nconc (nreverse accum) (list (substring arg pos)))))))
+
 (provide 'mm-util)
 
 ;;; mm-util.el ends here
index 02fe048..8d6b254 100644 (file)
@@ -243,11 +243,12 @@ on your system, you could say something like:
               ;; promising.
               (if (and (search-forward "\nin-reply-to: " nil t)
                        (setq in-reply-to (nnheader-header-value))
-                       (string-match "<[^>]+>" in-reply-to))
+                       (string-match "<[^\n>]+>" in-reply-to))
                   (let (ref2)
                     (setq ref (substring in-reply-to (match-beginning 0)
                                          (match-end 0)))
-                    (while (string-match "<[^>]+>" in-reply-to (match-end 0))
+                    (while (string-match "<[^\n>]+>"
+                                         in-reply-to (match-end 0))
                       (setq ref2 (substring in-reply-to (match-beginning 0)
                                             (match-end 0)))
                       (when (> (length ref2) (length ref))
index a529868..e50a5a4 100644 (file)
@@ -74,14 +74,24 @@ matched by that regexp."
     (save-restriction
       (narrow-to-region from to)
       (mm-encode-body)
+      ;; Encode all the non-ascii and control characters.
       (goto-char (point-min))
       (while (and (skip-chars-forward
                   (or class "^\000-\007\013\015-\037\200-\377="))
                  (not (eobp)))
        (insert
         (prog1
-            (upcase (format "=%x" (char-after)))
+            (upcase (format "=%02x" (char-after)))
           (delete-char 1))))
+      ;; Encode white space at the end of lines.
+      (goto-char (point-min))
+      (while (re-search-forward "[ \t]+$" nil t)
+       (goto-char (match-beginning 0))
+       (while (not (eolp))
+         (insert
+          (prog1
+              (upcase (format "=%02x" (char-after)))
+            (delete-char 1)))))
       (when fold
        ;; Fold long lines.
        (goto-char (point-min))
index f090506..13df68b 100644 (file)
@@ -1,3 +1,12 @@
+1999-04-18  Didier Verna  <verna@inf.enst.fr>
+
+       * gnus.texi (Article treatment): document the new variable
+       `gnus-article-date-lapsed-new-header'.
+
+1999-04-26  Robert Bihlmeyer  <robbe@orcus.priv.at>
+
+       * gnus.texi (Posting Styles): Typo.
+
 1999-04-18 12:46:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Summary Score Commands): Typo.
index 98e5ac9..27a9a1e 100644 (file)
@@ -2,7 +2,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Pterodactyl Gnus 0.83 Manual
+@settitle Pterodactyl Gnus 0.84 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -319,7 +319,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Gnus 0.83 Manual
+@title Pterodactyl Gnus 0.84 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -355,7 +355,7 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Pterodactyl Gnus 0.83.
+This manual corresponds to Pterodactyl Gnus 0.84.
 
 @end ifinfo
 
@@ -4757,7 +4757,7 @@ Exclude all dormant articles from the limit
 @item / M
 @kindex / M (Summary)
 @findex gnus-summary-limit-exclude-marks
-Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}). 
+Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).
 
 @item / T
 @kindex / T (Summary)
@@ -6927,9 +6927,13 @@ Say how much time has elapsed between the article was posted and now
 (@code{gnus-article-date-lapsed}).  It looks something like:
 
 @example
-X-Sent: 29 years, 6 weeks, 4 days, 10 hours, 3 minutes, 28 seconds ago
+X-Sent: 9 years, 6 weeks, 4 days, 9 hours, 3 minutes, 28 seconds ago
 @end example
 
+The value of @code{gnus-article-date-lapsed-new-header} determines
+whether this header will just be added below the old Date one, or will
+replace it.
+
 An advantage of using Gnus to read mail is that it converts simple bugs
 into wonderful absurdities.
 
@@ -7812,8 +7816,10 @@ Pull all cached articles (for the current group) into the summary buffer
 
 @table @kbd
 
-@item C-d
+@item A D
+@itemx C-d
 @kindex C-d (Summary)
+@kindex A D (Summary)
 @findex gnus-summary-enter-digest-group
 If the current article is a collection of other articles (for instance,
 a digest), you might use this command to enter a group based on the that
@@ -8874,7 +8880,7 @@ any case, if this returns a non-@code{nil} value, then the style is said
 to @dfn{match}.
 
 Each style may contain a arbitrary amount of @dfn{attributes}.  Each
-attribute consists of a @var{(name . value)} pair.  The attribute name
+attribute consists of a @var{(name value)} pair.  The attribute name
 can be one of @code{signature}, @code{signature-file},
 @code{organization}, @code{address}, @code{name} or @code{body}.  The
 attribute name can also be a string.  In that case, this will be used as
@@ -10181,7 +10187,7 @@ Keywords:
 
 @table @code
 @item :path
-The path of the directory where the mails are stored.  The default is 
+The path of the directory where the mails are stored.  The default is
 @samp{~/Maildir/new}.
 
 If you sometimes look at your mail through a pop3 daemon before fetching
@@ -10835,7 +10841,7 @@ depends on what format you want to store your mail in.
 There are five different mail backends in the standard Gnus, and more
 backends are available separately.  The mail backend most people use
 (because it is the fastest and most flexible) is @code{nnml}
-(@pxref{Mail Spool}).  
+(@pxref{Mail Spool}).
 
 @menu
 * Unix Mail Box::               Using the (quite) standard Un*x mbox.
@@ -16589,7 +16595,7 @@ Emacsen.
 Gnus is developed in a two-phased cycle.  The first phase involves much
 discussion on the @samp{ding@@gnus.org} mailing list, where people
 propose changes and new features, post patches and new backends.  This
-phase is called the @dfn{alpha} phase, since the Gnusae released in this 
+phase is called the @dfn{alpha} phase, since the Gnusae released in this
 phase are @dfn{alpha releases}, or (perhaps more commonly in other
 circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
 unstable and should not be used by casual users.  Gnus alpha releases
@@ -16610,13 +16616,13 @@ lossage of mail if an alpha release hiccups while handling the mail.
 
 The division of discussion between the ding mailing list and the Gnus
 newsgroup is not purely based on publicity concerns.  It's true that
-having people write about the horrible things that an alpha Gnus release 
+having people write about the horrible things that an alpha Gnus release
 can do (sometimes) in a public forum may scare people off, but more
 importantly, talking about new experimental features that have been
 introduced may confuse casual users.  New features are frequently
 introduced, fiddled with, and judged to be found wanting, and then
 either discarded or totally rewritten.  People reading the mailing list
-usually keep up with these rapid changes, whille people on the newsgroup 
+usually keep up with these rapid changes, whille people on the newsgroup
 can't be assumed to do so.
 
 
index daba9f8..e2d3a30 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Pterodactyl Message 0.83 Manual
+@settitle Pterodactyl Message 0.84 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Message 0.83 Manual
+@title Pterodactyl Message 0.84 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -83,7 +83,7 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Pterodactyl Message 0.83.  Message is
+This manual corresponds to Pterodactyl Message 0.84.  Message is
 distributed with the Gnus distribution bearing the same version number
 as this manual.