*** pub/pgnus/lisp/gnus-art.el Sun Apr 18 14:44:05 1999 --- pgnus/lisp/gnus-art.el Sat May 1 22:33:10 1999 *************** *** 596,601 **** --- 596,609 ---- (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,867 **** :type gnus-article-treat-custom) (defcustom gnus-treat-play-sounds nil ! "Fill long lines. Valid values are nil, t, `head', `last', an integer or a predicate. See the manual for details." :group 'gnus-article-treat --- 869,875 ---- :type gnus-article-treat-custom) (defcustom gnus-treat-play-sounds nil ! "Play sounds. Valid values are nil, t, `head', `last', an integer or a predicate. See the manual for details." :group 'gnus-article-treat *************** *** 1007,1084 **** 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 . ! (gnus-article-hide-text-type beg (point-max) 'headers)) ! ;; Work around XEmacs lossage. ! (put-text-property (point-min) beg 'invisible nil)))))))) (defun article-hide-boring-headers (&optional arg) "Toggle hiding of headers that aren't very interesting. --- 1015,1073 ---- i)) (defun article-hide-headers (&optional arg delete) ! "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,1716 **** "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))) (setq pos (text-property-any (1+ pos) (point-max) 'article-type type))) (if pos --- 1699,1706 ---- "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 'dummy-invisible))) (setq pos (text-property-any (1+ pos) (point-max) 'article-type type))) (if pos *************** *** 1748,1754 **** (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." (interactive (list 'ut t)) (let* ((header (or header (mail-header-date (save-excursion --- 1738,1746 ---- (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. 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,1793 **** gnus-current-headers)) (message-fetch-field "date") "")) (date (if (vectorp header) (mail-header-date header) header)) - (date-regexp "^Date:[ \t]\\|^X-Sent:[ \t]") (inhibit-point-motion-hooks t) ! bface eface newline) (when (and date (not (string= date ""))) (save-excursion (save-restriction (article-narrow-to-head) (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-region (progn (beginning-of-line) (point)) (progn (end-of-line) (point))) ! (beginning-of-line)) ! (goto-char (point-max)) ! (setq newline t)) (insert (article-make-date-line date type)) ;; 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")))))))) (defun article-make-date-line (date type) "Return a DATE line of TYPE." --- 1748,1797 ---- 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)) (inhibit-point-motion-hooks t) ! (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. ! (while (re-search-forward date-regexp nil t) ! (if newline (delete-region (progn (beginning-of-line) (point)) (progn (end-of-line) (point))) ! (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)))))))) (defun article-make-date-line (date type) "Return a DATE line of TYPE." *** pub/pgnus/lisp/gnus-msg.el Sun Apr 18 14:44:07 1999 --- pgnus/lisp/gnus-msg.el Sat May 1 22:33:11 1999 *************** *** 135,143 **** 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. 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') --- 135,144 ---- The buffer below is a mail buffer. When you press `C-c C-c', it will be sent to the Gnus Bug Exterminators. ! 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,225 **** --- 221,227 ---- (defun gnus-setup-posting-charset (group) (let ((alist gnus-group-posting-charset-alist) + (group (or group "")) elem) (when group (catch 'found *************** *** 1171,1179 **** (defun gnus-message-insert-stylings () (let (val) (save-excursion - (message-goto-eoh) (while (setq val (pop gnus-message-style-insertions)) (when (cdr val) (insert (car val) ": " (cdr val) "\n")) (gnus-pull (car val) gnus-message-style-insertions t))))) --- 1173,1182 ---- (defun gnus-message-insert-stylings () (let (val) (save-excursion (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))))) *** pub/pgnus/lisp/gnus-sum.el Sun Apr 18 14:44:09 1999 --- pgnus/lisp/gnus-sum.el Sat May 1 22:33:12 1999 *************** *** 1446,1451 **** --- 1446,1452 ---- "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,4276 **** (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. (while (setq type (pop types)) ! (when (setq list (symbol-value (setq symbol (intern (format "gnus-newsgroup-%s" (car type)))))) ;; Get rid of the entries of the articles that have the ;; default score. (when (and (eq (cdr type) 'score) --- 4265,4278 ---- (uncompressed '(score bookmark killed)) type list newmarked symbol delta-marks) (when info ! ;; Add all marks lists to the list of marks lists. (while (setq type (pop types)) ! (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,4291 **** (setcdr prev (cdr arts)) (setq prev arts)) (setq arts (cdr arts))) ! (setq list (cdr all)))) (when (gnus-check-backend-function 'request-set-mark gnus-newsgroup-name) --- 4287,4293 ---- (setcdr prev (cdr arts)) (setq prev arts)) (setq arts (cdr arts))) ! (setq list (cdr all))))) (when (gnus-check-backend-function 'request-set-mark gnus-newsgroup-name) *************** *** 4301,4311 **** --- 4303,4315 ---- (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,7033 **** (inhibit-point-motion-hooks t) hidden e) (save-restriction ! (message-narrow-to-head) (setq hidden (gnus-article-hidden-text-p 'headers))) (goto-char (point-min)) (when (search-forward "\n\n" nil t) --- 7031,7037 ---- (inhibit-point-motion-hooks t) hidden e) (save-restriction ! (article-narrow-to-head) (setq hidden (gnus-article-hidden-text-p 'headers))) (goto-char (point-min)) (when (search-forward "\n\n" nil t) *** pub/pgnus/lisp/gnus-win.el Sat Jan 23 15:30:43 1999 --- pgnus/lisp/gnus-win.el Sat May 1 22:33:13 1999 *************** *** 408,455 **** (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))))))) (defun gnus-delete-windows-in-gnusey-frames () "Do a `delete-other-windows' in all frames that have Gnus windows." --- 408,457 ---- (defvar gnus-frame-split-p nil) (defun gnus-configure-windows (setting &optional force) ! (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." *** pub/pgnus/lisp/gnus.el Sun Apr 18 14:44:09 1999 --- pgnus/lisp/gnus.el Sat May 1 22:33:13 1999 *************** *** 260,266 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.83" "Version number for this version of Gnus.") (defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number) --- 260,266 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.84" "Version number for this version of Gnus.") (defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number) *** pub/pgnus/lisp/mail-source.el Sat Apr 17 18:45:20 1999 --- pgnus/lisp/mail-source.el Sat May 1 22:33:13 1999 *************** *** 351,357 **** (if (and (symbolp prescript) (fboundp prescript)) (funcall prescript) ! (call-process shell-file-name nil nil nil shell-command-switch (format-spec prescript --- 351,357 ---- (if (and (symbolp prescript) (fboundp prescript)) (funcall prescript) ! (call-process shell-file-name nil 0 nil shell-command-switch (format-spec prescript *************** *** 360,366 **** (let ((from (format "%s:%s:%s" server user port)) (mail-source-string (format "pop:%s@%s" user server)) result) ! (when (not (eq authentication 'apop)) (setq password (or password (cdr (assoc from mail-source-password-cache)) --- 360,366 ---- (let ((from (format "%s:%s:%s" server user port)) (mail-source-string (format "pop:%s@%s" user server)) result) ! (when (eq authentication 'password) (setq password (or password (cdr (assoc from mail-source-password-cache)) *************** *** 396,402 **** (if (and (symbolp postscript) (fboundp postscript)) (funcall prescript) ! (call-process shell-file-name nil nil nil shell-command-switch (format-spec postscript --- 396,402 ---- (if (and (symbolp postscript) (fboundp postscript)) (funcall prescript) ! (call-process shell-file-name nil 0 nil shell-command-switch (format-spec postscript *** pub/pgnus/lisp/message.el Sun Apr 18 14:44:10 1999 --- pgnus/lisp/message.el Sat May 1 22:33:14 1999 *************** *** 1352,1357 **** --- 1352,1358 ---- "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 *** pub/pgnus/lisp/mm-bodies.el Fri Feb 26 18:01:07 1999 --- pgnus/lisp/mm-bodies.el Sat May 1 22:33:14 1999 *************** *** 166,172 **** ) ((null encoding) ) ! ((eq encoding 'x-uuencode) (funcall mm-uu-decode-function (point-min) (point-max))) ((eq encoding 'x-binhex) (funcall mm-uu-binhex-decode-function (point-min) (point-max))) --- 166,172 ---- ) ((null encoding) ) ! ((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,184 **** (message "Error while decoding: %s" error) nil)) (when (and ! (memq encoding '(base64 x-uuencode x-binhex)) (equal type "text/plain")) (goto-char (point-min)) (while (search-forward "\r\n" nil t) --- 178,184 ---- (message "Error while decoding: %s" error) nil)) (when (and ! (memq encoding '(base64 x-uuencode x-uue x-binhex)) (equal type "text/plain")) (goto-char (point-min)) (while (search-forward "\r\n" nil t) *** pub/pgnus/lisp/mm-decode.el Sun Apr 18 14:44:10 1999 --- pgnus/lisp/mm-decode.el Sat May 1 22:33:14 1999 *************** *** 456,474 **** "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 ;;; --- 456,461 ---- *************** *** 586,592 **** (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))) (dolist (disc (reverse mm-discouraged-alternatives)) (dolist (elem (copy-sequence seq)) (when (string-match disc elem) --- 573,580 ---- (defun mm-preferred-alternative-precedence (handles) "Return the precedence based on HANDLES and mm-discouraged-alternatives." ! (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) *** pub/pgnus/lisp/mm-util.el Sat Apr 17 18:45:21 1999 --- pgnus/lisp/mm-util.el Sat May 1 22:33:14 1999 *************** *** 286,291 **** --- 286,304 ---- 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 *** pub/pgnus/lisp/nnheader.el Sat Apr 17 07:44:58 1999 --- pgnus/lisp/nnheader.el Sat May 1 22:33:14 1999 *************** *** 243,253 **** ;; promising. (if (and (search-forward "\nin-reply-to: " nil t) (setq in-reply-to (nnheader-header-value)) ! (string-match "<[^>]+>" 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)) (setq ref2 (substring in-reply-to (match-beginning 0) (match-end 0))) (when (> (length ref2) (length ref)) --- 243,254 ---- ;; promising. (if (and (search-forward "\nin-reply-to: " nil t) (setq in-reply-to (nnheader-header-value)) ! (string-match "<[^\n>]+>" in-reply-to)) (let (ref2) (setq ref (substring in-reply-to (match-beginning 0) (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)) *** pub/pgnus/lisp/qp.el Fri Jan 15 21:52:22 1999 --- pgnus/lisp/qp.el Sat May 1 22:33:14 1999 *************** *** 74,87 **** (save-restriction (narrow-to-region from to) (mm-encode-body) (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))) (delete-char 1)))) (when fold ;; Fold long lines. (goto-char (point-min)) --- 74,97 ---- (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 "=%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)) *** pub/pgnus/lisp/ChangeLog Sun Apr 18 14:44:04 1999 --- pgnus/lisp/ChangeLog Sat May 1 22:33:10 1999 *************** *** 1,3 **** --- 1,71 ---- + Sat May 1 20:27:43 1999 Lars Magne Ingebrigtsen + + * gnus.el: Pterodactyl Gnus v0.84 is released. + + 1999-05-01 22:23:21 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-bug-message): Mime change. + + 1999-04-22 Simon Josefsson + + * gnus-sum.el (gnus-update-marks): Process null mark lists. + + 1999-04-21 Hrvoje Niksic + + * mm-bodies.el (mm-decode-content-transfer-encoding): Recognize + `x-uue'. + + 1999-03-04 Aaron M. Ucko + + * mail-source.el (mail-source-fetch-pop): Only prompt for password + when authentication is 'password. + + 1999-05-01 22:17:55 + + * gnus-win.el (gnus-configure-windows): Accept a setting. + + 1999-04-21 20:51:13 Lars Magne Ingebrigtsen + + * 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 + + * 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 + + * 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 + + * mail-source.el (mail-source-fetch-pop): Call script + asynchronously. + Sun Apr 18 12:40:04 1999 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v0.83 is released. *** pub/pgnus/texi/gnus.texi Sun Apr 18 14:44:13 1999 --- pgnus/texi/gnus.texi Sat May 1 22:33:18 1999 *************** *** 2,8 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Pterodactyl Gnus 0.83 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 2,8 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Pterodactyl Gnus 0.84 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 319,325 **** @tex @titlepage ! @title Pterodactyl Gnus 0.83 Manual @author by Lars Magne Ingebrigtsen @page --- 319,325 ---- @tex @titlepage ! @title Pterodactyl Gnus 0.84 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 355,361 **** 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. @end ifinfo --- 355,361 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Pterodactyl Gnus 0.84. @end ifinfo *************** *** 4757,4763 **** @item / M @kindex / M (Summary) @findex gnus-summary-limit-exclude-marks ! Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}). @item / T @kindex / T (Summary) --- 4757,4763 ---- @item / M @kindex / M (Summary) @findex gnus-summary-limit-exclude-marks ! Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}). @item / T @kindex / T (Summary) *************** *** 6927,6935 **** (@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 @end example An advantage of using Gnus to read mail is that it converts simple bugs into wonderful absurdities. --- 6927,6939 ---- (@code{gnus-article-date-lapsed}). It looks something like: @example ! 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,7819 **** @table @kbd ! @item C-d @kindex C-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 --- 7816,7825 ---- @table @kbd ! @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,8880 **** 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 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 --- 8880,8886 ---- 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 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,10187 **** @table @code @item :path ! 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 --- 10187,10193 ---- @table @code @item :path ! 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,10841 **** 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}). @menu * Unix Mail Box:: Using the (quite) standard Un*x mbox. --- 10841,10847 ---- 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}). @menu * Unix Mail Box:: Using the (quite) standard Un*x mbox. *************** *** 16589,16595 **** 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 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 --- 16595,16601 ---- 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 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,16622 **** 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 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 can't be assumed to do so. --- 16616,16628 ---- 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 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 can't be assumed to do so. *** pub/pgnus/texi/message.texi Sun Apr 18 14:44:13 1999 --- pgnus/texi/message.texi Sat May 1 22:33:18 1999 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Pterodactyl Message 0.83 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Pterodactyl Message 0.84 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 42,48 **** @tex @titlepage ! @title Pterodactyl Message 0.83 Manual @author by Lars Magne Ingebrigtsen @page --- 42,48 ---- @tex @titlepage ! @title Pterodactyl Message 0.84 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 83,89 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Pterodactyl Message 0.83. Message is distributed with the Gnus distribution bearing the same version number as this manual. --- 83,89 ---- * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Pterodactyl Message 0.84. Message is distributed with the Gnus distribution bearing the same version number as this manual. *** pub/pgnus/texi/ChangeLog Sun Apr 18 14:44:13 1999 --- pgnus/texi/ChangeLog Sat May 1 22:33:18 1999 *************** *** 1,3 **** --- 1,12 ---- + 1999-04-18 Didier Verna + + * gnus.texi (Article treatment): document the new variable + `gnus-article-date-lapsed-new-header'. + + 1999-04-26 Robert Bihlmeyer + + * gnus.texi (Posting Styles): Typo. + 1999-04-18 12:46:33 Lars Magne Ingebrigtsen * gnus.texi (Summary Score Commands): Typo.