*** pub/pgnus/lisp/gnus-art.el Sat Feb 20 22:35:24 1999 --- pgnus/lisp/gnus-art.el Fri Feb 26 18:01:02 1999 *************** *** 609,614 **** --- 609,618 ---- (integer :tag "Less") (sexp :tag "Predicate"))) + (defvar gnus-article-treat-head-custom + '(choice (const :tag "Off" nil) + (const :tag "Header" head))) + (defvar gnus-article-treat-types '("text/plain") "Parts to treat.") *************** *** 628,634 **** (defcustom gnus-treat-buttonize-head 'head "Add buttons to the head." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-emphasize t "Emphasize text." --- 632,638 ---- (defcustom gnus-treat-buttonize-head 'head "Add buttons to the head." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-emphasize t "Emphasize text." *************** *** 643,654 **** (defcustom gnus-treat-hide-headers 'head "Hide headers." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-hide-boring-headers nil "Hide boring headers." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-hide-signature nil "Hide the signature." --- 647,658 ---- (defcustom gnus-treat-hide-headers 'head "Hide headers." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-hide-boring-headers nil "Hide boring headers." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-hide-signature nil "Hide the signature." *************** *** 684,690 **** (defcustom gnus-treat-highlight-headers 'head "Highlight the headers." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-highlight-citation t "Highlight cited text." --- 688,694 ---- (defcustom gnus-treat-highlight-headers 'head "Highlight the headers." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-highlight-citation t "Highlight cited text." *************** *** 694,726 **** (defcustom gnus-treat-date-ut nil "Display the Date in UT (GMT)." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-date-local nil "Display the Date in the local timezone." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-date-lapsed nil "Display the Date header in a way that says how much time has elapsed." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-date-original nil "Display the date in the original timezone." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-date-iso8601 nil "Display the date in the ISO8601 format." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-date-user-defined nil "Display the date in a user-defined format. The format is defined by the `gnus-article-time-format' variable." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-strip-trailing-blank-lines nil "Strip trailing blank lines." --- 698,730 ---- (defcustom gnus-treat-date-ut nil "Display the Date in UT (GMT)." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-date-local nil "Display the Date in the local timezone." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-date-lapsed nil "Display the Date header in a way that says how much time has elapsed." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-date-original nil "Display the date in the original timezone." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-date-iso8601 nil "Display the date in the ISO8601 format." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-date-user-defined nil "Display the date in a user-defined format. The format is defined by the `gnus-article-time-format' variable." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-strip-trailing-blank-lines nil "Strip trailing blank lines." *************** *** 751,757 **** 'head nil) "Display X-Face headers." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-display-smileys (if (and gnus-xemacs (featurep 'xpm)) --- 755,761 ---- 'head nil) "Display X-Face headers." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-display-smileys (if (and gnus-xemacs (featurep 'xpm)) *************** *** 763,769 **** (defcustom gnus-treat-display-picons (if gnus-xemacs 'head nil) "Display picons." :group 'gnus-article-treat ! :type gnus-article-treat-custom) (defcustom gnus-treat-capitalize-sentences nil "Capitalize sentence-starting words." --- 767,773 ---- (defcustom gnus-treat-display-picons (if gnus-xemacs 'head nil) "Display picons." :group 'gnus-article-treat ! :type gnus-article-treat-head-custom) (defcustom gnus-treat-capitalize-sentences nil "Capitalize sentence-starting words." *************** *** 3123,3128 **** --- 3127,3133 ---- (save-excursion (set-buffer gnus-article-buffer) (goto-char (point-min)) + (widen) ;; Remove any old next/prev buttons. (when (gnus-visual-p 'page-marker) (let ((buffer-read-only nil)) *** pub/pgnus/lisp/gnus-cite.el Sat Feb 20 22:35:24 1999 --- pgnus/lisp/gnus-cite.el Fri Feb 26 18:01:03 1999 *************** *** 615,656 **** (defun gnus-cite-parse-maybe (&optional force) ! ;; Parse if the buffer has changes since last time. ! (if (and (not force) ! (equal gnus-cite-article gnus-article-current)) () ! (gnus-cite-localize) ! ;;Reset parser information. ! (setq gnus-cite-prefix-alist nil ! gnus-cite-attribution-alist nil ! gnus-cite-loose-prefix-alist nil ! gnus-cite-loose-attribution-alist nil) ! (while gnus-cite-overlay-list ! (gnus-delete-overlay (pop gnus-cite-overlay-list))) ! ;; Parse if not too large. ! (if (and (not force) ! gnus-cite-parse-max-size ! (> (buffer-size) gnus-cite-parse-max-size)) ! () ! (setq gnus-cite-article (cons (car gnus-article-current) ! (cdr gnus-article-current))) ! (gnus-cite-parse-wrapper)))) (defun gnus-cite-parse-wrapper () ;; Wrap chopped gnus-cite-parse (article-goto-body) (save-excursion (gnus-cite-parse-attributions)) ! ;; Try to avoid check citation if there is no reason to believe ! ;; that article has citations ! (if (or gnus-cite-always-check ! (save-excursion ! (re-search-backward gnus-cite-reply-regexp nil t)) ! gnus-cite-loose-attribution-alist) ! (progn (save-excursion ! (gnus-cite-parse)) ! (save-excursion ! (gnus-cite-connect-attributions))))) (defun gnus-cite-parse () ;; Parse and connect citation prefixes and attribution lines. --- 615,653 ---- (defun gnus-cite-parse-maybe (&optional force) ! "Always parse the buffer." ! (gnus-cite-localize) ! ;;Reset parser information. ! (setq gnus-cite-prefix-alist nil ! gnus-cite-attribution-alist nil ! gnus-cite-loose-prefix-alist nil ! gnus-cite-loose-attribution-alist nil) ! (gnus-cite-delete-overlays) ! ;; Parse if not too large. ! (if (and gnus-cite-parse-max-size ! (> (buffer-size) gnus-cite-parse-max-size)) () ! (setq gnus-cite-article (cons (car gnus-article-current) ! (cdr gnus-article-current))) ! (gnus-cite-parse-wrapper))) ! ! (defun gnus-cite-delete-overlays () ! (dolist (overlay gnus-cite-overlay-list) ! (when (or (not (gnus-overlay-end overlay)) ! (and (>= (gnus-overlay-end overlay) (point-min)) ! (<= (gnus-overlay-end overlay) (point-max)))) ! (setq gnus-cite-overlay-list (delete overlay gnus-cite-overlay-list)) ! (gnus-delete-overlay overlay)))) (defun gnus-cite-parse-wrapper () ;; Wrap chopped gnus-cite-parse (article-goto-body) (save-excursion (gnus-cite-parse-attributions)) ! (save-excursion ! (gnus-cite-parse)) ! (save-excursion ! (gnus-cite-connect-attributions))) (defun gnus-cite-parse () ;; Parse and connect citation prefixes and attribution lines. *** pub/pgnus/lisp/gnus-ems.el Wed Jan 20 01:52:10 1999 --- pgnus/lisp/gnus-ems.el Fri Feb 26 18:01:03 1999 *************** *** 49,74 **** ;;; Mule functions. - (defun gnus-mule-cite-add-face (number prefix face) - ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. - (when face - (let ((inhibit-point-motion-hooks t) - from to) - (goto-line number) - (unless (eobp) ; Sometimes things become confused (broken). - (if (boundp 'MULE) - (forward-char (chars-in-string prefix)) - (forward-char (length prefix))) - (skip-chars-forward " \t") - (setq from (point)) - (end-of-line 1) - (skip-chars-backward " \t") - (setq to (point)) - (when (< from to) - (push (setq overlay (gnus-make-overlay from to)) - gnus-cite-overlay-list) - (gnus-overlay-put (gnus-make-overlay from to) 'face face)))))) - (defun gnus-mule-max-width-function (el max-width) (` (let* ((val (eval (, el))) (valstr (if (numberp val) --- 49,54 ---- *************** *** 147,153 **** (defvar gnus-summary-display-table nil "Display table used in summary mode buffers.") - (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face) (fset 'gnus-max-width-function 'gnus-mule-max-width-function) (fset 'gnus-summary-set-display-table (lambda ())) --- 127,132 ---- *** pub/pgnus/lisp/gnus-msg.el Sat Feb 20 22:35:25 1999 --- pgnus/lisp/gnus-msg.el Fri Feb 26 18:01:03 1999 *************** *** 584,590 **** " (" gnus-version ")" " " (cond ! ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version) (concat "Emacs/" (match-string 1 emacs-version))) ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?" emacs-version) --- 584,590 ---- " (" gnus-version ")" " " (cond ! ((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version) (concat "Emacs/" (match-string 1 emacs-version))) ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?" emacs-version) *** pub/pgnus/lisp/gnus-picon.el Sat Feb 20 22:35:26 1999 --- pgnus/lisp/gnus-picon.el Fri Feb 26 18:01:04 1999 *************** *** 664,671 **** ;;; search job functions (defun gnus-picons-display-bar-p () ! (and (not (eq gnus-picons-display-where 'article)) ! gnus-picons-display-as-address)) (defun gnus-picons-network-search-internal (user addrs dbs sym-ann right-p marker &optional fnames) --- 664,672 ---- ;;; search job functions (defun gnus-picons-display-bar-p () ! (if (eq gnus-picons-display-where 'article) ! gnus-picons-display-article-move-p ! gnus-picons-display-as-address)) (defun gnus-picons-network-search-internal (user addrs dbs sym-ann right-p marker &optional fnames) *** pub/pgnus/lisp/gnus-sum.el Sat Feb 20 22:35:27 1999 --- pgnus/lisp/gnus-sum.el Fri Feb 26 18:01:05 1999 *************** *** 804,809 **** --- 804,810 ---- ("^relcom\\>" koi8-r) ("^\\(cz\\|hun\\|pl\\|sk\\)\\>" iso-8859-2) ("^israel\\>" iso-8859-1) + ("^han\\>" euc-kr) ("^\\(comp\\|rec\\|alt\\|sci\\|soc\\|news\\|gnu\\|bofh\\)\\>" iso-8859-1) (".*" iso-8859-1)) "Alist of regexps (to match group names) and default charsets to be used when reading." *************** *** 1274,1279 **** --- 1275,1281 ---- "\C-c\M-\C-s" gnus-summary-limit-include-expunged "\C-c\C-s\C-n" gnus-summary-sort-by-number "\C-c\C-s\C-l" gnus-summary-sort-by-lines + "\C-c\C-s\C-c" gnus-summary-sort-by-chars "\C-c\C-s\C-a" gnus-summary-sort-by-author "\C-c\C-s\C-s" gnus-summary-sort-by-subject "\C-c\C-s\C-d" gnus-summary-sort-by-date *************** *** 1830,1836 **** ["Sort by subject" gnus-summary-sort-by-subject t] ["Sort by date" gnus-summary-sort-by-date t] ["Sort by score" gnus-summary-sort-by-score t] ! ["Sort by lines" gnus-summary-sort-by-lines t]) ("Help" ["Fetch group FAQ" gnus-summary-fetch-faq t] ["Describe group" gnus-summary-describe-group t] --- 1832,1839 ---- ["Sort by subject" gnus-summary-sort-by-subject t] ["Sort by date" gnus-summary-sort-by-date t] ["Sort by score" gnus-summary-sort-by-score t] ! ["Sort by lines" gnus-summary-sort-by-lines t] ! ["Sort by characters" gnus-summary-sort-by-chars t]) ("Help" ["Fetch group FAQ" gnus-summary-fetch-faq t] ["Describe group" gnus-summary-describe-group t] *************** *** 3588,3593 **** --- 3591,3606 ---- (gnus-article-sort-by-lines (gnus-thread-header h1) (gnus-thread-header h2))) + (defsubst gnus-article-sort-by-chars (h1 h2) + "Sort articles by octet length." + (< (mail-header-chars h1) + (mail-header-chars h2))) + + (defun gnus-thread-sort-by-chars (h1 h2) + "Sort threads by root article octet length." + (gnus-article-sort-by-chars + (gnus-thread-header h1) (gnus-thread-header h2))) + (defsubst gnus-article-sort-by-author (h1 h2) "Sort articles by root author." (string-lessp *************** *** 7013,7038 **** (interactive "P") (save-excursion (set-buffer gnus-article-buffer) ! (let* ((buffer-read-only nil) ! (inhibit-point-motion-hooks t) ! (hidden (gnus-article-hidden-text-p 'headers)) ! e) ! (goto-char (point-min)) ! (when (search-forward "\n\n" nil t) ! (delete-region (point-min) (1- (point)))) ! (goto-char (point-min)) ! (save-excursion ! (set-buffer gnus-original-article-buffer) (goto-char (point-min)) ! (setq e (1- (or (search-forward "\n\n" nil t) (point-max))))) ! (insert-buffer-substring gnus-original-article-buffer 1 e) ! (narrow-to-region (point-min) (point)) ! (if (or hidden ! (and (numberp arg) (< arg 0))) ! (let ((gnus-treat-hide-headers nil) ! (gnus-treat-hide-boring-headers nil)) ! (gnus-treat-article 'head)) ! (gnus-treat-article 'head))))) (defun gnus-summary-show-all-headers () "Make all header lines visible." --- 7026,7053 ---- (interactive "P") (save-excursion (set-buffer gnus-article-buffer) ! (save-restriction ! (let* ((buffer-read-only nil) ! (inhibit-point-motion-hooks t) ! (hidden (gnus-article-hidden-text-p 'headers)) ! e) ! (goto-char (point-min)) ! (when (search-forward "\n\n" nil t) ! (delete-region (point-min) (1- (point)))) (goto-char (point-min)) ! (save-excursion ! (set-buffer gnus-original-article-buffer) ! (goto-char (point-min)) ! (setq e (1- (or (search-forward "\n\n" nil t) (point-max))))) ! (insert-buffer-substring gnus-original-article-buffer 1 e) ! (save-restriction ! (narrow-to-region (point-min) (point)) ! (if (or hidden ! (and (numberp arg) (< arg 0))) ! (let ((gnus-treat-hide-headers nil) ! (gnus-treat-hide-boring-headers nil)) ! (gnus-treat-article 'head)) ! (gnus-treat-article 'head))))))) (defun gnus-summary-show-all-headers () "Make all header lines visible." *************** *** 8588,8597 **** (gnus-summary-sort 'score reverse)) (defun gnus-summary-sort-by-lines (&optional reverse) ! "Sort the summary buffer by article length. Argument REVERSE means reverse order." (interactive "P") (gnus-summary-sort 'lines reverse)) (defun gnus-summary-sort (predicate reverse) "Sort summary buffer by PREDICATE. REVERSE means reverse order." --- 8603,8618 ---- (gnus-summary-sort 'score reverse)) (defun gnus-summary-sort-by-lines (&optional reverse) ! "Sort the summary buffer by the number of lines. Argument REVERSE means reverse order." (interactive "P") (gnus-summary-sort 'lines reverse)) + + (defun gnus-summary-sort-by-chars (&optional reverse) + "Sort the summary buffer by article length. + Argument REVERSE means reverse order." + (interactive "P") + (gnus-summary-sort 'chars reverse)) (defun gnus-summary-sort (predicate reverse) "Sort summary buffer by PREDICATE. REVERSE means reverse order." *** pub/pgnus/lisp/gnus.el Sat Feb 20 22:35:28 1999 --- pgnus/lisp/gnus.el Fri Feb 26 18:01:06 1999 *************** *** 259,265 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.77" "Version number for this version of Gnus.") (defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number) --- 259,265 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.78" "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 Feb 20 22:35:28 1999 --- pgnus/lisp/mail-source.el Fri Feb 26 18:01:06 1999 *************** *** 353,360 **** (if (eq authentication 'apop) 'apop 'pass))) (save-excursion (pop3-movemail mail-source-crash-box)))))) (if result ! (progn ! (mail-source-callback callback server) (when prescript (if (fboundp prescript) (funcall prescript) --- 353,360 ---- (if (eq authentication 'apop) 'apop 'pass))) (save-excursion (pop3-movemail mail-source-crash-box)))))) (if result ! (prog1 ! (mail-source-callback callback server) (when prescript (if (fboundp prescript) (funcall prescript) *************** *** 364,370 **** postscript (format-spec-make ?p password ?t mail-source-crash-box ! ?s server ?P port ?u user)))))) ;; We nix out the password in case the error ;; was because of a wrong password being given. (setq mail-source-password-cache --- 364,371 ---- postscript (format-spec-make ?p password ?t mail-source-crash-box ! ?s server ?P port ?u user))))) ! 1) ;; We nix out the password in case the error ;; was because of a wrong password being given. (setq mail-source-password-cache *** pub/pgnus/lisp/message.el Sat Feb 20 22:35:29 1999 --- pgnus/lisp/message.el Fri Feb 26 18:01:06 1999 *************** *** 1301,1310 **** (define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature) (define-key message-mode-map "\M-\r" 'message-newline-and-reformat) ! (define-key message-mode-map "\C-c\C-a" 'message-mime-attach-file) ! (define-key message-mode-map "\C-c\C-m\C-a" 'message-mime-attach-file) ! (define-key message-mode-map "\C-c\C-m\C-e" 'message-mime-attach-external) ! (define-key message-mode-map "\C-c\C-m\C-q" 'mml-quote-region) (define-key message-mode-map "\t" 'message-tab)) --- 1301,1307 ---- (define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature) (define-key message-mode-map "\M-\r" 'message-newline-and-reformat) ! (define-key message-mode-map "\C-c\C-a" 'mml-attach-file) (define-key message-mode-map "\t" 'message-tab)) *************** *** 1448,1453 **** --- 1445,1451 ---- (mm-enable-multibyte) (make-local-variable 'indent-tabs-mode) ;Turn off tabs for indentation. (setq indent-tabs-mode nil) + (mml-mode) (run-hooks 'text-mode-hook 'message-mode-hook)) *************** *** 3786,3794 **** ;; Put point where we want it before inserting the forwarded ;; message. (message-goto-body) ! (insert (format ! "\n\n<#part type=message/rfc822 buffer=%S disposition=inline><#/part>\n" ! (buffer-name cur))) (message-position-point))) ;;;###autoload --- 3784,3792 ---- ;; Put point where we want it before inserting the forwarded ;; message. (message-goto-body) ! (insert "\n\n<#part type=message/rfc822 disposition=inline>\n") ! (mml-insert-buffer cur) ! (insert "<#/part>\n") (message-position-point))) ;;;###autoload *************** *** 4108,4186 **** ;;; MIME functions ;;; - (defun message-mime-query-file (prompt) - (let ((file (read-file-name prompt nil nil t))) - ;; Prevent some common errors. This is inspired by similar code in - ;; VM. - (when (file-directory-p file) - (error "%s is a directory, cannot attach" file)) - (unless (file-exists-p file) - (error "No such file: %s" file)) - (unless (file-readable-p file) - (error "Permission denied: %s" file)) - file)) - - (defun message-mime-query-type (file) - (let* ((default (or (mm-default-file-encoding file) - ;; Perhaps here we should check what the file - ;; looks like, and offer text/plain if it looks - ;; like text/plain. - "application/octet-stream")) - (string (completing-read - (format "Content type (default %s): " default) - (delete-duplicates - (mapcar (lambda (m) (list (cdr m))) mailcap-mime-extensions) - :test 'equal)))) - (if (not (equal string "")) - string - default))) - - (defun message-mime-query-description () - (let ((description (read-string "One line description: "))) - (when (string-match "\\`[ \t]*\\'" description) - (setq description nil)) - description)) - - (defun message-mime-attach-file (file &optional type description) - "Attach a file to the outgoing MIME message. - The file is not inserted or encoded until you send the message with - `\\[message-send-and-exit]' or `\\[message-send]'. - - FILE is the name of the file to attach. TYPE is its content-type, a - string of the form \"type/subtype\". DESCRIPTION is a one-line - description of the attachment." - (interactive - (let* ((file (message-mime-query-file "Attach file: ")) - (type (message-mime-query-type file)) - (description (message-mime-query-description))) - (list file type description))) - (insert (format - "<#part type=%s name=%s filename=%s%s disposition=attachment><#/part>\n" - type (prin1-to-string (file-name-nondirectory file)) - (prin1-to-string file) - (if description - (format " description=%s" (prin1-to-string description)) - "")))) - - (defun message-mime-attach-external (file &optional type description) - "Attach an external file into the buffer. - FILE is an ange-ftp/efs specification of the part location. - TYPE is the MIME type to use." - (interactive - (let* ((file (message-mime-query-file "Attach external file: ")) - (type (message-mime-query-type file)) - (description (message-mime-query-description))) - (list file type description))) - (insert (format - "<#external type=%s name=%s disposition=attachment><#/external>\n" - type (prin1-to-string file)))) - (defun message-encode-message-body () (let ((mail-parse-charset (or mail-parse-charset message-default-charset message-posting-charset)) (case-fold-search t) ! lines multipart-p content-type-p) (message-goto-body) (save-restriction (narrow-to-region (point) (point-max)) --- 4106,4117 ---- ;;; MIME functions ;;; (defun message-encode-message-body () (let ((mail-parse-charset (or mail-parse-charset message-default-charset message-posting-charset)) (case-fold-search t) ! lines content-type-p) (message-goto-body) (save-restriction (narrow-to-region (point) (point-max)) *************** *** 4201,4219 **** (insert "MIME-Version: 1.0\n") (when lines (insert lines)) - (setq multipart-p - (re-search-backward "^Content-Type: multipart/" nil t)) - (goto-char (point-max)) (setq content-type-p (re-search-backward "^Content-Type:" nil t))) (save-restriction (message-narrow-to-headers-or-head) (message-remove-first-header "Content-Type") (message-remove-first-header "Content-Transfer-Encoding")) - (when multipart-p - (message-goto-body) - (insert "This is a MIME multipart message. If you are reading\n") - (insert "this, you shouldn't.\n")) ;; We always make sure that the message has a Content-Type header. ;; This is because some broken MTAs and MUAs get awfully confused ;; when confronted with a message with a MIME-Version header and --- 4132,4143 ---- *** pub/pgnus/lisp/mm-bodies.el Sat Feb 20 22:35:29 1999 --- pgnus/lisp/mm-bodies.el Fri Feb 26 18:01:07 1999 *************** *** 54,60 **** (gb2312 . base64) (cn-gb . base64) (cn-gb-2312 . base64) ! (euc-kr . base64) (iso-2022-jp-2 . base64) (iso-2022-int-1 . base64)) "Alist of MIME charsets to encodings. --- 54,60 ---- (gb2312 . base64) (cn-gb . base64) (cn-gb-2312 . base64) ! (euc-kr . 8bit) (iso-2022-jp-2 . base64) (iso-2022-int-1 . base64)) "Alist of MIME charsets to encodings. *** pub/pgnus/lisp/mm-view.el Sat Feb 20 22:35:29 1999 --- pgnus/lisp/mm-view.el Fri Feb 26 18:01:07 1999 *************** *** 147,155 **** (defun mm-inline-message (handle) (let ((b (point))) (save-excursion - (mm-insert-part handle) (save-restriction ! (narrow-to-region b (point)) (run-hooks 'gnus-article-decode-hook) (gnus-article-prepare-display) (mm-handle-set-undisplayer --- 147,155 ---- (defun mm-inline-message (handle) (let ((b (point))) (save-excursion (save-restriction ! (narrow-to-region b b) ! (mm-insert-part handle) (run-hooks 'gnus-article-decode-hook) (gnus-article-prepare-display) (mm-handle-set-undisplayer *** pub/pgnus/lisp/mml.el Thu Feb 11 06:02:24 1999 --- pgnus/lisp/mml.el Fri Feb 26 18:01:07 1999 *************** *** 380,395 **** (substring path (1+ (match-end 2)))) path)) ! (defun mml-quote-region (beg end) ! "Quote the MML tags in the region." ! (interactive "r") ! (save-excursion ! (goto-char beg) ! ;; Quote parts. ! (while (re-search-forward ! "<#/?!*\\(multipart\\|part\\|external\\)" end t) ! (goto-char (match-beginning 1)) ! (insert "!")))) ;;; ;;; Transforming MIME to MML --- 380,392 ---- (substring path (1+ (match-end 2)))) path)) ! (defun mml-insert-buffer (buffer) ! "Insert BUFFER at point and quote any MML markup." ! (save-restriction ! (narrow-to-region (point) (point)) ! (insert-buffer-substring buffer) ! (mml-quote-region (point-min) (point-max)) ! (goto-char (point-max)))) ;;; ;;; Transforming MIME to MML *************** *** 455,460 **** --- 452,586 ---- (insert " description=\"" (mm-handle-description handle) "\"")) (equal (split-string (car (mm-handle-type handle)) "/") "text") (insert ">\n"))) + + ;;; + ;;; Mode for inserting and editing MML forms + ;;; + + (defvar mml-mode-map + (let ((map (make-sparse-keymap)) + (main (make-sparse-keymap))) + (define-key map "f" 'mml-attach-file) + (define-key map "b" 'mml-attach-buffer) + (define-key map "q" 'mml-quote-region) + (define-key map "m" 'mml-insert-multipart) + (define-key map "q" 'mml-insert-part) + (define-key map "v" 'mml-validate) + (define-key main "\M-m" map) + main)) + + (easy-menu-define + mml-menu mml-mode-map "" + '("MML" + ("Attach" + ["File" mml-attach-file t] + ["Buffer" mml-attach-buffer t]) + ("Insert" + ["Multipart" mml-insert-multipart t] + ["Part" mml-insert-part t]) + ["Quote" mml-quote-region t] + ["Validate" mml-validate t])) + + (defvar mml-mode nil + "Minor mode for editing MML.") + + (defun mml-mode (&optional arg) + "Minor mode for editing MML. + + \\{mml-mode-map}" + (interactive "P") + (if (not (set (make-local-variable 'mml-mode) + (if (null arg) (not mml-mode) + (> (prefix-numeric-value arg) 0)))) + nil + (add-minor-mode 'mml-mode " MML" mml-mode-map) + (set (make-local-variable 'mml-mode) t) + (unless (assq 'mml-mode minor-mode-alist) + (push `(mml-mode " MML") minor-mode-alist)) + (unless (assq 'mml-mode minor-mode-map-alist) + (push (cons 'mml-mode mml-mode-map) + minor-mode-map-alist))) + (run-hooks 'mml-mode-hook)) + + (defun mml-read-file (prompt) + (let ((file (read-file-name prompt nil nil t))) + ;; Prevent some common errors. This is inspired by similar code in + ;; VM. + (when (file-directory-p file) + (error "%s is a directory, cannot attach" file)) + (unless (file-exists-p file) + (error "No such file: %s" file)) + (unless (file-readable-p file) + (error "Permission denied: %s" file)) + file)) + + (defun mml-read-type (file) + (let* ((default (or (mm-default-file-encoding file) + ;; Perhaps here we should check what the file + ;; looks like, and offer text/plain if it looks + ;; like text/plain. + "application/octet-stream")) + (string (completing-read + (format "Content type (default %s): " default) + (delete-duplicates + (mapcar (lambda (m) (list (cdr m))) mailcap-mime-extensions) + :test 'equal)))) + (if (not (equal string "")) + string + default))) + + (defun mml-read-description () + (let ((description (read-string "One line description: "))) + (when (string-match "\\`[ \t]*\\'" description) + (setq description nil)) + description)) + + (defun mml-quote-region (beg end) + "Quote the MML tags in the region." + (interactive "r") + (save-excursion + (goto-char beg) + ;; Quote parts. + (while (re-search-forward + "<#/?!*\\(multipart\\|part\\|external\\)" end t) + (goto-char (match-beginning 1)) + (insert "!")))) + + (defun mml-attach-file (file &optional type description) + "Attach a file to the outgoing MIME message. + The file is not inserted or encoded until you send the message with + `\\[message-send-and-exit]' or `\\[message-send]'. + + FILE is the name of the file to attach. TYPE is its content-type, a + string of the form \"type/subtype\". DESCRIPTION is a one-line + description of the attachment." + (interactive + (let* ((file (mml-read-file "Attach file: ")) + (type (mml-read-type file)) + (description (mml-read-description))) + (list file type description))) + (insert + (format + "<#part type=%s name=%s filename=%s%s disposition=attachment><#/part>\n" + type (prin1-to-string (file-name-nondirectory file)) + (prin1-to-string file) + (if description + (format " description=%s" (prin1-to-string description)) + "")))) + + (defun mml-attach-external (file &optional type description) + "Attach an external file into the buffer. + FILE is an ange-ftp/efs specification of the part location. + TYPE is the MIME type to use." + (interactive + (let* ((file (mml-read-file "Attach external file: ")) + (type (mml-read-type file)) + (description (mml-read-description))) + (list file type description))) + (insert (format + "<#external type=%s name=%s disposition=attachment><#/external>\n" + type (prin1-to-string file)))) + (provide 'mml) *** pub/pgnus/lisp/nnheader.el Thu Feb 11 06:02:24 1999 --- pgnus/lisp/nnheader.el Fri Feb 26 18:01:07 1999 *************** *** 1,3 **** --- 1,4 ---- + ;;; nnheader.el --- header access macros for Gnus and its backends ;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc. *** pub/pgnus/lisp/nnmail.el Sat Feb 20 22:35:29 1999 --- pgnus/lisp/nnmail.el Fri Feb 26 18:01:07 1999 *************** *** 32,37 **** --- 32,38 ---- (require 'custom) (require 'gnus-util) (require 'mail-source) + (require 'mm-util) (eval-and-compile (autoload 'gnus-error "gnus-util") *************** *** 1099,1104 **** --- 1100,1109 ---- ((eq (car split) ':) (nnmail-split-it (save-excursion (eval (cdr split))))) + ;; Builtin ! operation. + ((eq (car split) '!) + (funcall (cadr split) (nnmail-split-it (caddr split)))) + ;; Check the cache for the regexp for this split. ((setq cached-pair (assq split nnmail-split-cache)) (goto-char (point-max)) *************** *** 1374,1381 **** (setq source (append source (list :predicate `(lambda (file) ! (string-match ,(regexp-quote group) ! file)))))) (when nnmail-fetched-sources (if (member source nnmail-fetched-sources) (setq source nil) --- 1379,1387 ---- (setq source (append source (list :predicate `(lambda (file) ! (string-match ! ,(concat (regexp-quote group) "$") ! file)))))) (when nnmail-fetched-sources (if (member source nnmail-fetched-sources) (setq source nil) *** pub/pgnus/lisp/ChangeLog Sat Feb 20 22:35:23 1999 --- pgnus/lisp/ChangeLog Fri Feb 26 18:01:02 1999 *************** *** 1,3 **** --- 1,89 ---- + Fri Feb 26 17:00:25 1999 Lars Magne Ingebrigtsen + + * gnus.el: Pterodactyl Gnus v0.78 is released. + + 1999-02-26 07:45:30 Lars Magne Ingebrigtsen + + * message.el (message-mode): Switch on MML mode. + + * mml.el: Included commands and functions. + (mml-mode-map): New keymap. + + * message.el: Removed the insertion commands and functions. + + * gnus-ems.el (gnus-mule-cite-add-face): Removed. + + * gnus-sum.el (gnus-summary-sort-by-chars): New command and + keystroke. + + * gnus-art.el (gnus-narrow-to-page): Revert. + + * gnus-cite.el (gnus-cite-delete-overlays): New function. + (gnus-cite-parse-maybe): Always reparse. + + * message.el (message-encode-message-body): Don't insert + "multipart warning". + + * gnus-art.el (gnus-article-treat-head-custom): New variable. + + 1999-02-25 Miles Bader + + * mail-source.el (mail-source-fetch-pop): Return 1 for success. + + * nnmail.el: Require mm-util. + + 1999-02-26 07:39:33 Justin Sheehy + + * nnmail.el (nnmail-get-new-mail): Only get mail for the one + group. + + 1999-02-26 07:38:08 SeokChan LEE + + * mm-bodies.el (mm-body-charset-encoding-alist): Add euc-kr. + + 1999-02-21 Simon Josefsson + + * gnus-msg.el (gnus-extended-version): Better regexp. + + 1999-02-25 Didier Verna + + * nnmail.el (nnmail-split-it): new syntax: `(! FUNC SPLIT)'. FUNC + is called with the result of SPLIT and should return a new split. + + * gnus.texi: update the doc. + + 1999-02-23 Didier Verna + + * gnus-picon.el (gnus-picons-display-bar-p): when picons are + displayed in the article buffer, output bars if + `gnus-picons-display-article-move-p'. + + 1999-02-20 Aaron M. Ucko + + * mail-source.el (mail-source-fetch-pop): Typo. + + 1999-02-26 07:15:12 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-toggle-header): Save restriction. + + 1999-02-23 03:07:58 Lars Magne Ingebrigtsen + + * gnus-cite.el (gnus-cite-parse-wrapper): Always parse. + + 1999-02-21 11:11:39 Lars Magne Ingebrigtsen + + * mml.el (mml-insert-buffer): New function. + + * message.el (message-forward): Insert the buffer in the buffer. + + Sun Feb 21 01:20:50 1999 Shenghuo ZHU + + * mm-view.el (mm-inline-message): Insert part in narrowed region. + + Sat Feb 20 23:09:40 1999 Shenghuo ZHU + + * gnus-sum.el (gnus-summary-toggle-header): Save restriction. + Sat Feb 20 21:34:28 1999 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v0.77 is released. *** pub/pgnus/texi/Makefile.in Sun Nov 29 16:03:55 1998 --- pgnus/texi/Makefile.in Fri Feb 26 18:01:08 1999 *************** *** 25,34 **** .SUFFIXES: .texi .dvi .ps .texi: ! if test $(MAKEINFO) = no; then \ ! $(EMACSINFO) -eval '(find-file "$<")' $(XINFOSWI); \ ! else \ makeinfo -o $* $<; \ fi dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi --- 25,34 ---- .SUFFIXES: .texi .dvi .ps .texi: ! if test -x $(MAKEINFO); then \ makeinfo -o $* $<; \ + else \ + $(EMACSINFO) -eval '(find-file "$<")' $(XINFOSWI); \ fi dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi *** pub/pgnus/texi/gnus.texi Sat Feb 20 22:35:33 1999 --- pgnus/texi/gnus.texi Fri Feb 26 18:01:11 1999 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Pterodactyl Gnus 0.77 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Pterodactyl Gnus 0.78 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 318,324 **** @tex @titlepage ! @title Pterodactyl Gnus 0.77 Manual @author by Lars Magne Ingebrigtsen @page --- 318,324 ---- @tex @titlepage ! @title Pterodactyl Gnus 0.78 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 354,360 **** spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Pterodactyl Gnus 0.77. @end ifinfo --- 354,360 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Pterodactyl Gnus 0.78. @end ifinfo *************** *** 7122,7127 **** --- 7122,7132 ---- @findex gnus-summary-sort-by-lines Sort by lines (@code{gnus-summary-sort-by-lines}). + @item C-c C-s C-c + @kindex C-c C-s C-c (Summary) + @findex gnus-summary-sort-by-chars + Sort by article length (@code{gnus-summary-sort-by-chars}). + @item C-c C-s C-i @kindex C-c C-s C-i (Summary) @findex gnus-summary-sort-by-score *************** *** 10103,10110 **** Use @samp{movemail} to move the mail: @lisp ! (pop :program "movemail" ! :args (format "po:%s %s %s" user mail-source-crash-box password)) @end lisp @item maildir --- 10108,10114 ---- Use @samp{movemail} to move the mail: @lisp ! (pop :program "movemail po:%u %t %p") @end lisp @item maildir *************** *** 10356,10361 **** --- 10360,10370 ---- a SPLIT. @item + @var{(! FUNC SPLIT)}: If the split is a list, and the first element + is @code{!}, then SPLIT will be processed, and FUNC will be called as a + function with the result of SPLIT as argument. FUNC should return a split. + + @item @code{nil}: If the split is @code{nil}, it is ignored. @end enumerate *************** *** 12154,12161 **** @lisp (defun my-article-old-p () "Say whether an article is old." ! (< (time-to-day (date-to-time (mail-header-date gnus-headers))) ! (- (time-to-day (current-time)) gnus-agent-expire-days))) @end lisp with the predicate then defined as: --- 12163,12170 ---- @lisp (defun my-article-old-p () "Say whether an article is old." ! (< (time-to-days (date-to-time (mail-header-date gnus-headers))) ! (- (time-to-days (current-time)) gnus-agent-expire-days))) @end lisp with the predicate then defined as: *** pub/pgnus/texi/message.texi Sat Feb 20 22:35:33 1999 --- pgnus/texi/message.texi Fri Feb 26 18:01:11 1999 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Pterodactyl Message 0.77 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Pterodactyl Message 0.78 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 42,48 **** @tex @titlepage ! @title Pterodactyl Message 0.77 Manual @author by Lars Magne Ingebrigtsen @page --- 42,48 ---- @tex @titlepage ! @title Pterodactyl Message 0.78 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.77. 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.78. Message is distributed with the Gnus distribution bearing the same version number as this manual. *** pub/pgnus/texi/ChangeLog Sat Feb 20 22:35:33 1999 --- pgnus/texi/ChangeLog Fri Feb 26 18:01:11 1999 *************** *** 1,3 **** --- 1,15 ---- + 1999-02-26 08:26:10 Lars Magne Ingebrigtsen + + * gnus.texi (Mail Source Specifiers): Fix. + + Thu Feb 25 00:28:49 1999 Shenghuo ZHU + + * gnus.texi (Category Syntax): Typo fix. + + 1999-02-21 11:42:54 Vladimir Volovich + + * Makefile.in (.texi): Fix check for MAKEINFO. + 1999-02-20 17:33:55 Lars Magne Ingebrigtsen * gnus.texi (Mail Source Specifiers): Addition.