*** pub/rgnus/lisp/gnus-art.el Sat Apr 12 01:49:52 1997 --- rgnus/lisp/gnus-art.el Sat Apr 19 06:12:49 1997 *************** *** 411,422 **** :type 'face :group 'gnus-article-buttons) ! (defcustom gnus-signature-face 'italic ! "Face used for highlighting a signature in the article buffer." :type 'face :group 'gnus-article-highlight :group 'gnus-article-signature) (defface gnus-header-from-face '((((class color) (background dark)) --- 411,430 ---- :type 'face :group 'gnus-article-buttons) ! (defcustom gnus-signature-face 'gnus-signature-face ! "Face used for highlighting a signature in the article buffer. ! Obsolete; use the face `gnus-signature-face' for customizations instead." :type 'face :group 'gnus-article-highlight :group 'gnus-article-signature) + (defface gnus-signature-face + '((((type x)) + (:italic t))) + "Face used for highlighting a signature in the article buffer." + :group 'gnus-article-highlight + :group 'gnus-article-signature) + (defface gnus-header-from-face '((((class color) (background dark)) *************** *** 826,858 **** (nnheader-narrow-to-headers) (setq from (message-fetch-field "from")) (goto-char (point-min)) ! (when (and gnus-article-x-face-command ! (or force ! ;; Check whether this face is censored. ! (not gnus-article-x-face-too-ugly) ! (and gnus-article-x-face-too-ugly from ! (not (string-match gnus-article-x-face-too-ugly ! from)))) ! ;; Has to be present. ! (re-search-forward "^X-Face: " nil t)) ;; We now have the area of the buffer where the X-Face is stored. (let ((beg (point)) (end (1- (re-search-forward "^\\($\\|[^ \t]\\)" nil t)))) ! ;; We display the face. ! (if (symbolp gnus-article-x-face-command) ! ;; The command is a lisp function, so we call it. ! (if (gnus-functionp gnus-article-x-face-command) ! (funcall gnus-article-x-face-command beg end) ! (error "%s is not a function" gnus-article-x-face-command)) ! ;; The command is a string, so we interpret the command ! ;; as a, well, command, and fork it off. ! (let ((process-connection-type nil)) ! (process-kill-without-query ! (start-process ! "article-x-face" nil shell-file-name shell-command-switch ! gnus-article-x-face-command)) ! (process-send-region "article-x-face" beg end) ! (process-send-eof "article-x-face"))))))))) (defalias 'gnus-decode-rfc1522 'article-decode-rfc1522) (defalias 'gnus-article-decode-rfc1522 'article-decode-rfc1522) --- 834,867 ---- (nnheader-narrow-to-headers) (setq from (message-fetch-field "from")) (goto-char (point-min)) ! (while (and gnus-article-x-face-command ! (or force ! ;; Check whether this face is censored. ! (not gnus-article-x-face-too-ugly) ! (and gnus-article-x-face-too-ugly from ! (not (string-match gnus-article-x-face-too-ugly ! from)))) ! ;; Has to be present. ! (re-search-forward "^X-Face: " nil t)) ;; We now have the area of the buffer where the X-Face is stored. (let ((beg (point)) (end (1- (re-search-forward "^\\($\\|[^ \t]\\)" nil t)))) ! (save-excursion ! ;; We display the face. ! (if (symbolp gnus-article-x-face-command) ! ;; The command is a lisp function, so we call it. ! (if (gnus-functionp gnus-article-x-face-command) ! (funcall gnus-article-x-face-command beg end) ! (error "%s is not a function" gnus-article-x-face-command)) ! ;; The command is a string, so we interpret the command ! ;; as a, well, command, and fork it off. ! (let ((process-connection-type nil)) ! (process-kill-without-query ! (start-process ! "article-x-face" nil shell-file-name shell-command-switch ! gnus-article-x-face-command)) ! (process-send-region "article-x-face" beg end) ! (process-send-eof "article-x-face")))))))))) (defalias 'gnus-decode-rfc1522 'article-decode-rfc1522) (defalias 'gnus-article-decode-rfc1522 'article-decode-rfc1522) *************** *** 1450,1456 **** default-name)) ;; A single split name was found ((= 1 (length split-name)) ! (let* ((name (car split-name)) (dir (cond ((file-directory-p name) (file-name-as-directory name)) ((file-exists-p name) name) --- 1459,1466 ---- default-name)) ;; A single split name was found ((= 1 (length split-name)) ! (let* ((name (expand-file-name ! (car split-name) gnus-article-save-directory)) (dir (cond ((file-directory-p name) (file-name-as-directory name)) ((file-exists-p name) name) *** pub/rgnus/lisp/gnus-cache.el Fri Mar 14 20:17:16 1997 --- rgnus/lisp/gnus-cache.el Sat Apr 19 06:12:49 1997 *************** *** 144,150 **** (mail-header-set-number headers (cdr result)))) (let ((number (mail-header-number headers)) file dir) ! (when (and (> number 0) ; Reffed article. (or force (and (or (not gnus-uncacheable-groups) (not (string-match --- 144,151 ---- (mail-header-set-number headers (cdr result)))) (let ((number (mail-header-number headers)) file dir) ! (when (and number ! (> number 0) ; Reffed article. (or force (and (or (not gnus-uncacheable-groups) (not (string-match *** pub/rgnus/lisp/gnus-demon.el Mon Mar 24 01:28:29 1997 --- rgnus/lisp/gnus-demon.el Sat Apr 19 06:12:49 1997 *************** *** 150,170 **** "Find out how many seconds to TIME, which is on the form \"17:43\"." (if (not (stringp time)) time ! (let* ((date (current-time-string)) ! (dv (timezone-parse-date date)) ! (tdate (timezone-make-arpa-date ! (string-to-number (aref dv 0)) ! (string-to-number (aref dv 1)) ! (string-to-number (aref dv 2)) time ! (or (aref dv 4) "UT"))) ! (nseconds (gnus-time-minus ! (gnus-encode-date tdate) (gnus-encode-date date)))) ! (round ! (/ (+ (if (< (car nseconds) 0) ! 86400 0) ! (* 65536 (car nseconds)) ! (nth 1 nseconds)) ! gnus-demon-timestep))))) (defun gnus-demon () "The Gnus daemon that takes care of running all Gnus handlers." --- 150,184 ---- "Find out how many seconds to TIME, which is on the form \"17:43\"." (if (not (stringp time)) time ! (let* ((now (current-time)) ! ;; obtain NOW as discrete components -- make a vector for speed ! (nowParts (apply 'vector (decode-time now))) ! ;; obtain THEN as discrete components ! (thenParts (timezone-parse-time time)) ! (thenHour (string-to-int (elt thenParts 0))) ! (thenMin (string-to-int (elt thenParts 1))) ! ;; convert time as elements into number of seconds since EPOCH. ! (then (encode-time 0 ! thenMin ! thenHour ! ;; If THEN is earlier than NOW, make it ! ;; same time tomorrow. Doc for encode-time ! ;; says that this is OK. ! (+ (elt nowParts 3) ! (if (or (< thenHour (elt nowParts 2)) ! (and (= thenHour (elt nowParts 2)) ! (<= thenMin (elt nowParts 1)))) ! 1 0)) ! (elt nowParts 4) ! (elt nowParts 5) ! (elt nowParts 6) ! (elt nowParts 7) ! (elt nowParts 8))) ! ;; calculate number of seconds between NOW and THEN ! (diff (+ (* 65536 (- (car then) (car now))) ! (- (cadr then) (cadr now))))) ! ;; return number of timesteps in the number of seconds ! (round (/ diff gnus-demon-timestep))))) (defun gnus-demon () "The Gnus daemon that takes care of running all Gnus handlers." *************** *** 200,206 **** (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle. ;; So we call the handler. (progn ! (funcall (car handler)) ;; And reset the timer. (setcar (nthcdr 1 handler) (gnus-demon-time-to-step --- 214,220 ---- (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle. ;; So we call the handler. (progn ! (ignore-errors (funcall (car handler))) ;; And reset the timer. (setcar (nthcdr 1 handler) (gnus-demon-time-to-step *************** *** 212,225 **** ((not (numberp idle)) ;; We want to call this handler each and every time that ;; Emacs is idle. ! (funcall (car handler))) (t ;; We want to call this handler only if Emacs has been idle ;; for a specified number of timesteps. (and (not (memq (car handler) gnus-demon-idle-has-been-called)) (< idle gnus-demon-idle-time) (progn ! (funcall (car handler)) ;; Make sure the handler won't be called once more in ;; this idle-cycle. (push (car handler) gnus-demon-idle-has-been-called))))))))) --- 226,239 ---- ((not (numberp idle)) ;; We want to call this handler each and every time that ;; Emacs is idle. ! (ignore-errors (funcall (car handler)))) (t ;; We want to call this handler only if Emacs has been idle ;; for a specified number of timesteps. (and (not (memq (car handler) gnus-demon-idle-has-been-called)) (< idle gnus-demon-idle-time) (progn ! (ignore-errors (funcall (car handler))) ;; Make sure the handler won't be called once more in ;; this idle-cycle. (push (car handler) gnus-demon-idle-has-been-called))))))))) *** pub/rgnus/lisp/gnus-ems.el Mon Mar 31 16:40:55 1997 --- rgnus/lisp/gnus-ems.el Sat Apr 19 06:12:49 1997 *************** *** 38,44 **** (eval-and-compile (autoload 'gnus-xmas-define "gnus-xmas") (autoload 'gnus-xmas-redefine "gnus-xmas") ! (autoload 'appt-select-lowest-window "appt.el")) (or (fboundp 'mail-file-babyl-p) (fset 'mail-file-babyl-p 'rmail-file-p)) --- 38,44 ---- (eval-and-compile (autoload 'gnus-xmas-define "gnus-xmas") (autoload 'gnus-xmas-redefine "gnus-xmas") ! (autoload 'appt-select-lowest-window "appt")) (or (fboundp 'mail-file-babyl-p) (fset 'mail-file-babyl-p 'rmail-file-p)) *** pub/rgnus/lisp/gnus-group.el Thu Apr 10 22:15:01 1997 --- rgnus/lisp/gnus-group.el Sat Apr 19 06:12:50 1997 *************** *** 602,609 **** (gnus-group-group-name)] ["Info" gnus-group-edit-group (gnus-group-group-name)] ["Local kill file" gnus-group-edit-local-kill (gnus-group-group-name)] ! ["Global kill file" gnus-group-edit-global-kill t]) ! )) (easy-menu-define gnus-group-group-menu gnus-group-mode-map "" --- 602,608 ---- (gnus-group-group-name)] ["Info" gnus-group-edit-group (gnus-group-group-name)] ["Local kill file" gnus-group-edit-local-kill (gnus-group-group-name)] ! ["Global kill file" gnus-group-edit-global-kill t]))) (easy-menu-define gnus-group-group-menu gnus-group-mode-map "" *************** *** 693,700 **** ["Find new newsgroups" gnus-find-new-newsgroups t] ["Transpose" gnus-group-transpose-groups (gnus-group-group-name)] ! ["Read a directory as a group..." gnus-group-enter-directory t] ! )) (easy-menu-define gnus-group-misc-menu gnus-group-mode-map "" --- 692,698 ---- ["Find new newsgroups" gnus-find-new-newsgroups t] ["Transpose" gnus-group-transpose-groups (gnus-group-group-name)] ! ["Read a directory as a group..." gnus-group-enter-directory t])) (easy-menu-define gnus-group-misc-menu gnus-group-mode-map "" *************** *** 725,732 **** ["Flush score cache" gnus-score-flush-cache t] ["Toggle topics" gnus-topic-mode t] ["Exit from Gnus" gnus-group-exit t] ! ["Exit without saving" gnus-group-quit t] ! )) (run-hooks 'gnus-group-menu-hook))) --- 723,729 ---- ["Flush score cache" gnus-score-flush-cache t] ["Toggle topics" gnus-topic-mode t] ["Exit from Gnus" gnus-group-exit t] ! ["Exit without saving" gnus-group-quit t])) (run-hooks 'gnus-group-menu-hook))) *** pub/rgnus/lisp/gnus-msg.el Sat Apr 12 23:34:15 1997 --- rgnus/lisp/gnus-msg.el Sat Apr 19 06:12:50 1997 *************** *** 691,696 **** --- 691,697 ---- (message-goto-subject) (re-search-forward " *$") (replace-match " (crosspost notification)" t t) + (deactivate-mark) (when (gnus-y-or-n-p "Send this complaint? ") (message-send-and-exit))))))) *** pub/rgnus/lisp/gnus-picon.el Sun Apr 6 21:51:36 1997 --- rgnus/lisp/gnus-picon.el Sat Apr 19 06:12:51 1997 *************** *** 370,380 **** picons))) (when domainp (setq picons ! (nconc (list (make-annotation ! (if first (concat (if (not rightp) ".") cur ! (if rightp ".")) cur) ! (point) 'text nil nil nil rightp)) ! picons)))) (when (and bar (or domainp found)) (setq bar-ann (gnus-picons-try-to-find-face (concat gnus-xmas-glyph-directory "bar.xbm") --- 370,381 ---- picons))) (when domainp (setq picons ! (nconc ! (list (make-annotation ! (if first (concat (if (not rightp) ".") cur ! (if rightp ".")) cur) ! (point) 'text nil nil nil rightp)) ! picons)))) (when (and bar (or domainp found)) (setq bar-ann (gnus-picons-try-to-find-face (concat gnus-xmas-glyph-directory "bar.xbm") *************** *** 385,393 **** (setq first t)) (when (and addrs domainp) (let ((it (mapconcat 'downcase (nreverse addrs) "."))) ! (make-annotation ! (if first (concat (if (not rightp) ".") it (if rightp ".")) it) ! (point) 'text nil nil nil rightp))) picons)) (defvar gnus-picons-glyph-alist nil) --- 386,399 ---- (setq first t)) (when (and addrs domainp) (let ((it (mapconcat 'downcase (nreverse addrs) "."))) ! (setq picons ! (nconc picons (list (make-annotation ! (if first ! (concat (if (not rightp) ".") ! it (if rightp ".")) ! it) ! (point) 'text ! nil nil nil rightp)))))) picons)) (defvar gnus-picons-glyph-alist nil) *** pub/rgnus/lisp/gnus-sum.el Sat Apr 12 23:34:16 1997 --- rgnus/lisp/gnus-sum.el Sat Apr 19 06:12:53 1997 *************** *** 4195,4201 **** (progn (goto-char p) (if (search-forward "\nlines: " nil t) ! (if (numberp (setq lines (read cur))) lines 0) 0)) ;; Xref. --- 4195,4201 ---- (progn (goto-char p) (if (search-forward "\nlines: " nil t) ! (if (numberp (setq lines (ignore-errors (read cur)))) lines 0) 0)) ;; Xref. *************** *** 8678,8683 **** --- 8678,8685 ---- "Update summary buffer %s? " (lambda (buf) (switch-to-buffer buf) (gnus-summary-exit)) buffers))))) + + (gnus-ems-redefine) (provide 'gnus-sum) *** pub/rgnus/lisp/gnus-xmas.el Thu Apr 10 22:15:21 1997 --- rgnus/lisp/gnus-xmas.el Sat Apr 19 06:12:53 1997 *************** *** 200,206 **** ;; Setup the display table -- like `gnus-summary-setup-display-table', ;; but done in an XEmacsish way. (let ((table (make-display-table)) - (default-table (specifier-instance current-display-table)) (i 32)) ;; Nix out all the control chars... (while (>= (setq i (1- i)) 0) --- 200,205 ---- *************** *** 209,221 **** ;; selective display). (aset table ?\n nil) (aset table ?\r nil) ! ;; We nix out any glyphs over 126 that are not set already. ! (when default-table ! (let ((i 256)) ! (while (>= (setq i (1- i)) 127) ! ;; Only modify if the default entry is nil. ! (unless (aref default-table i) ! (aset table i [??]))))) ;; Can't use `set-specifier' because of a bug in 19.14 and earlier (add-spec-to-specifier current-display-table table (current-buffer) nil))) --- 208,217 ---- ;; selective display). (aset table ?\n nil) (aset table ?\r nil) ! ;; We nix out any glyphs over 126 below ctl-arrow. ! (let ((i (if (integerp ctl-arrow) ctl-arrow 160))) ! (while (>= (setq i (1- i)) 127) ! (aset table i [??]))) ;; Can't use `set-specifier' because of a bug in 19.14 and earlier (add-spec-to-specifier current-display-table table (current-buffer) nil))) *************** *** 735,758 **** (defun gnus-xmas-article-display-xface (beg end) "Display any XFace headers in the current article." (save-excursion ! (let (xface-glyph) ! (if (featurep 'xface) ! (setq xface-glyph ! (make-glyph (vector 'xface :data ! (concat "X-Face: " ! (buffer-substring beg end))))) ! (let ((cur (current-buffer))) ! (save-excursion ! (gnus-set-work-buffer) ! (insert (format "%s" (buffer-substring beg end cur))) ! (gnus-xmas-call-region "uncompface") ! (goto-char (point-min)) ! (insert "/* Width=48, Height=48 */\n") ! (gnus-xmas-call-region "icontopbm") ! (gnus-xmas-call-region "ppmtoxpm") ! (setq xface-glyph ! (make-glyph ! (vector 'xpm :data (buffer-string ))))))) (set-glyph-face xface-glyph 'gnus-x-face) (goto-char (point-min)) (re-search-forward "^From:" nil t) --- 731,752 ---- (defun gnus-xmas-article-display-xface (beg end) "Display any XFace headers in the current article." (save-excursion ! (let ((xface-glyph ! (if (featurep 'xface) ! (make-glyph (vector 'xface :data ! (concat "X-Face: " ! (buffer-substring beg end)))) ! (let ((cur (current-buffer))) ! (save-excursion ! (gnus-set-work-buffer) ! (insert (format "%s" (buffer-substring beg end cur))) ! (gnus-xmas-call-region "uncompface") ! (goto-char (point-min)) ! (insert "/* Width=48, Height=48 */\n") ! (gnus-xmas-call-region "icontopbm") ! (gnus-xmas-call-region "ppmtoxpm") ! (make-glyph ! (vector 'xpm :data (buffer-string)))))))) (set-glyph-face xface-glyph 'gnus-x-face) (goto-char (point-min)) (re-search-forward "^From:" nil t) *** pub/rgnus/lisp/gnus.el Sat Apr 12 23:34:20 1997 --- rgnus/lisp/gnus.el Sat Apr 19 06:12:54 1997 *************** *** 226,232 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.4.45" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) --- 226,232 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.4.46" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) *************** *** 1342,1348 **** gnus-article-fill-cited-article gnus-article-remove-cr gnus-article-de-quoted-unreadable - gnus-article-display-x-face gnus-summary-stop-page-breaking ;; gnus-summary-caesar-message ;; gnus-summary-verbose-headers --- 1342,1347 ---- *************** *** 1366,1372 **** gnus-article-strip-leading-blank-lines gnus-article-strip-multiple-blank-lines gnus-article-strip-blank-lines ! gnus-article-treat-overstrike)) (defcustom gnus-article-save-directory gnus-directory "*Name of the directory articles will be saved in (default \"~/News\")." --- 1365,1373 ---- gnus-article-strip-leading-blank-lines gnus-article-strip-multiple-blank-lines gnus-article-strip-blank-lines ! gnus-article-treat-overstrike ! gnus-article-display-x-face ! gnus-smiley-display)) (defcustom gnus-article-save-directory gnus-directory "*Name of the directory articles will be saved in (default \"~/News\")." *** pub/rgnus/lisp/message.el Sat Apr 12 23:34:20 1997 --- rgnus/lisp/message.el Sat Apr 19 06:12:54 1997 *************** *** 591,596 **** --- 591,615 ---- (defvar message-mh-deletable-headers '(Message-ID Date Lines Sender) "If non-nil, delete the deletable headers before feeding to mh.") + (defvar message-send-method-alist + '((news message-news-p message-send-via-news) + (mail message-mail-p message-send-via-mail)) + "Alist of ways to send outgoing messages. + Each element has the form + + \(TYPE PREDICATE FUNCTION) + + where TYPE is a symbol that names the method; PREDICATE is a function + called without any parameters to determine whether the message is + a message of type TYPE; and FUNCTION is a function to be called if + PREDICATE returns non-nil. FUNCTION is called with one parameter -- + the prefix.") + + (defvar message-mail-alias-type 'abbrev + "*What alias expansion type to use in Message buffers. + The default is `abbrev', which uses mailabbrev. nil switches + mail aliases off.") + ;;; Internal variables. ;;; Well, not really internal. *************** *** 720,735 **** (let* ((cite-prefix "A-Za-z") (cite-suffix (concat cite-prefix "0-9_.@-")) (content "[ \t]*\\(.+\\(\n[ \t].*\\)*\\)")) ! `((,(concat "^\\(To:\\)" content) (1 'message-header-name-face) (2 'message-header-to-face nil t)) ! (,(concat "^\\(^[GBF]?[Cc][Cc]:\\|^Reply-To:\\)" content) (1 'message-header-name-face) (2 'message-header-cc-face nil t)) ! (,(concat "^\\(Subject:\\)" content) (1 'message-header-name-face) (2 'message-header-subject-face nil t)) ! (,(concat "^\\(Newsgroups:\\|Followup-to:\\)" content) (1 'message-header-name-face) (2 'message-header-newsgroups-face nil t)) (,(concat "^\\([^: \n\t]+:\\)" content) --- 739,754 ---- (let* ((cite-prefix "A-Za-z") (cite-suffix (concat cite-prefix "0-9_.@-")) (content "[ \t]*\\(.+\\(\n[ \t].*\\)*\\)")) ! `((,(concat "^\\([Tt]o:\\)" content) (1 'message-header-name-face) (2 'message-header-to-face nil t)) ! (,(concat "^\\(^[GBF]?[Cc][Cc]:\\|^[Rr]eply-[Tt]o:\\)" content) (1 'message-header-name-face) (2 'message-header-cc-face nil t)) ! (,(concat "^\\([Ss]ubject:\\)" content) (1 'message-header-name-face) (2 'message-header-subject-face nil t)) ! (,(concat "^\\([Nn]ewsgroups:\\|Followup-[Tt]o:\\)" content) (1 'message-header-name-face) (2 'message-header-newsgroups-face nil t)) (,(concat "^\\([^: \n\t]+:\\)" content) *************** *** 1242,1250 **** (easy-menu-add message-mode-menu message-mode-map) (easy-menu-add message-mode-field-menu message-mode-map) ;; Allow mail alias things. ! (if (fboundp 'mail-abbrevs-setup) ! (mail-abbrevs-setup) ! (funcall (intern "mail-aliases-setup"))) (run-hooks 'text-mode-hook 'message-mode-hook)) --- 1261,1270 ---- (easy-menu-add message-mode-menu message-mode-map) (easy-menu-add message-mode-field-menu message-mode-map) ;; Allow mail alias things. ! (when (eq message-mail-alias-type 'abbrev) ! (if (fboundp 'mail-abbrevs-setup) ! (mail-abbrevs-setup) ! (funcall (intern "mail-aliases-setup")))) (run-hooks 'text-mode-hook 'message-mode-hook)) *************** *** 1327,1337 **** ! (defun message-insert-to () ! "Insert a To header that points to the author of the article being replied to." ! (interactive) (let ((co (message-fetch-reply-field "mail-copies-to"))) ! (when (and co (equal (downcase co) "never")) (error "The user has requested not to have copies sent via mail"))) (when (and (message-position-on-field "To") --- 1347,1361 ---- ! (defun message-insert-to (&optional force) ! "Insert a To header that points to the author of the article being replied to. ! If the original author requested not to be sent mail, the function signals ! an error. ! With the prefix argument FORCE, insert the header anyway." ! (interactive "P") (let ((co (message-fetch-reply-field "mail-copies-to"))) ! (when (and (null force) ! co (equal (downcase co) "never")) (error "The user has requested not to have copies sent via mail"))) (when (and (message-position-on-field "To") *************** *** 1712,1741 **** (message-fix-before-sending) (run-hooks 'message-send-hook) (message "Sending...") ! (when (and (or (not (message-news-p)) ! (and (or (not (memq 'news message-sent-message-via)) ! (y-or-n-p ! "Already sent message via news; resend? ")) ! (funcall message-send-news-function arg))) ! (or (not (message-mail-p)) ! (and (or (not (memq 'mail message-sent-message-via)) ! (y-or-n-p ! "Already sent message via mail; resend? ")) ! (message-send-mail arg)))) ! (message-do-fcc) ! ;;(when (fboundp 'mail-hist-put-headers-into-history) ! ;; (mail-hist-put-headers-into-history)) ! (run-hooks 'message-sent-hook) ! (message "Sending...done") ! ;; If buffer has no file, mark it as unmodified and delete autosave. ! (unless buffer-file-name ! (set-buffer-modified-p nil) ! (delete-auto-save-file-if-necessary t)) ! ;; Delete other mail buffers and stuff. ! (message-do-send-housekeeping) ! (message-do-actions message-send-actions) ! ;; Return success. ! t))) (defun message-fix-before-sending () "Do various things to make the message nice before sending it." --- 1736,1776 ---- (message-fix-before-sending) (run-hooks 'message-send-hook) (message "Sending...") ! (let ((alist message-send-method-alist) ! elem sent) ! (while (setq elem (pop alist)) ! (when (and (or (not (funcall (cadr elem))) ! (and (or (not (memq (car elem) ! message-sent-message-via)) ! (y-or-n-p ! (format ! "Already sent message via %s; resend? " ! (car elem)))) ! (funcall (caddr elem) arg)))) ! (setq sent t))) ! (when sent ! (message-do-fcc) ! ;;(when (fboundp 'mail-hist-put-headers-into-history) ! ;; (mail-hist-put-headers-into-history)) ! (run-hooks 'message-sent-hook) ! (message "Sending...done") ! ;; If buffer has no file, mark it as unmodified and delete autosave. ! (unless buffer-file-name ! (set-buffer-modified-p nil) ! (delete-auto-save-file-if-necessary t)) ! ;; Delete other mail buffers and stuff. ! (message-do-send-housekeeping) ! (message-do-actions message-send-actions) ! ;; Return success. ! t)))) ! ! (defun message-send-via-mail (arg) ! "Send the current message via mail." ! (message-send-mail arg)) ! ! (defun message-send-via-news (arg) ! "Send the current message via news." ! (funcall message-send-news-function arg)) (defun message-fix-before-sending () "Do various things to make the message nice before sending it." *************** *** 2918,2923 **** --- 2953,2959 ---- (message-narrow-to-headers) (run-hooks 'message-header-setup-hook)) (set-buffer-modified-p nil) + (setq buffer-undo-list nil) (run-hooks 'message-setup-hook) (message-position-point) (undo-boundary)) *************** *** 3225,3233 **** mail-header-separator "\n" message-cancel-message) (message "Canceling your article...") ! (let ((message-syntax-checks 'dont-check-for-anything-just-trust-me)) ! (funcall message-send-news-function)) ! (message "Canceling your article...done") (kill-buffer buf))))) ;;;###autoload --- 3261,3270 ---- mail-header-separator "\n" message-cancel-message) (message "Canceling your article...") ! (if (let ((message-syntax-checks ! 'dont-check-for-anything-just-trust-me)) ! (funcall message-send-news-function)) ! (message "Canceling your article...done")) (kill-buffer buf))))) ;;;###autoload *** pub/rgnus/lisp/nndb.el Fri Mar 7 23:51:29 1997 --- rgnus/lisp/nndb.el Sat Apr 19 06:12:55 1997 *************** *** 1,10 **** ;;; nndb.el --- nndb access for Gnus ! ;; Copyright (C) 1996,97 Free Software Foundation, Inc. ! ;; Author: Kai Grossjohann ;; Keywords: news ! ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by --- 1,13 ---- ;;; nndb.el --- nndb access for Gnus ! ;; Copyright (C) 1997 Free Software Foundation, Inc. ! ;; Author: Masanobu UMEDA ! ;; Kai Grossjohann ! ;; Joe Hildebrand ! ;; David Blacka ;; Keywords: news ! ;; This file is NOT part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by *************** *** 23,45 **** ;;; Commentary: ! ;; I have shamelessly snarfed the code of nntp.el from sgnus. ! ;; Kai ! ;;- ;; Register nndb with known select methods. ! (require 'gnus) ! (require 'nnmail) ! ! (setq gnus-valid-select-methods ! (cons '("nndb" mail address respool prompt-address) ! gnus-valid-select-methods)) ! ;;; Code: (require 'nnheader) (require 'nntp) (eval-when-compile (require 'cl)) --- 26,59 ---- ;;; Commentary: ! ;;; This was based upon Kai Grossjohan's shamessly snarfed code and ! ;;; further modified by Joe Hildebrand. It has been updated for Red ! ;;; Gnus. ! ! ;; TODO: ! ;; ! ;; * Fix bug where server connection can be lost and impossible to regain ! ;; This hasn't happened to me in a while; think it was fixed in Rgnus ! ;; ! ;; * make it handle different nndb servers seemlessly ! ;; ! ;; * Optimize expire if FORCE ! ;; ! ;; * Optimize move (only expire once) ! ;; ! ;; * Deal with add/deletion of groups ! ;; ! ;; * make the backend TOUCH an article when marked as expireable (will ! ;; make article expire 'expiry' days after that moment). ;;- ;; Register nndb with known select methods. ! (gnus-declare-backend "nndb" 'mail 'respool 'address 'prompt-address) ;;; Code: + (require 'nnmail) (require 'nnheader) (require 'nntp) (eval-when-compile (require 'cl)) *************** *** 68,87 **** (defvoo nndb-deliver-program "nndel" "*The program used to put a message in an NNDB group.") ;; Variables copied from nntp (defvoo nndb-server-opened-hook '(nntp-send-authinfo-from-file) "Like nntp-server-opened-hook." nntp-server-opened-hook) - ;(defvoo nndb-rlogin-parameters '("telnet" "${NNDBSERVER:=localhost}" "9000") - ; "*Parameters to nndb-open-login. Like nntp-rlogin-parameters." - ; nntp-rlogin-parameters) - - ;(defvoo nndb-rlogin-user-name nil - ; "*User name for rlogin connect method." - ; nntp-rlogin-user-name) - (defvoo nndb-address "localhost" "*The name of the NNDB server." nntp-address) --- 82,101 ---- (defvoo nndb-deliver-program "nndel" "*The program used to put a message in an NNDB group.") + (defvoo nndb-server-side-expiry nil + "If t, expiry calculation will occur on the server side") + + (defvoo nndb-set-expire-date-on-mark nil + "If t, the expiry date for a given article will be set to the time + it was marked as expireable; otherwise the date will be the time the + article was posted to nndb") + ;; Variables copied from nntp (defvoo nndb-server-opened-hook '(nntp-send-authinfo-from-file) "Like nntp-server-opened-hook." nntp-server-opened-hook) (defvoo nndb-address "localhost" "*The name of the NNDB server." nntp-address) *************** *** 90,104 **** "*Port number to connect to." nntp-port-number) ! ;(defvoo nndb-current-group "" ! ; "Like nntp-current-group." ! ; nntp-current-group) (defvoo nndb-status-string nil "" nntp-status-string) ! (defconst nndb-version "nndb 0.3" "Version numbers of this version of NNDB.") --- 104,117 ---- "*Port number to connect to." nntp-port-number) ! ;; change to 'news if you are actually using nndb for news ! (defvoo nndb-article-type 'mail) (defvoo nndb-status-string nil "" nntp-status-string) ! (defconst nndb-version "nndb 0.7" "Version numbers of this version of NNDB.") *************** *** 106,219 **** (nnoo-define-basics nndb) - ;; Import other stuff from nntp as is. - - (nnoo-import nndb - (nntp)) - - ;;- maybe this should be mail?? - ;;-(defun nndb-request-type (group &optional article) - ;;- 'news) - ;;------------------------------------------------------------------ - ;;- only new stuff below ! ; nndb-request-update-info does not exist and is not needed ! ; nndb-request-update-mark does not exist and is not needed ! ; nndb-request-scan does not exist ! ; get new mail from somewhere -- maybe this is not needed? ! ; --> todo ! (deffoo nndb-request-create-group (group &optional server args) ! "Creates a group if it doesn't exist yet." ! (nntp-send-command "^[23].*\n" "MKGROUP" group)) ! ; todo -- use some other time than the creation time of the article ! ; best is time since article has been marked as expirable ! (deffoo nndb-request-expire-articles (articles &optional group server force) ! "Expires ARTICLES from GROUP on SERVER. ! If FORCE, delete regardless of expiration date, otherwise use normal ! expiry mechanism." ! (let (msg art) ! (nntp-possibly-change-group group server) ;;- (while articles (setq art (pop articles)) ! (nntp-send-command "^\\([23]\\|^423\\).*\n" "DATE" art) (setq msg (nndb-status-message)) ! ;; CCC we shouldn't be using the variable nndb-status-string? ! (if (string-match "^423" (nnheader-get-report 'nndb)) () ! (unless (string-match "\\([0-9]+\\) \\([0-9]+\\)$" msg) ! (error "Not a valid response for DATE command: %s" ! msg)) ! (if (nnmail-expired-article-p ! group ! (list (string-to-int ! (substring msg (match-beginning 1) (match-end 1))) ! (string-to-int ! (substring msg (match-beginning 2) (match-end 2)))) ! force) ! (nnheader-message 5 "Deleting article %s in %s..." ! art group) ! (nntp-send-command "^[23].*\n" "DELETE" art)))))) (deffoo nndb-request-move-article ! (article group server accept-form &optional last) "Move ARTICLE (a number) from GROUP on SERVER. Evals ACCEPT-FORM in current buffer, where the article is. Optional LAST is ignored." ! (let ((artbuf (get-buffer-create " *nndb move*")) result) ! (and ! (nndb-request-article article group server artbuf) ! (save-excursion ! (set-buffer artbuf) ! (setq result (eval accept-form)) ! (kill-buffer (current-buffer)) ! result) ! (nndb-request-expire-articles (list article) ! group ! server ! t)) ! result)) ! (deffoo nndb-request-accept-article (group server &optional last) "The article in the current buffer is put into GROUP." ! (nntp-possibly-change-group group server) ;;- ! (let (art statmsg) (when (nntp-send-command "^[23].*\r?\n" "ACCEPT" group) (nnheader-insert "") ! (nntp-encode-text) ! (nntp-send-buffer "^[23].*\n") ! (setq statmsg (nntp-status-message)) ! (unless (string-match "^\\([0-9]+\\)" statmsg) ! (error "nndb: %s" statmsg)) ! (setq art (substring statmsg ! (match-beginning 1) ! (match-end 1))) ! (message "nndb: accepted %s" art) ! (list art)))) (deffoo nndb-request-replace-article (article group buffer) ! "ARTICLE is the number of the article in GROUP to be replaced with the contents of the BUFFER." (set-buffer buffer) ! (let (art statmsg) ! (when (nntp-send-command "^[23].*\r?\n" "REPLACE" (int-to-string article)) ! (nnheader-insert "") ! (nntp-encode-text) ! (nntp-send-buffer "^[23].*\n") ! ; (setq statmsg (nntp-status-message)) ! ; (or (string-match "^\\([0-9]+\\)" statmsg) ! ; (error "nndb: %s" statmsg)) ! ; (setq art (substring statmsg ! ; (match-beginning 1) ! ; (match-end 1))) ! ; (message "nndb: replaced %s" art) ! (list (int-to-string article))))) ; nndb-request-delete-group does not exist ; todo -- maybe later --- 119,312 ---- (nnoo-define-basics nndb) ;;------------------------------------------------------------------ ! ;; this function turns the lisp list into a string list. There is ! ;; probably a more efficient way to do this. ! (defun nndb-build-article-string (articles) ! (let (art-string art) ! (while articles ! (setq art (pop articles)) ! (setq art-string (concat art-string art " "))) ! art-string)) ! (defun nndb-build-expire-rest-list (total expire) ! (let (art rest) ! (while total ! (setq art (pop total)) ! (if (memq art expire) ! () ! (push art rest))) ! rest)) ! ! ! ;; ! (deffoo nndb-request-type (group &optional article) ! nndb-article-type) ! ! ;; nndb-request-update-info does not exist and is not needed ! ! ;; nndb-request-update-mark does not exist; it should be used to TOUCH ! ;; articles as they are marked exipirable ! (defun nndb-touch-article (group article) ! (nntp-send-command nil "X-TOUCH" article)) ! ! (deffoo nndb-request-update-mark ! (group article mark) ! "Sets the expiry date for ARTICLE in GROUP to now, if the mark is 'E'" ! (if (and nndb-set-expire-date-on-mark (string-equal mark "E")) ! (nndb-touch-article group article)) ! mark) ! ;; nndb-request-create-group -- currently this isn't necessary; nndb ! ;; creates groups on demand. ! ;; todo -- use some other time than the creation time of the article ! ;; best is time since article has been marked as expirable ! (defun nndb-request-expire-articles-local (articles &optional group server force) ! "Let gnus do the date check and issue the delete commands." ! (let (msg art delete-list (num-delete 0) rest) ! (nntp-possibly-change-group group server) (while articles (setq art (pop articles)) ! (nntp-send-command "^\\([23]\\|^423\\).*\n" "X-DATE" art) (setq msg (nndb-status-message)) ! (if (string-match "^423" msg) () ! (or (string-match "'\\(.+\\)'" msg) ! (error "Not a valid response for X-DATE command: %s" ! msg)) ! (if (nnmail-expired-article-p ! group ! (gnus-encode-date ! (substring msg (match-beginning 1) (match-end 1))) ! force) ! (progn ! (setq delete-list (concat delete-list " " (int-to-string art))) ! (setq num-delete (1+ num-delete))) ! (push art rest)))) ! (if (> (length delete-list) 0) ! (progn ! (nnheader-message 5 "Deleting %s article(s) from %s" ! (int-to-string num-delete) group) ! (nntp-send-command "^[23].*\n" "X-DELETE" delete-list)) ! ) ! ! (message "") ! (nconc rest articles))) ! ! (defun nndb-get-remote-expire-response () ! (let (list) ! (set-buffer nntp-server-buffer) ! (goto-char (point-min)) ! (if (looking-at "^[34]") ! ;; x-expire returned error--presume no articles were expirable) ! (setq list nil) ! ;; otherwise, pull all of the following numbers into the list ! (re-search-forward "follows\r?\n?" nil t) ! (while (re-search-forward "^[0-9]+$" nil t) ! (push (string-to-int (match-string 0)) list))) ! list)) ! ! (defun nndb-request-expire-articles-remote ! (articles &optional group server force) ! "Let the nndb backend expire articles" ! (let (days art-string delete-list (num-delete 0)) ! (nntp-possibly-change-group group server) ! ! ;; first calculate the wait period in days ! (setq days (or (and nnmail-expiry-wait-function ! (funcall nnmail-expiry-wait-function group)) ! nnmail-expiry-wait)) ! ;; now handle the special cases ! (cond (force ! (setq days 0)) ! ((eq days 'never) ! ;; This isn't an expirable group. ! (setq days -1)) ! ((eq days 'immediate) ! (setq days 0))) ! ! ! ;; build article string ! (setq art-string (concat days " " (nndb-build-article-string articles))) ! (nntp-send-command "^\.\r?\n\\|^[345].*\n" "X-EXPIRE" art-string) ! ! (setq delete-list (nndb-get-remote-expire-response)) ! (setq num-delete (length delete-list)) ! (if (> num-delete 0) ! (nnheader-message 5 "Deleting %s article(s) from %s" ! (int-to-string num-delete) group)) ! ! (nndb-build-expire-rest-list articles delete-list))) ! ! (deffoo nndb-request-expire-articles ! (articles &optional group server force) ! "Expires ARTICLES from GROUP on SERVER. ! If FORCE, delete regardless of exiration date, otherwise use normal ! expiry mechanism." ! (if nndb-server-side-expiry ! (nndb-request-expire-articles-remote articles group server force) ! (nndb-request-expire-articles-local articles group server force))) (deffoo nndb-request-move-article ! (article group server accept-form &optional last) "Move ARTICLE (a number) from GROUP on SERVER. Evals ACCEPT-FORM in current buffer, where the article is. Optional LAST is ignored." ! ;; we guess that the second arg in accept-form is the new group, ! ;; which it will be for nndb, which is all that matters anyway ! (let ((new-group (nth 1 accept-form)) result) ! (nntp-possibly-change-group group server) ! ! ;; use the move command for nndb-to-nndb moves ! (if (string-match "^nndb" new-group) ! (let ((new-group-name (gnus-group-real-name new-group))) ! (nntp-send-command "^[23].*\n" "X-MOVE" article new-group-name) ! (cons new-group article)) ! ;; else move normally ! (let ((artbuf (get-buffer-create " *nndb move*"))) ! (and ! (nndb-request-article article group server artbuf) ! (save-excursion ! (set-buffer artbuf) ! (insert-buffer-substring nntp-server-buffer) ! (setq result (eval accept-form)) ! (kill-buffer (current-buffer)) ! result) ! (nndb-request-expire-articles (list article) ! group ! server ! t)) result) ! ))) ! (deffoo nndb-request-accept-article (group server &optional last) "The article in the current buffer is put into GROUP." ! (nntp-possibly-change-group group server) ! (let (art msg) (when (nntp-send-command "^[23].*\r?\n" "ACCEPT" group) (nnheader-insert "") ! (nntp-send-buffer "^[23].*\n")) ! ! (set-buffer nntp-server-buffer) ! (setq msg (buffer-string (point-min) (point-max))) ! (or (string-match "^\\([0-9]+\\)" msg) ! (error "nndb: %s" msg)) ! (setq art (substring msg (match-beginning 1) (match-end 1))) ! (message "nndb: accepted %s" art) ! (list art))) (deffoo nndb-request-replace-article (article group buffer) ! "ARTICLE is the number of the article in GROUP to be replaced with the contents of the BUFFER." (set-buffer buffer) ! (when (nntp-send-command "^[23].*\r?\n" "X-REPLACE" (int-to-string article)) ! (nnheader-insert "") ! (nntp-send-buffer "^[23.*\n") ! (list (int-to-string article)))) ; nndb-request-delete-group does not exist ; todo -- maybe later *************** *** 221,226 **** --- 314,332 ---- ; nndb-request-rename-group does not exist ; todo -- maybe later + ;; -- standard compatability functions + + (deffoo nndb-status-message (&optional server) + "Return server status as a string." + (set-buffer nntp-server-buffer) + (buffer-string (point-min) (point-max))) + + ;; Import stuff from nntp + + (nnoo-import nndb + (nntp)) + (provide 'nndb) + *** pub/rgnus/lisp/nnmail.el Mon Mar 24 17:02:54 1997 --- rgnus/lisp/nnmail.el Sat Apr 19 06:12:55 1997 *************** *** 395,401 **** '((any . "from\\|to\\|cc\\|sender\\|apparently-to\\|resent-from\\|resent-to\\|resent-cc") (mail . "mailer-daemon\\|postmaster\\|uucp") (to . "to\\|cc\\|apparently-to\\|resent-to\\|resent-cc") ! (from . "from\\|sender\\|resent-from")) "Alist of abbreviations allowed in `nnmail-split-fancy'." :group 'nnmail-split :type '(repeat (cons :format "%v" symbol regexp))) --- 395,403 ---- '((any . "from\\|to\\|cc\\|sender\\|apparently-to\\|resent-from\\|resent-to\\|resent-cc") (mail . "mailer-daemon\\|postmaster\\|uucp") (to . "to\\|cc\\|apparently-to\\|resent-to\\|resent-cc") ! (from . "from\\|sender\\|resent-from") ! (nato . "to\\|cc\\|resent-to\\|resent-cc") ! (naany . "from\\|to\\|cc\\|sender\\|resent-from\\|resent-to\\|resent-cc")) "Alist of abbreviations allowed in `nnmail-split-fancy'." :group 'nnmail-split :type '(repeat (cons :format "%v" symbol regexp))) *** pub/rgnus/lisp/smiley.el Fri Mar 7 23:51:35 1997 --- rgnus/lisp/smiley.el Sat Apr 19 06:12:56 1997 *************** *** 251,256 **** --- 251,257 ---- (defvar gnus-article-buffer) ;;;###autoload (defun gnus-smiley-display () + "Display \"smileys\" as small graphical icons." (interactive) (save-excursion (set-buffer gnus-article-buffer) *** pub/rgnus/lisp/ChangeLog Sat Apr 12 23:34:14 1997 --- rgnus/lisp/ChangeLog Sat Apr 19 06:12:48 1997 *************** *** 1,3 **** --- 1,90 ---- + Sat Apr 19 06:11:31 1997 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.4.46 is released. + + Sat Apr 19 05:40:40 1997 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-read-save-file-name): Expand file name i save + dir. + + Fri Apr 18 14:25:21 1997 Hrvoje Niksic + + * gnus-art.el (gnus-signature-face): New face; use it. + + Sat Apr 19 05:32:43 1997 Kim-Minh Kaplan + + * gnus-picon.el (gnus-picons-insert-face-if-exists): Add picons to + list. + + Tue Apr 15 14:08:32 1997 Hrvoje Niksic + + * message.el (message-font-lock-keywords): Be a little bit more + case-insensitive. + + Wed Apr 16 02:41:31 1997 Hrvoje Niksic + + * message.el (message-insert-to): New argument FORCE. + + Sat Apr 19 05:18:10 1997 Lars Magne Ingebrigtsen + + * message.el (message-setup): Nix out undo list. + + Sat Apr 19 05:00:06 1997 Katsumi Yamaoka + + * gnus-sum.el: Redefine. + + Sat Apr 19 04:53:29 1997 Lars Magne Ingebrigtsen + + * gnus-art.el (article-display-x-face): Display all XFace + headers. + + * gnus-ems.el: appt, not appt.el. + + Sat Apr 19 04:04:42 1997 Hrvoje Niksic + + * gnus-xmas.el (gnus-xmas-summary-set-display-table): Don't nix + out in Latin1. + + Sat Apr 19 02:55:45 1997 Lars Magne Ingebrigtsen + + * message.el (message-cancel-news): Only say we cancel if we + cancel. + + * gnus-msg.el (gnus-summary-mail-crosspost-complaint): Deactivate + mark. + + Thu Apr 17 21:37:22 1997 Lars Magne Ingebrigtsen + + * message.el (message-mail-alias-type): New variable. + (message-mode): Use it. + + Wed Apr 16 00:03:37 1997 Lars Magne Ingebrigtsen + + * gnus-demon.el (gnus-demon): Ignore errors. + + Tue Apr 15 23:50:02 1997 Brad Howes + + * gnus-demon.el (gnus-demon-time-to-step): New version. + + Tue Apr 15 23:32:58 1997 Lars Magne Ingebrigtsen + + * message.el (message-send-method-alist): New variable. + (message-send): Use it. + (message-send-via-news): New function. + (message-send-via-mail): New function. + + Sun Apr 13 18:22:02 1997 Jens Lautenbacher + + * gnus.el (gnus-article-display-hook): Fix. + + Sun Apr 13 02:07:33 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-get-newsgroup-headers): Protect against bogus + Lines headers. + + * gnus-cache.el (gnus-cache-possibly-enter-article): Check number + not nil. + Sat Apr 12 23:28:30 1997 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.4.45 is released. *** pub/rgnus/texi/gnus.texi Sat Apr 12 23:34:22 1997 --- rgnus/texi/gnus.texi Sat Apr 19 06:12:58 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Gnus 5.4.45 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Gnus 5.4.46 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 287,293 **** @tex @titlepage ! @title Gnus 5.4.45 Manual @author by Lars Magne Ingebrigtsen @page --- 287,293 ---- @tex @titlepage ! @title Gnus 5.4.46 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 323,329 **** spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.4.45. @end ifinfo --- 323,329 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.4.46. @end ifinfo *************** *** 3727,3734 **** @item S O p @kindex S O p (Summary) @findex gnus-uu-digest-post-forward Digest the current series and forward the result to a newsgroup ! (@code{gnus-uu-digest-mail-forward}). @item S u @kindex S u (Summary) --- 3727,3737 ---- @item S O p @kindex S O p (Summary) @findex gnus-uu-digest-post-forward + @cindex digests + @cindex making digests Digest the current series and forward the result to a newsgroup ! (@code{gnus-uu-digest-mail-forward}). This command uses the ! process/prefix convention. @item S u @kindex S u (Summary) *************** *** 6369,6378 **** @subsection Pick and Read @cindex pick and read ! Some newsreaders (like @code{nn} and, uhm, @code{nn}) use a two-phased ! reading interface. The user first marks the articles she wants to read ! from a summary buffer. Then she starts reading the articles with just ! an article buffer displayed. @findex gnus-pick-mode @kindex M-x gnus-pick-mode --- 6372,6381 ---- @subsection Pick and Read @cindex pick and read ! Some newsreaders (like @code{nn} and, uhm, @code{Netnews} on VM/CMS) use ! a two-phased reading interface. The user first marks the articles she ! wants to read from a summary buffer. Then she starts reading the ! articles with just an article buffer displayed. @findex gnus-pick-mode @kindex M-x gnus-pick-mode *************** *** 13474,13480 **** First, pick one (1) legal mail address that you can be reached at, and put it in your @code{From} header of all your news articles. (I've ! chosen @samp{larsi@@trym.ifi.uio.no}.) @lisp (setq message-default-news-headers --- 13477,13486 ---- First, pick one (1) legal mail address that you can be reached at, and put it in your @code{From} header of all your news articles. (I've ! chosen @samp{larsi@@trym.ifi.uio.no}, but for many addresses on the form ! @samp{larsi+usenet@@ifi.uio.no} will be a better choice. Ask your ! sysadm whether your sendmail installation accepts keywords in the local ! part of the mail address.) @lisp (setq message-default-news-headers *************** *** 13520,13525 **** --- 13526,13537 ---- citizen, you can even send off complaints to the proper authorities on each unsolicited commercial email---at your leisure. + If you are also a lazy net citizen, you will probably prefer complaining + automatically with the @file{gnus-junk.el} package, availiable FOR FREE + at @file{}. + Since most e-mail spam is sent automatically, this may reconcile the + cosmic balance somewhat. + This works for me. It allows people an easy way to contact me (they can just press @kbd{r} in the usual way), and I'm not bothered at all with spam. It's a win-win situation. Forging @code{From} headers to point *************** *** 16022,16028 **** files = "files" *[ space ] exclude-files = "exclude-files" *[ space ] read-only = "read-only" [ space "nil" / space "t" ] ! adapt = "adapt" [ space "nil" / space "t" / space adapt-rule ] adapt-rule = "(" *[ *[ "(" ")" ] ")" local = "local" *[ space "(" space
")" ] eval = "eval" space --- 16034,16040 ---- files = "files" *[ space ] exclude-files = "exclude-files" *[ space ] read-only = "read-only" [ space "nil" / space "t" ] ! adapt = "adapt" [ space "ignore" / space "t" / space adapt-rule ] adapt-rule = "(" *[ *[ "(" ")" ] ")" local = "local" *[ space "(" space ")" ] eval = "eval" space *** pub/rgnus/texi/message.texi Sat Apr 12 23:34:23 1997 --- rgnus/texi/message.texi Sat Apr 19 06:12:58 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 5.4.45 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 5.4.46 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 39,45 **** @tex @titlepage ! @title Message 5.4.45 Manual @author by Lars Magne Ingebrigtsen @page --- 39,45 ---- @tex @titlepage ! @title Message 5.4.46 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 79,85 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 5.4.45. Message is distributed with the Gnus distribution bearing the same version number as this manual has. --- 79,85 ---- * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 5.4.46. Message is distributed with the Gnus distribution bearing the same version number as this manual has. *************** *** 567,573 **** @cindex mail aliases @cindex aliases ! Message uses @code{mailabbrev} to handle mail aliases. @code{mailabbrev} works by parsing the @file{/etc/mailrc} and @file{~/.mailrc} files. These files look like: --- 567,578 ---- @cindex mail aliases @cindex aliases ! @vindex message-mail-alias-type ! The @code{message-mail-alias-type} variable controls what type of mail ! alias expansion to use. Currently only one form is supported---Message ! uses @code{mailabbrev} to handle mail aliases. If this variable is ! @code{nil}, no mail alias expansion will be performed. ! @code{mailabbrev} works by parsing the @file{/etc/mailrc} and @file{~/.mailrc} files. These files look like: *************** *** 978,983 **** --- 983,1017 ---- @item message-mode-syntax-table @vindex message-mode-syntax-table Syntax table used in message mode buffers. + + @item message-send-method-alist + @vindex message-send-method-alist + + Alist of ways to send outgoing messages. Each element has the form + + @lisp + (TYPE PREDICATE FUNCTION) + @end lisp + + @table @var + @item type + A symbol that names the method. + + @item predicate + A function called without any parameters to determine whether the + message is a message of type @var{type}. + + @item function + A function to be called if @var{predicate} returns non-@code{nil}. + @var{function} is called with one parameter -- the prefix. + @end table + + @lisp + ((news message-news-p message-send-via-news) + (mail message-mail-p message-send-via-mail)) + @end lisp + + @end table *** pub/rgnus/texi/ChangeLog Sat Apr 12 01:50:00 1997 --- rgnus/texi/ChangeLog Sat Apr 19 06:12:58 1997 *************** *** 1,3 **** --- 1,13 ---- + Sat Apr 12 16:51:32 1997 Robert Bihlmeyer + + * gnus.texi (Thwarting Email Spam): Addition. + + Tue Apr 15 16:11:38 1997 Lars Magne Ingebrigtsen + + * message.texi (Various Message Variables): Addition. + + * gnus.texi (Thwarting Email Spam): Addition. + Sat Apr 12 00:26:47 1997 Francois Felix Ingrand * gnus.texi (NoCeM): Addition.