+Sun Aug 25 23:09:18 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-send-mail-with-qmail): Use
+ `message-qmail-program', which doesn't exist.
+
+ * nndoc.el (nndoc-type-alist): Slack digests are guessable.
+
+Sun Aug 25 21:27:17 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus-salt.el (gnus-pick-mode): Nixed out the format.
+ (gnus-summary-pick-line-format): Buggy def.
+
+ * gnus-sum.el (gnus-summary-read-document): Provide a quit-conf.
+ (gnus-summary-read-document): Do better names.
+
+ * nnvirtual.el (nnvirtual-close-group): Don't do the unread
+ setting on ephemeral groups.
+
+ * nntp.el (nntp-retrieve-groups): Would infloop.
+
+Sun Aug 25 02:52:11 1996 Sudish Joseph <sudish@MindSpring.COM>
+
+ * message.el (message-qmail-inject-program): New variable.
+ (message-qmail-inject-args): New variable.
+ (message-send-mail-with-qmail): New function, suitable for use
+ as message-send-mail-function.
+
+Sun Aug 25 20:41:45 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * nnweb.el (nnweb-fetch-form): Clear buffer file name.
+
+ * nntp.el (nntp-request-article): Would try to copy to the same
+ buffer.
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Better error
+ message.
+
+ * nnweb.el (nnweb-request-group): Better error report.
+
+ * gnus-score.el (gnus-score-load-file): Gave `nil' as a day param.
+
+Sun Aug 25 03:32:51 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: Red Gnus v0.14 is released.
+
Sun Aug 25 00:16:44 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus-util.el (gnus-prin1): New function.
Argument LINES specifies lines to be scrolled up."
(interactive "p")
(move-to-window-line -1)
- ;; Fixed by enami@ptgd.sony.co.jp (enami tsugutomo)
(if (save-excursion
(end-of-line)
(and (pos-visible-in-window-p) ;Not continuation line.
;; Enter a group that is not in the group buffer. Non-nil is returned
;; if selection was successful.
-(defun gnus-group-read-ephemeral-group
- (group method &optional activate quit-config request-only)
+(defun gnus-group-read-ephemeral-group (group method &optional activate
+ quit-config request-only)
"Read GROUP from METHOD as an ephemeral group.
If ACTIVATE, request the group first.
-If QUIT-CONFIG, use that window configuration when
-exiting from the ephemeral group.
-If REQUEST-ONLY, don't actually read the group; just
-request it.
+If QUIT-CONFIG, use that window configuration when exiting from the
+ephemeral group.
+If REQUEST-ONLY, don't actually read the group; just request it.
Return the name of the group is selection was successful."
(let ((group (if (gnus-group-foreign-p group) group
(error "Unable to contact server: %s" (gnus-status-message method)))
(when activate
(unless (gnus-request-group group)
- (error "Couldn't request group")))
+ (error "Couldn't request group: %s"
+ (nnheader-get-report (car method)))))
(if request-only
group
(condition-case ()
"*If non-nil, mark all unpicked articles as read.")
(defvar gnus-summary-pick-line-format
- "%-5p %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
+ "%-5P %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
"*The format specification of the lines in pick buffers.
It accepts the same format specs that `gnus-summary-line-format' does.")
(make-local-variable 'gnus-auto-select-first)
(setq gnus-auto-select-first nil)
;; Change line format.
- (make-local-variable 'gnus-summary-line-format)
- (setq gnus-summary-line-format
- gnus-summary-pick-line-format)
- (make-local-variable 'gnus-summary-line-format-spec)
- (setq gnus-summary-line-format nil)
+ (setq gnus-summary-line-format gnus-summary-pick-line-format)
+ (setq gnus-summary-line-format-spec nil)
(gnus-update-format-specifications nil 'summary)
(gnus-update-summary-mark-positions)
;; Set up the menu.
(eval (car (gnus-score-get 'eval alist))))
;; Perform possible decays.
(when (and gnus-decay-scores
- (gnus-decay-scores alist decay))
+ (gnus-decay-scores
+ alist (or decay (gnus-time-to-day (current-time)))))
(gnus-score-set 'touched '(t) alist)
(gnus-score-set 'decay (list (gnus-time-to-day (current-time)))))
;; We do not respect eval and files atoms from global score
(defun gnus-update-format-specifications (&optional force &rest types)
"Update all (necessary) format specifications."
;; Make the indentation array.
-
;; See whether all the stored info needs to be flushed.
(when (or force
(not (equal emacs-version
(setq new-format (symbol-value
(intern (format "gnus-%s-line-format" type))))))
(setq entry (cdr (assq type gnus-format-specs)))
- (if (and entry
+ (if (and (car entry)
(equal (car entry) new-format))
;; Use the old format.
(set (intern (format "gnus-%s-line-format-spec" type))
The hook is intended to mark an article as read (or unread)
automatically when it is selected.")
+;;; Internal variables
+
(defvar gnus-summary-display-table
;; Change the display table. Odd characters have a tendency to mess
;; up nicely formatted displays - we make all possible glyphs
table)
"Display table used in summary mode buffers.")
-;;; Internal variables
-
(defvar gnus-original-article nil)
(defvar gnus-article-internal-prepare-hook nil)
(defvar gnus-newsgroup-process-stack nil)
(run-hooks 'gnus-select-group-hook)
;; Set any local variables in the group parameters.
(gnus-summary-set-local-parameters gnus-newsgroup-name)
- (gnus-update-format-specifications)
+ (gnus-update-format-specifications
+ nil 'summary 'summary-mode 'summary-dummy)
;; Do score processing.
(when gnus-use-scoring
(gnus-possibly-score-headers))
(gnus-summary-display-article article)
(gnus-eval-in-buffer-window gnus-article-buffer
(setq endp (gnus-article-next-page lines)))
- (if endp
- (cond (circular
- (gnus-summary-beginning-of-article))
- (lines
- (gnus-message 3 "End of message"))
- ((null lines)
- (if (and (eq gnus-summary-goto-unread 'never)
- (not (gnus-summary-last-article-p article)))
- (gnus-summary-next-article)
- (gnus-summary-next-unread-article)))))))
+ (when endp
+ (cond (circular
+ (gnus-summary-beginning-of-article))
+ (lines
+ (gnus-message 3 "End of message"))
+ ((null lines)
+ (if (and (eq gnus-summary-goto-unread 'never)
+ (not (gnus-summary-last-article-p article)))
+ (gnus-summary-next-article)
+ (gnus-summary-next-unread-article)))))))
(gnus-summary-recenter)
(gnus-summary-position-point)))
((not groups)
(error "None of the articles could be interpreted as documents"))
((gnus-group-read-ephemeral-group
- (setq vgroup (format "%s-%s" gnus-newsgroup-name (current-time-string)))
+ (setq vgroup (format
+ "%s-%s" gnus-newsgroup-name
+ (format-time-string "%Y%m%dT%H%M%S" (current-time))))
`(nnvirtual ,vgroup (nnvirtual-component-groups ,groups))
- t))
+ t
+ (cons (current-buffer) 'summary)))
(t
(error "Couldn't select virtual nndoc group")))))
(eval '(run-hooks 'gnus-load-hook))
-(defconst gnus-version-number "0.14"
+(defconst gnus-version-number "0.15"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Red Gnus v%s" gnus-version-number)
(defmacro gnus-sethash (string value hashtable)
"Set hash value. Arguments are STRING, VALUE, and HASHTABLE."
`(set (intern ,string ,hashtable) ,value))
+(put 'nnheader-temp-write 'edebug-form-spec '(form form form))
(defmacro gnus-group-unread (group)
"Get the currently computed number of unread articles in GROUP."
The headers should be delimited by a line whose contents match the
variable `mail-header-separator'.
-Legal values include `message-send-mail-with-mh' and
-`message-send-mail-with-sendmail', which is the default.")
+Legal values include `message-send-mail-with-sendmail' (the default),
+`message-send-mail-with-mh' and `message-send-mail-with-qmail'.")
;;;###autoload
(defvar message-send-news-function 'message-send-news
whether to ignore the \"poster\" value. If it is the symbol `use',
always use the value.")
+;; qmail-related stuff
+(defvar message-qmail-inject-program "/var/qmail/bin/qmail-inject"
+ "Location of the qmail-inject program.")
+
+(defvar message-qmail-inject-args nil
+ "Arguments passed to qmail-inject programs.
+This should be a list of strings, one string for each argument.
+
+For e.g., if you wish to set the envelope sender address so that bounces
+go to the right place or to deal with listserv's usage of that address, you
+might set this variable to '(\"-f\" \"you@some.where\").")
+
(defvar gnus-post-method)
(defvar gnus-select-method)
;;;###autoload
The value should be an expression to test whether the problem will
actually occur.")
+;;; Internal variables.
+;;; Well, not really internal.
+
(defvar message-mode-syntax-table
(let ((table (copy-syntax-table text-mode-syntax-table)))
(modify-syntax-entry ?% ". " table)
(when (bufferp errbuf)
(kill-buffer errbuf)))))
+(defun message-send-mail-with-qmail ()
+ "Pass the prepared message buffer to qmail-inject.
+Refer to the documentation for the variable `message-send-mail-function'
+to find out how to use this."
+ ;; replace the header delimiter with a blank line
+ (goto-char (point-min))
+ (re-search-forward
+ (concat "^" (regexp-quote mail-header-separator) "\n"))
+ (replace-match "\n")
+ ;; send the message
+ (case
+ (apply
+ 'call-process-region 1 (point-max) message-qmail-inject-program
+ nil nil nil
+ ;; qmail-inject's default behaviour is to look for addresses on the
+ ;; command line; if there're none, it scans the headers.
+ ;; yes, it does The Right Thing w.r.t. Resent-To and it's kin.
+ ;;
+ ;; in general, ALL of qmail-inject's defaults are perfect for simply
+ ;; reading a formatted (i.e., at least a To: or Resent-To header)
+ ;; message from stdin.
+ ;;
+ ;; qmail also has the advantage of not having being raped by
+ ;; various vendors, so we don't have to allow for that, either --
+ ;; compare this with message-send-mail-with-sendmail and weep
+ ;; for sendmail's lost innocence.
+ ;;
+ ;; all this is way cool coz it lets us keep the arguments entirely
+ ;; free for -inject-arguments -- a big win for the user and for us
+ ;; since we don't have to play that double-guessing game and the user
+ ;; gets full control (no gestapo'ish -f's, for instance). --sj
+ message-qmail-inject-args)
+ ;; qmail-inject doesn't say anything on it's stdout/stderr,
+ ;; we have to look at the retval instead
+ (0 nil)
+ (1 (error "qmail-inject reported permanent failure."))
+ (111 (error "qmail-inject reported transient failure."))
+ ;; should never happen
+ (t (error "qmail-inject reported unknown failure."))))
+
+
(defun message-send-mail-with-mh ()
"Send the prepared message buffer with mh."
(let ((mh-previous-window-config nil)
(body-begin . "^ ?$")
(file-end . "^End of")
(prepare-body-function . nndoc-unquote-dashes)
- (subtype digest)) ;; impossible to really guess?
+ (subtype digest guess))
(lanl-gov-announce
(article-begin . "^\\\\\\\\\n")
(head-begin . "^Paper.*:")
"Retrieve group info on GROUPS."
(nntp-possibly-change-group nil server)
(save-excursion
- (set-buffer nntp-server-buffer)
+ (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
;; The first time this is run, this variable is `try'. So we
;; try.
(when (eq nntp-server-list-active-group 'try)
(while (re-search-forward "^[.2-5]" nil t)
(delete-region (match-beginning 0)
(progn (forward-line 1) (point))))
+ (copy-to-buffer nntp-server-buffer (point-min) (point-max))
'active))))
- (defun nntp-try-list-active (group)
+(defun nntp-try-list-active (group)
(nntp-list-active-group group)
(save-excursion
- (set-buffer nntp-server-buffer)
(goto-char (point-min))
(cond ((looking-at "5[0-9]+")
(setq nntp-server-list-active-group nil))
(when (nntp-send-command-and-decode
"\r?\n\\.\r?\n" "ARTICLE"
(if (numberp article) (int-to-string article) article))
- (when buffer
+ (when (and buffer
+ (not (equal buffer nntp-server-buffer)))
(save-excursion
(set-buffer nntp-server-buffer)
(copy-to-buffer buffer (point-min) (point-max))
mark)
(deffoo nnvirtual-close-group (group &optional server)
- (when (nnvirtual-possibly-change-server server)
+ (when (and (nnvirtual-possibly-change-server server)
+ (not (gnus-ephemeral-group-p group)))
;; Copy (un)read articles.
(nnvirtual-update-reads)
;; We copy the marks from this group to the component
(funcall (nnweb-definition 'map)))
(cond
((not nnweb-articles)
- (nnheader-report 'nnweb "Couldn't request search"))
+ (nnheader-report 'nnweb "No matching articles"))
(t
(nnheader-report 'nnweb "Opened group %s" group)
(nnheader-insert
(old-asynch url-be-asynchronous)
(url-request-data nil)
(url-request-extra-headers nil)
- (url-working-buffer (generate-new-buffer-name " *dejanews*")))
+ (url-working-buffer (generate-new-buffer-name " *nnweb*")))
(setq-default url-be-asynchronous t)
(save-excursion
(set-buffer (get-buffer-create url-working-buffer))
(url-request-method 'POST)
(url-request-extra-headers
'(("Content-type" . "application/x-www-form-urlencoded"))))
- (url-insert-file-contents url)))
+ (prog1
+ (url-insert-file-contents url)
+ (setq buffer-file-name nil))))
(defun nnweb-decode-entities ()
(goto-char (point-min))
(require 'annotations)
(require 'messagexmas)
-(eval-when-compile (require 'cl))
+(require 'cl)
(defvar smiley-data-directory (message-xmas-find-glyph-directory "smilies")
"Location of the smiley faces files.")
(when (extentp (setq ext (extent-property ant 'smiley-extent)))
(set-extent-property ext 'invisible nil)
(hide-annotation ant))
- (if pt
- (while (setq ext (extent-at pt (event-buffer event) nil ext 'at))
- (when (annotationp (setq ant
- (extent-property ext 'smiley-annotation)))
- (reveal-annotation ant)
- (set-extent-property ext 'invisible t)))))))
+ (when pt
+ (while (setq ext (extent-at pt (event-buffer event) nil ext 'at))
+ (when (annotationp (setq ant
+ (extent-property ext 'smiley-annotation)))
+ (reveal-annotation ant)
+ (set-extent-property ext 'invisible t)))))))
;;;###autoload
(defun smiley-buffer (&optional buffer st nd)
(let ((ext (make-extent start end))
(ant (make-annotation glyph end 'text)))
;; set text extent params
- (set-extent-property ext 'invisible t)
(set-extent-property ext 'end-open t)
+ (set-extent-property ext 'start-open t)
+ (set-extent-property ext 'invisible t)
(set-extent-property ext 'keymap smiley-map)
(set-extent-property ext 'mouse-face gnus-article-mouse-face)
-; (set-extent-property ext 'intangible t)
+ (set-extent-property ext 'intangible t)
;; set annotation params
(set-extent-property ant 'mouse-face gnus-article-mouse-face)
(set-extent-property ant 'keymap smiley-map)
+Sun Aug 25 23:39:03 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi: Include the version number.
+
+Sun Aug 25 21:31:33 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.texi (Really Various Summary Commands): Addition.
+
Sat Aug 17 22:24:34 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
* gnus.texi (Startup Files): Addition.
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Red Gnus Manual
+@settitle Red Gnus 0.15 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Red Gnus Manual
+@title Red Gnus 0.15 Manual
@author by Lars Magne Ingebrigtsen
@page
@item C-t
@kindex C-t (Summary)
@findex gnus-summary-toggle-truncation
-Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
+Toggle truncation of summary lines
+(@code{gnus-summary-toggle-truncation}). This will probably confuse the
+line centering function in the summary buffer, so it's not a good idea
+to have truncation switched off while reading articles.
@item =
@kindex = (Summary)