*** pub/sgnus/lisp/gnus-cache.el Mon Feb 5 19:15:30 1996 --- sgnus/lisp/gnus-cache.el Wed Feb 7 08:37:53 1996 *************** *** 180,186 **** (defun gnus-cache-enter-remove-article (article) "Mark ARTICLE for later possible removal." ! (push article gnus-cache-removable-articles)) (defun gnus-cache-possibly-remove-articles () "Possibly remove some of the removable articles." --- 180,187 ---- (defun gnus-cache-enter-remove-article (article) "Mark ARTICLE for later possible removal." ! (when article ! (push article gnus-cache-removable-articles))) (defun gnus-cache-possibly-remove-articles () "Possibly remove some of the removable articles." *** pub/sgnus/lisp/gnus-cite.el Mon Feb 5 19:15:30 1996 --- sgnus/lisp/gnus-cite.el Tue Feb 6 20:28:21 1996 *************** *** 28,33 **** --- 28,34 ---- (require 'gnus) (require 'gnus-msg) (require 'gnus-ems) + (eval-when-compile (require 'cl)) (eval-and-compile (autoload 'gnus-article-add-button "gnus-vis")) *************** *** 334,345 **** (defun gnus-article-toggle-cited-text (region) "Toggle hiding the text in REGION." ! (funcall ! (if (text-property-any ! (car region) (cdr region) ! (car gnus-hidden-properties) (cadr gnus-hidden-properties)) ! 'remove-text-properties 'add-text-properties) ! (car region) (cdr region) gnus-hidden-properties)) (defun gnus-article-hide-citation-maybe (&optional arg force) "Toggle hiding of cited text that has an attribution line. --- 335,347 ---- (defun gnus-article-toggle-cited-text (region) "Toggle hiding the text in REGION." ! (let (buffer-read-only) ! (funcall ! (if (text-property-any ! (car region) (cdr region) ! (car gnus-hidden-properties) (cadr gnus-hidden-properties)) ! 'remove-text-properties 'add-text-properties) ! (car region) (cdr region) gnus-hidden-properties))) (defun gnus-article-hide-citation-maybe (&optional arg force) "Toggle hiding of cited text that has an attribution line. *** pub/sgnus/lisp/gnus-cus.el Mon Feb 5 19:15:30 1996 --- sgnus/lisp/gnus-cus.el Tue Feb 6 20:28:18 1996 *************** *** 29,34 **** --- 29,35 ---- (require 'custom) (require 'gnus-ems) (require 'browse-url) + (eval-when-compile (require 'cl)) ;; The following is just helper functions and data, not ment to be set ;; by the user. *** pub/sgnus/lisp/gnus-edit.el Mon Feb 5 19:15:30 1996 --- sgnus/lisp/gnus-edit.el Tue Feb 6 20:28:17 1996 *************** *** 13,18 **** --- 13,19 ---- (require 'custom) (require 'gnus-score) + (eval-when-compile (require 'cl)) (defconst gnus-score-custom-data '((tag . "Score") *** pub/sgnus/lisp/gnus-ems.el Mon Feb 5 19:15:31 1996 --- sgnus/lisp/gnus-ems.el Tue Feb 6 20:28:15 1996 *************** *** 25,30 **** --- 25,32 ---- ;;; Code: + (eval-when-compile (require 'cl)) + (defvar gnus-mouse-2 [mouse-2]) (defalias 'gnus-make-overlay 'make-overlay) *** pub/sgnus/lisp/gnus-kill.el Mon Feb 5 19:15:31 1996 --- sgnus/lisp/gnus-kill.el Fri Feb 9 10:17:22 1996 *************** *** 27,32 **** --- 27,33 ---- ;;; Code: (require 'gnus) + (eval-when-compile (require 'cl)) (defvar gnus-kill-file-mode-hook nil "*A hook for Gnus kill file mode.") *************** *** 577,585 **** (or (stringp value) (setq value (prin1-to-string value))) (setq did-kill (string-match regexp value))) ! (if (stringp form) ;Keyboard macro. ! (execute-kbd-macro form) ! (funcall form)))) ;; Search article body. (let ((gnus-current-article nil) ;Save article pointer. (gnus-last-article nil) --- 578,589 ---- (or (stringp value) (setq value (prin1-to-string value))) (setq did-kill (string-match regexp value))) ! (cond ((stringp form) ;Keyboard macro. ! (execute-kbd-macro form)) ! ((gnus-functionp form) ! (funcall form)) ! (t ! (eval form))))) ;; Search article body. (let ((gnus-current-article nil) ;Save article pointer. (gnus-last-article nil) *************** *** 606,631 **** (save-excursion (let ((killed-no 0) function article header) ! (if (or (null field) ! (string-equal field "") ! (not (fboundp ! (setq function ! (intern-soft ! (concat "mail-header-" (downcase field))))))) ! (error "Unknown header field: \"%s\"" field) ! ;; Get access function of header filed. ! (setq function `(lambda (h) (,function h))) ! ;; Starting from the current article. ! (while (or (and (not article) ! (setq article (gnus-summary-article-number)) ! t) ! (setq article ! (gnus-summary-search-forward ! (not ignore-marked) nil backward))) ! (and (or (null gnus-newsgroup-kill-headers) ! (memq article gnus-newsgroup-kill-headers)) ! (vectorp (setq header (gnus-summary-article-header article))) ! (gnus-execute-1 function regexp form header) ! (setq killed-no (1+ killed-no)))) ! killed-no)))) --- 610,643 ---- (save-excursion (let ((killed-no 0) function article header) ! (cond ! ;; Search body. ! ((or (null field) ! (string-equal field "")) ! (setq function nil)) ! ;; Get access function of header field. ! ((fboundp ! (setq function ! (intern-soft ! (concat "mail-header-" (downcase field))))) ! (setq function `(lambda (h) (,function h)))) ! ;; Signal error. ! (t ! (error "Unknown header field: \"%s\"" field))) ! ;; Starting from the current article. ! (while (or (and (not article) ! (setq article (gnus-summary-article-number)) ! t) ! (setq article ! (gnus-summary-search-forward ! (not ignore-marked) nil backward))) ! (and (or (null gnus-newsgroup-kill-headers) ! (memq article gnus-newsgroup-kill-headers)) ! (vectorp (setq header (gnus-summary-article-header article))) ! (gnus-execute-1 function regexp form header) ! (setq killed-no (1+ killed-no)))) ! killed-no))) + (provide 'gnus-kill) + + ;;; gnus-kill.el ends here \ No newline at end of file *** pub/sgnus/lisp/gnus-msg.el Mon Feb 5 19:15:32 1996 --- sgnus/lisp/gnus-msg.el Wed Feb 7 19:56:34 1996 *************** *** 2462,2470 **** (defun gnus-bug-mail-send-and-exit () "Send the bug message and exit." (interactive) ! (and (get-buffer "*Gnus Help Bug*") ! (kill-buffer "*Gnus Help Bug*")) ! (gnus-mail-send-and-exit)) (defun gnus-debug () "Attemps to go through the Gnus source file and report what variables have been changed. --- 2462,2473 ---- (defun gnus-bug-mail-send-and-exit () "Send the bug message and exit." (interactive) ! (let ((cur (current-buffer))) ! (and (get-buffer "*Gnus Help Bug*") ! (kill-buffer "*Gnus Help Bug*")) ! (gnus-mail-send-and-exit) ! (when (buffer-name cur) ! (kill-buffer cur)))) (defun gnus-debug () "Attemps to go through the Gnus source file and report what variables have been changed. *** pub/sgnus/lisp/gnus-picon.el Mon Feb 5 19:15:32 1996 --- sgnus/lisp/gnus-picon.el Fri Feb 9 10:25:21 1996 *************** *** 59,64 **** --- 59,65 ---- (require 'xpm) (require 'annotations) + (eval-when-compile (require 'cl)) (defvar gnus-picons-buffer "*Icon Buffer*" "Buffer name to display the icons in if gnus-picons-display-where is 'picons.") *************** *** 84,91 **** Some people may want to add \"unknown\" to this list." ) ! (setq gnus-group-annotations nil) ! (setq gnus-article-annotations nil) (defun gnus-picons-remove (plist) (let ((listitem (car plist))) --- 85,93 ---- Some people may want to add \"unknown\" to this list." ) ! (defvar gnus-group-annotations nil) ! (defvar gnus-article-annotations nil) ! (defvar gnus-x-face-annotations nil) (defun gnus-picons-remove (plist) (let ((listitem (car plist))) *************** *** 116,123 **** ((stringp variable) variable))) (defun gnus-article-display-picons () ! "Display faces for an author and his/her domain in gnus-picons-display-where." (interactive) (if (and (featurep 'xpm) (or (not (fboundp 'device-type)) (equal (device-type) 'x))) --- 118,181 ---- ((stringp variable) variable))) + (defvar gnus-picons-x-face-file-name + (format "/tmp/picon-xface.%s.xbm" (user-login-name)) + "The name of the file in which to store the converted X-face header.") + + (defvar gnus-picons-convert-x-face (format "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name) + "Command to convert the x-face header into a xbm file." + ) + + (defun gnus-picons-article-display-x-face () + "Display the x-face header bitmap in the 'gnus-picons-display-where buffer." + ;; delete any old ones. + (gnus-picons-remove gnus-x-face-annotations) + (setq gnus-x-face-annotations nil) + ;; display the new one. + (let ((gnus-article-x-face-command 'gnus-picons-display-x-face)) + (gnus-article-display-x-face))) + + (defun gnus-picons-display-x-face (beg end) + "Function to display the x-face header in the picons window. + To use: (setq gnus-article-x-face-command 'gnus-picons-display-x-face)" + (interactive) + ;; convert the x-face header to a .xbm file + (let ((process-connection-type nil) + (process nil)) + (process-kill-without-query + (setq process (start-process + "gnus-x-face" nil "sh" "-c" gnus-picons-convert-x-face))) + (process-send-region "gnus-x-face" beg end) + (process-send-eof "gnus-x-face") + ;; wait for it. + (while (not (equal (process-status process) 'exit)) + (sleep-for .1))) + ;; display it + (save-excursion + (set-buffer (gnus-get-buffer-name gnus-picons-display-where)) + (gnus-add-current-to-buffer-list) + (beginning-of-buffer) + (let ((iconpoint (point))) + (if (not (looking-at "^$")) + (if buffer-read-only + (progn + (toggle-read-only) + (open-line 1) + (toggle-read-only) + ) + (open-line 1))) + (end-of-line) + ;; append the annotation to gnus-article-annotations for deletion. + (setq gnus-x-face-annotations + (append + (gnus-picons-try-to-find-face + gnus-picons-x-face-file-name iconpoint) + gnus-x-face-annotations))) + ;; delete the tmp file + (delete-file gnus-picons-x-face-file-name))) + (defun gnus-article-display-picons () ! "Display faces for an author and his/her domain in gnus-picons-display-where." (interactive) (if (and (featurep 'xpm) (or (not (fboundp 'device-type)) (equal (device-type) 'x))) *************** *** 134,139 **** --- 192,198 ---- "\\1") "\\." "/")) "/"))) (switch-to-buffer (gnus-get-buffer-name gnus-picons-display-where)) + (gnus-add-current-to-buffer-list) (beginning-of-buffer) (setq iconpoint (point)) (if (not (looking-at "^$")) *************** *** 185,190 **** --- 244,250 ---- (let ((iconpoint (point))) (switch-to-buffer (gnus-get-buffer-name gnus-picons-display-where)) + (gnus-add-current-to-buffer-list) (beginning-of-buffer) (cond ((listp gnus-group-annotations) *************** *** 237,253 **** ) ) - (defun gnus-picons-try-to-find-face (path ipoint) "If PATH exists, display it as a bitmap. Returns t if succedded." ! (if (file-exists-p path) ! (progn ! ; (insert (format "yes: %s\n" path)) ! (setq gl (make-glyph path)) ! (set-glyph-face gl 'default) ! (list (make-annotation gl ipoint 'text))) ! ; (insert (format "no: %s\n" path)) ! nil)) (defun gnus-picons-reverse-domain-path (str) "a/b/c/d -> d/c/b/a" --- 297,308 ---- ) ) (defun gnus-picons-try-to-find-face (path ipoint) "If PATH exists, display it as a bitmap. Returns t if succedded." ! (when (file-exists-p path) ! (let ((gl (make-glyph path))) ! (set-glyph-face gl 'default) ! (list (make-annotation gl ipoint 'text))))) (defun gnus-picons-reverse-domain-path (str) "a/b/c/d -> d/c/b/a" *************** *** 256,258 **** --- 311,317 ---- (concat (replace-in-string str "^.*/\\([_a-zA-Z0-9-]+\\)$" "\\1") "/" (gnus-picons-reverse-domain-path (replace-in-string str "^\\(.*\\)/[_a-zA-Z0-9-]+$" "\\1"))))) + + (provide 'gnus-picon) + + ;;; gnus-picon.el ends here *** pub/sgnus/lisp/gnus-salt.el Mon Feb 5 19:15:32 1996 --- sgnus/lisp/gnus-salt.el Tue Feb 6 22:03:20 1996 *************** *** 325,333 **** (defun gnus-tree-recenter () "Center point in the tree window." (let ((selected (selected-window)) ! (cur-window (get-buffer-window (current-buffer) t))) ! (when cur-window ! (select-window cur-window) (when gnus-selected-tree-overlay (goto-char (or (gnus-overlay-end gnus-selected-tree-overlay) 1))) (let* ((top (cond ((< (window-height) 4) 0) --- 325,333 ---- (defun gnus-tree-recenter () "Center point in the tree window." (let ((selected (selected-window)) ! (tree-window (get-buffer-window gnus-tree-buffer t))) ! (when tree-window ! (select-window tree-window) (when gnus-selected-tree-overlay (goto-char (or (gnus-overlay-end gnus-selected-tree-overlay) 1))) (let* ((top (cond ((< (window-height) 4) 0) *************** *** 341,348 **** ;; possible valid number, or the second line from the top, ;; whichever is the least. (set-window-start ! cur-window (min bottom (save-excursion ! (forward-line (- top)) (point))))) (select-window selected)))) (defun gnus-get-tree-buffer () --- 341,348 ---- ;; possible valid number, or the second line from the top, ;; whichever is the least. (set-window-start ! tree-window (min bottom (save-excursion ! (forward-line (- top)) (point))))) (select-window selected)))) (defun gnus-get-tree-buffer () *** pub/sgnus/lisp/gnus-score.el Mon Feb 5 19:15:34 1996 --- sgnus/lisp/gnus-score.el Mon Feb 5 23:49:32 1996 *************** *** 190,195 **** --- 190,197 ---- (defvar gnus-internal-global-score-files nil) (defvar gnus-score-file-list nil) + (defvar gnus-short-name-score-file-cache nil) + (defvar gnus-score-help-winconf nil) (defvar gnus-adaptive-score-alist gnus-default-adaptive-score-alist) (defvar gnus-score-trace nil) *************** *** 1865,1871 **** (defun gnus-score-flush-cache () "Flush the cache of score files." (interactive) ! (setq gnus-score-cache nil) (gnus-message 6 "The score cache is now flushed")) (defun gnus-score-close () --- 1867,1874 ---- (defun gnus-score-flush-cache () "Flush the cache of score files." (interactive) ! (setq gnus-score-cache nil ! gnus-short-name-score-file-cache nil) (gnus-message 6 "The score cache is now flushed")) (defun gnus-score-close () *************** *** 1950,1956 **** ;; We do not use long file names, so we have to do some ;; directory traversing. (setq gnus-score-file-list ! (cons nil (gnus-score-score-files-1 gnus-kill-files-directory))) ;; We want long file names. (when (or (not gnus-score-file-list) (not (car gnus-score-file-list)) --- 1953,1963 ---- ;; We do not use long file names, so we have to do some ;; directory traversing. (setq gnus-score-file-list ! (cons nil ! (or gnus-short-name-score-file-cache ! (setq gnus-short-name-score-file-cache ! (gnus-score-score-files-1 ! gnus-kill-files-directory))))) ;; We want long file names. (when (or (not gnus-score-file-list) (not (car gnus-score-file-list)) *** pub/sgnus/lisp/gnus-soup.el Mon Feb 5 19:15:34 1996 --- sgnus/lisp/gnus-soup.el Wed Feb 7 21:37:07 1996 *************** *** 28,33 **** --- 28,34 ---- (require 'gnus-msg) (require 'gnus) + (eval-when-compile (require 'cl)) ;;; User Variables: *************** *** 256,273 **** ;; Return the MSG buf. msg-buf))) ! (defun gnus-soup-group-brew (group) ! "Enter GROUP and add all articles to a SOUP package." (let ((gnus-expert-user t) (gnus-large-newsgroup nil)) ! (when (gnus-summary-read-group group) ! (let ((gnus-newsgroup-processable ! (nreverse ! (gnus-sorted-complement ! gnus-newsgroup-unreads ! (append gnus-newsgroup-dormant gnus-newsgroup-marked))))) ! (gnus-soup-add-article nil))) ! (gnus-summary-exit))) (defun gnus-soup-insert-idx (offset header) ;; [number subject from date id references chars lines xref] --- 257,275 ---- ;; Return the MSG buf. msg-buf))) ! (defun gnus-soup-group-brew (group &optional not-all) ! "Enter GROUP and add all articles to a SOUP package. ! If NOT-ALL, don't pack ticked articles." (let ((gnus-expert-user t) (gnus-large-newsgroup nil)) ! (when (gnus-summary-read-group group nil t) ! (let ((gnus-newsgroup-processable ! (if (not not-all) ! (reverse (append gnus-newsgroup-marked ! gnus-newsgroup-unreads)) ! (reverse gnus-newsgroup-unreads)))) ! (gnus-soup-add-article nil)) ! (gnus-summary-exit)))) (defun gnus-soup-insert-idx (offset header) ;; [number subject from date id references chars lines xref] *************** *** 397,454 **** (gnus-soup-parse-areas (concat gnus-soup-directory "AREAS"))))) (defun gnus-soup-write-areas () ! "Write all areas to disk." (interactive) ! (if (not gnus-soup-areas) ! () ! (save-excursion ! (set-buffer (find-file-noselect ! (concat gnus-soup-directory "AREAS"))) ! (buffer-disable-undo (current-buffer)) ! (erase-buffer) (let ((areas gnus-soup-areas) area) ! (while areas ! (setq area (car areas) ! areas (cdr areas)) ! (insert (format "%s\t%s\t%s%s\n" ! (gnus-soup-area-prefix area) ! (gnus-soup-area-name area) ! (gnus-soup-area-encoding area) ! (if (or (gnus-soup-area-description area) ! (gnus-soup-area-number area)) ! (concat "\t" (or (gnus-soup-area-description ! area) ! "") ! (if (gnus-soup-area-number area) ! (concat "\t" ! (int-to-string ! (gnus-soup-area-number ! area))) ! "")) ""))))) ! (write-region (point-min) (point-max) ! (concat gnus-soup-directory "AREAS") nil 'silent) ! (set-buffer-modified-p nil) ! (kill-buffer (current-buffer))))) (defun gnus-soup-write-replies (dir areas) ! (or (file-directory-p dir) ! (gnus-make-directory dir)) ! (save-excursion ! (set-buffer (find-file-noselect (concat dir "REPLIES"))) ! (buffer-disable-undo (current-buffer)) ! (erase-buffer) (let (area) ! (while areas ! (setq area (car areas) ! areas (cdr areas)) (insert (format "%s\t%s\t%s\n" (gnus-soup-reply-prefix area) (gnus-soup-reply-kind area) ! (gnus-soup-reply-encoding area))))) ! (write-region (point-min) (point-max) (concat dir "REPLIES") nil 'silent) ! (set-buffer-modified-p nil) ! (kill-buffer (current-buffer)))) (defun gnus-soup-area (group) (gnus-soup-read-areas) --- 399,435 ---- (gnus-soup-parse-areas (concat gnus-soup-directory "AREAS"))))) (defun gnus-soup-write-areas () ! "Write the AREAS file." (interactive) ! (when gnus-soup-areas ! (nnheader-temp-write (concat gnus-soup-directory "AREAS") (let ((areas gnus-soup-areas) area) ! (while (setq area (pop areas)) ! (insert ! (format ! "%s\t%s\t%s%s\n" ! (gnus-soup-area-prefix area) ! (gnus-soup-area-name area) ! (gnus-soup-area-encoding area) ! (if (or (gnus-soup-area-description area) ! (gnus-soup-area-number area)) ! (concat "\t" (or (gnus-soup-area-description ! area) "") ! (if (gnus-soup-area-number area) ! (concat "\t" (int-to-string ! (gnus-soup-area-number area))) ! "")) "")))))))) (defun gnus-soup-write-replies (dir areas) ! "Write a REPLIES file in DIR containing AREAS." ! (nnheader-temp-write (concat dir "REPLIES") (let (area) ! (while (setq area (pop areas)) (insert (format "%s\t%s\t%s\n" (gnus-soup-reply-prefix area) (gnus-soup-reply-kind area) ! (gnus-soup-reply-encoding area))))))) (defun gnus-soup-area (group) (gnus-soup-read-areas) *** pub/sgnus/lisp/gnus-srvr.el Mon Feb 5 19:15:34 1996 --- sgnus/lisp/gnus-srvr.el Fri Feb 9 09:30:19 1996 *************** *** 41,46 **** --- 41,48 ---- ;;; Internal variables. + (defvar gnus-inserted-opened-servers nil) + (defconst gnus-server-line-format-alist (` ((?h how ?s) (?n name ?s) *************** *** 176,183 **** (when gnus-carpal (gnus-carpal-setup-buffer 'server))))) - (fset 'gnus-server-position-point 'gnus-goto-colon) - (defun gnus-server-prepare () (setq gnus-server-mode-line-format-spec (gnus-parse-format gnus-server-mode-line-format --- 178,183 ---- *************** *** 188,195 **** (let ((alist gnus-server-alist) (buffer-read-only nil) (opened gnus-opened-servers) ! done server) (erase-buffer) ;; First we do the real list of servers. (while alist (push (cdr (setq server (pop alist))) done) --- 188,196 ---- (let ((alist gnus-server-alist) (buffer-read-only nil) (opened gnus-opened-servers) ! done server op-ser) (erase-buffer) + (setq gnus-inserted-opened-servers nil) ;; First we do the real list of servers. (while alist (push (cdr (setq server (pop alist))) done) *************** *** 200,207 **** (while opened (unless (member (car (car opened)) done) (gnus-server-insert-server-line ! (format "%s:%s" (car (car (car opened))) (nth 1 (car (car opened)))) ! (car (car opened)))) (setq opened (cdr opened)))) (goto-char (point-min)) (gnus-server-position-point)) --- 201,210 ---- (while opened (unless (member (car (car opened)) done) (gnus-server-insert-server-line ! (setq op-ser (format "%s:%s" (car (car (car opened))) ! (nth 1 (car (car opened))))) ! (car (car opened))) ! (push (list op-ser (caar opened)) gnus-inserted-opened-servers)) (setq opened (cdr opened)))) (goto-char (point-min)) (gnus-server-position-point)) *************** *** 234,247 **** (defun gnus-server-set-info (server info) ;; Enter a select method into the virtual server alist. ! (gnus-dribble-enter ! (concat "(gnus-server-set-info \"" server "\" '" ! (prin1-to-string info) ")")) ! (let* ((server (nth 1 info)) ! (entry (assoc server gnus-server-alist))) ! (if entry (setcdr entry info) ! (setq gnus-server-alist ! (nconc gnus-server-alist (list (cons server info))))))) ;;; Interactive server functions. --- 237,251 ---- (defun gnus-server-set-info (server info) ;; Enter a select method into the virtual server alist. ! (when (and server info) ! (gnus-dribble-enter ! (concat "(gnus-server-set-info \"" server "\" '" ! (prin1-to-string info) ")")) ! (let* ((server (nth 1 info)) ! (entry (assoc server gnus-server-alist))) ! (if entry (setcdr entry info) ! (setq gnus-server-alist ! (nconc gnus-server-alist (list (cons server info)))))))) ;;; Interactive server functions. *************** *** 390,397 **** (defun gnus-server-edit-server (server) "Edit the server on the current line." (interactive (list (gnus-server-server-name))) ! (or server ! (error "No server on current line")) (let ((winconf (current-window-configuration))) (get-buffer-create gnus-server-edit-buffer) (gnus-configure-windows 'edit-server) --- 394,403 ---- (defun gnus-server-edit-server (server) "Edit the server on the current line." (interactive (list (gnus-server-server-name))) ! (unless server ! (error "No server on current line")) ! (unless (assoc server gnus-server-alist) ! (error "This server can't be edited")) (let ((winconf (current-window-configuration))) (get-buffer-create gnus-server-edit-buffer) (gnus-configure-windows 'edit-server) *** pub/sgnus/lisp/gnus-topic.el Mon Feb 5 19:15:34 1996 --- sgnus/lisp/gnus-topic.el Fri Feb 9 07:51:34 1996 *************** *** 97,103 **** (list "Gnus"))) (gnus-topic-enter-dribble)) ! (defun gnus-group-prepare-topics (level &optional all lowest regexp list-topic) "List all newsgroups with unread articles of level LEVEL or lower, and use the `gnus-group-topics' to sort the groups. If ALL is non-nil, list groups that have no unread articles. --- 97,103 ---- (list "Gnus"))) (gnus-topic-enter-dribble)) ! (defun gnus-group-prepare-topics (level &optional all lowest regexp list-topic topic-level) "List all newsgroups with unread articles of level LEVEL or lower, and use the `gnus-group-topics' to sort the groups. If ALL is non-nil, list groups that have no unread articles. *************** *** 106,117 **** (let ((buffer-read-only nil) (lowest (or lowest 1)) tlist info) ! (unless list-topic (erase-buffer)) ;; List dead groups? - (when nil (when (and (>= level gnus-level-zombie) (<= lowest gnus-level-zombie)) (gnus-group-prepare-flat-list-dead (setq gnus-zombie-list (sort gnus-zombie-list 'string<)) --- 106,116 ---- (let ((buffer-read-only nil) (lowest (or lowest 1)) tlist info) ! (unless list-topic (erase-buffer)) ;; List dead groups? (when (and (>= level gnus-level-zombie) (<= lowest gnus-level-zombie)) (gnus-group-prepare-flat-list-dead (setq gnus-zombie-list (sort gnus-zombie-list 'string<)) *************** *** 122,135 **** (gnus-group-prepare-flat-list-dead (setq gnus-killed-list (sort gnus-killed-list 'string<)) gnus-level-killed ?K ! regexp))) ;; Use topics. (when (< lowest gnus-level-zombie) (if list-topic (let ((top (gnus-topic-find-topology list-topic))) ! (gnus-topic-prepare-topic (cdr top) (car top) level all)) ! (gnus-topic-prepare-topic gnus-topic-topology 0 level all)))) (gnus-group-set-mode-line) (setq gnus-group-list-mode (cons level all)) --- 121,136 ---- (gnus-group-prepare-flat-list-dead (setq gnus-killed-list (sort gnus-killed-list 'string<)) gnus-level-killed ?K ! regexp)) ;; Use topics. (when (< lowest gnus-level-zombie) (if list-topic (let ((top (gnus-topic-find-topology list-topic))) ! (gnus-topic-prepare-topic (cdr top) (car top) ! (or topic-level level) all)) ! (gnus-topic-prepare-topic gnus-topic-topology 0 ! (or topic-level level) all)))) (gnus-group-set-mode-line) (setq gnus-group-list-mode (cons level all)) *************** *** 148,154 **** (topic (reverse topic)) (all-entries entries) (unread 0) ! info entry end) ;; Insert any sub-topics. (while topic (incf unread --- 149,155 ---- (topic (reverse topic)) (all-entries entries) (unread 0) ! info entry end active) ;; Insert any sub-topics. (while topic (incf unread *************** *** 158,169 **** (setq end (point)) (goto-char beg) ;; Insert all the groups that belong in this topic. ! (while (setq info (nth 2 (setq entry (pop entries)))) (when visiblep ! (gnus-group-insert-group-line ! (gnus-info-group info) ! (gnus-info-level info) (gnus-info-marks info) ! (car entry) (gnus-info-method info))) (when (numberp (car entry)) (incf unread (car entry)))) (goto-char beg) --- 159,176 ---- (setq end (point)) (goto-char beg) ;; Insert all the groups that belong in this topic. ! (while (setq entry (pop entries)) (when visiblep ! (if (stringp entry) ! (gnus-group-insert-group-line ! entry (if (member entry gnus-zombie-list) 8 9) ! nil (- (1+ (cdr (setq active (gnus-active entry)))) ! (car active)) nil) ! (when (setq info (nth 2 entry)) ! (gnus-group-insert-group-line ! (gnus-info-group info) ! (gnus-info-level info) (gnus-info-marks info) ! (car entry) (gnus-info-method info))))) (when (numberp (car entry)) (incf unread (car entry)))) (goto-char beg) *************** *** 180,198 **** (defun gnus-topic-find-groups (topic &optional level all) "Return entries for all visible groups in TOPIC." (let ((groups (cdr (assoc topic gnus-topic-alist))) ! info clevel unread group w lowest gtopic params visible-groups entry) (setq lowest (or lowest 1)) (setq level (or level 7)) ;; We go through the newsrc to look for matches. (while groups ! (setq entry (gnus-gethash (pop groups) gnus-newsrc-hashtb) info (nth 2 entry) - group (gnus-info-group info) params (gnus-info-params info) ! unread (car entry)) (and unread ; nil means that the group is dead. ! (<= (setq clevel (gnus-info-level info)) level) (>= clevel lowest) ; Is inside the level we want. (or all (and gnus-group-list-inactive-groups --- 187,210 ---- (defun gnus-topic-find-groups (topic &optional level all) "Return entries for all visible groups in TOPIC." (let ((groups (cdr (assoc topic gnus-topic-alist))) ! info clevel unread group lowest params visible-groups entry active) (setq lowest (or lowest 1)) (setq level (or level 7)) ;; We go through the newsrc to look for matches. (while groups ! (setq entry (gnus-gethash (setq group (pop groups)) gnus-newsrc-hashtb) info (nth 2 entry) params (gnus-info-params info) ! active (gnus-active group) ! unread (or (car entry) ! (and (not (equal group "dummy.group")) ! active ! (- (1+ (cdr active)) (car active)))) ! clevel (or (gnus-info-level info) ! (if (member group gnus-zombie-list) 8 9))) (and unread ; nil means that the group is dead. ! (<= clevel level) (>= clevel lowest) ; Is inside the level we want. (or all (and gnus-group-list-inactive-groups *************** *** 207,216 **** (memq 'visible params) (cdr (assq 'visible params))) ;; Add this group to the list of visible groups. ! (push entry visible-groups))) (nreverse visible-groups))) ! (defun gnus-topic-remove-topic (&optional insert total-remove hide) "Remove the current topic." (let ((topic (gnus-group-topic-name)) (level (gnus-group-topic-level)) --- 219,228 ---- (memq 'visible params) (cdr (assq 'visible params))) ;; Add this group to the list of visible groups. ! (push (or entry group) visible-groups))) (nreverse visible-groups))) ! (defun gnus-topic-remove-topic (&optional insert total-remove hide in-level) "Remove the current topic." (let ((topic (gnus-group-topic-name)) (level (gnus-group-topic-level)) *************** *** 226,238 **** (setcdr (cdr (car (cdr (gnus-topic-find-topology topic)))) (list hide))) (unless total-remove ! (gnus-topic-insert-topic topic))))) ! (defun gnus-topic-insert-topic (topic) "Insert TOPIC." (gnus-group-prepare-topics (car gnus-group-list-mode) (cdr gnus-group-list-mode) ! nil nil topic)) (defun gnus-topic-fold (&optional insert) "Remove/insert the current topic." --- 238,250 ---- (setcdr (cdr (car (cdr (gnus-topic-find-topology topic)))) (list hide))) (unless total-remove ! (gnus-topic-insert-topic topic in-level))))) ! (defun gnus-topic-insert-topic (topic &optional level) "Insert TOPIC." (gnus-group-prepare-topics (car gnus-group-list-mode) (cdr gnus-group-list-mode) ! nil nil topic level)) (defun gnus-topic-fold (&optional insert) "Remove/insert the current topic." *************** *** 243,251 **** (gnus-topic-remove-topic (or insert (not (gnus-topic-visible-p)))) (let ((gnus-topic-topology gnus-topic-active-topology) ! (gnus-topic-alist gnus-topic-active-alist)) (gnus-topic-remove-topic ! (or insert (not (gnus-topic-visible-p)))))))))) (defun gnus-group-topic-p () "Return non-nil if the current line is a topic." --- 255,264 ---- (gnus-topic-remove-topic (or insert (not (gnus-topic-visible-p)))) (let ((gnus-topic-topology gnus-topic-active-topology) ! (gnus-topic-alist gnus-topic-active-alist) ! (gnus-group-list-mode (cons 5 t))) (gnus-topic-remove-topic ! (or insert (not (gnus-topic-visible-p))) nil nil 9))))))) (defun gnus-group-topic-p () "Return non-nil if the current line is a topic." *************** *** 401,406 **** --- 414,439 ---- (gnus-group-goto-group group) (gnus-group-position-point)))) + (defun gnus-topic-goto-missing-group (group) + "Place point where GROUP is supposed to be inserted." + (let* ((topic (gnus-group-topic group)) + (groups (cdr (assoc topic gnus-topic-alist))) + (g (cdr (member group groups))) + (unfound t)) + (while (and g unfound) + (when (gnus-group-goto-group (pop g)) + (beginning-of-line) + (setq unfound nil))) + (when unfound + (setq g (cdr (member group (reverse groups)))) + (while (and g unfound) + (when (gnus-group-goto-group (pop g)) + (forward-line 1) + (setq unfound nil))) + (when unfound + (gnus-topic-goto-topic topic) + (forward-line 1))))) + (defun gnus-topic-update-topic-line (&optional topic level) (unless topic (setq topic gnus-topic-topology) *************** *** 517,522 **** --- 550,556 ---- "#" gnus-topic-mark-topic "n" gnus-topic-create-topic "m" gnus-topic-move-group + "D" gnus-topic-remove-group "c" gnus-topic-copy-group "h" gnus-topic-hide-topic "s" gnus-topic-show-topic *************** *** 534,539 **** --- 568,574 ---- ("Groups" ["Copy" gnus-topic-copy-group t] ["Move" gnus-topic-move-group t] + ["Remove" gnus-topic-remove-group t] ["Copy matching" gnus-topic-copy-matching t] ["Move matching" gnus-topic-move-matching t]) ("Topics" *************** *** 576,581 **** --- 611,617 ---- (setq gnus-group-goto-next-group-function 'gnus-topic-goto-next-group) (setq gnus-group-change-level-function 'gnus-topic-change-level) + (setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group) (run-hooks 'gnus-topic-mode-hook) ;; We check the topology. (gnus-topic-check-topology)) *************** *** 654,673 **** (let ((groups (gnus-group-process-prefix n)) (topicl (assoc topic gnus-topic-alist)) entry) - (unless topicl - (error "No such topic: %s" topic)) (mapcar (lambda (g) (gnus-group-remove-mark g) (when (and (setq entry (assoc (gnus-group-topic g) gnus-topic-alist)) (not copyp)) (setcdr entry (delete g (cdr entry)))) ! (nconc topicl (list g))) groups) (gnus-group-position-point)) (gnus-topic-enter-dribble) (gnus-group-list-groups)) (defun gnus-topic-copy-group (n topic) "Copy the current group to a topic." (interactive --- 690,713 ---- (let ((groups (gnus-group-process-prefix n)) (topicl (assoc topic gnus-topic-alist)) entry) (mapcar (lambda (g) (gnus-group-remove-mark g) (when (and (setq entry (assoc (gnus-group-topic g) gnus-topic-alist)) (not copyp)) (setcdr entry (delete g (cdr entry)))) ! (when topicl ! (nconc topicl (list g)))) groups) (gnus-group-position-point)) (gnus-topic-enter-dribble) (gnus-group-list-groups)) + (defun gnus-topic-remove-group (n) + "Remove the current group the topic." + (interactive "P") + (gnus-topic-move-group n nil)) + (defun gnus-topic-copy-group (n topic) "Copy the current group to a topic." (interactive *************** *** 882,888 **** (interactive "P") (gnus-topic-grok-active) (let ((gnus-topic-topology gnus-topic-active-topology) ! (gnus-topic-alist gnus-topic-active-alist)) (gnus-group-list-groups 9 nil 1))) (provide 'gnus-topic) --- 922,929 ---- (interactive "P") (gnus-topic-grok-active) (let ((gnus-topic-topology gnus-topic-active-topology) ! (gnus-topic-alist gnus-topic-active-alist) ! gnus-killed-list gnus-zombie-list) (gnus-group-list-groups 9 nil 1))) (provide 'gnus-topic) *** pub/sgnus/lisp/gnus-uu.el Mon Feb 5 19:15:35 1996 --- sgnus/lisp/gnus-uu.el Tue Feb 6 22:03:41 1996 *************** *** 41,47 **** ("\\.\\(wav\\|aiff\\|hcom\\|u[blw]\\|s[bfw]\\|voc\\|smp\\)$" "sox -v .5 %s -t .au -u - > /dev/audio") ("\\.au$" "cat %s > /dev/audio") ! ("\\.mid?i$" "playmidi -f") ("\\.mod$" "str32") ("\\.ps$" "ghostview") ("\\.dvi$" "xdvi") --- 41,47 ---- ("\\.\\(wav\\|aiff\\|hcom\\|u[blw]\\|s[bfw]\\|voc\\|smp\\)$" "sox -v .5 %s -t .au -u - > /dev/audio") ("\\.au$" "cat %s > /dev/audio") ! ("\\.midi?$" "playmidi -f") ("\\.mod$" "str32") ("\\.ps$" "ghostview") ("\\.dvi$" "xdvi") *** pub/sgnus/lisp/gnus.el Mon Feb 5 19:15:38 1996 --- sgnus/lisp/gnus.el Fri Feb 9 10:17:21 1996 *************** *** 835,843 **** (summary 0.25 point) (if gnus-carpal '(summary-carpal 4)) (article 1.0)) ! (vertical '((height . 5) (width . 15) ! (user-position . t) ! (left . -1) (top . 1)) (picons 1.0)))) (gnus-use-trees '(vertical 1.0 --- 835,843 ---- (summary 0.25 point) (if gnus-carpal '(summary-carpal 4)) (article 1.0)) ! (vertical ((height . 5) (width . 15) ! (user-position . t) ! (left . -1) (top . 1)) (picons 1.0)))) (gnus-use-trees '(vertical 1.0 *************** *** 1527,1532 **** --- 1527,1534 ---- (defvar gnus-topic-indentation "") ;; Obsolete variable. + (defvar gnus-goto-missing-group-function nil) + (defvar gnus-override-subscribe-method nil) (defvar gnus-group-goto-next-group-function nil *************** *** 1682,1688 **** "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version "September Gnus v0.36" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1684,1690 ---- "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version "September Gnus v0.37" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 2045,2051 **** gnus-summary-mail-forward gnus-summary-mail-other-window gnus-bug) ("gnus-picon" :interactive t gnus-article-display-picons ! gnus-group-display-picons) ("gnus-vm" gnus-vm-mail-setup) ("gnus-vm" :interactive t gnus-summary-save-in-vm gnus-summary-save-article-vm gnus-yank-article)))) --- 2047,2053 ---- gnus-summary-mail-forward gnus-summary-mail-other-window gnus-bug) ("gnus-picon" :interactive t gnus-article-display-picons ! gnus-group-display-picons gnus-picons-article-display-x-face) ("gnus-vm" gnus-vm-mail-setup) ("gnus-vm" :interactive t gnus-summary-save-in-vm gnus-summary-save-article-vm gnus-yank-article)))) *************** *** 2421,2444 **** ;; Make the indentation array. (gnus-make-thread-indent-array) (when (or force ! (and (assq 'version gnus-format-specs) ! (not (equal emacs-version ! (cdr (assq 'version gnus-format-specs)))))) (setq gnus-format-specs nil)) (let ((types '(summary summary-dummy group ! summary-mode group-mode article-mode)) ! old-format new-format entry type val) ! (while types ! (setq type (pop types)) (setq new-format (symbol-value (intern (format "gnus-%s-line-format" type)))) (setq entry (cdr (assq type gnus-format-specs))) (if (and entry (equal (car entry) new-format)) (set (intern (format "gnus-%s-line-format-spec" type)) ! (car (cdr entry))) (setq val (if (not (stringp new-format)) ;; This is a function call or something. --- 2423,2448 ---- ;; Make the indentation array. (gnus-make-thread-indent-array) + ;; See whether all the stored info needs to be flushed. (when (or force ! (not (equal emacs-version ! (cdr (assq 'version gnus-format-specs))))) (setq gnus-format-specs nil)) + ;; Go through all the formats and see whether they need updating. (let ((types '(summary summary-dummy group ! summary-mode group-mode article-mode)) ! new-format entry type val) ! (while (setq type (pop types)) (setq new-format (symbol-value (intern (format "gnus-%s-line-format" type)))) (setq entry (cdr (assq type gnus-format-specs))) (if (and entry (equal (car entry) new-format)) + ;; Use the old format. (set (intern (format "gnus-%s-line-format-spec" type)) ! (cadr entry)) ! ;; This is a new format. (setq val (if (not (stringp new-format)) ;; This is a function call or something. *************** *** 2451,2470 **** (if (eq type 'article-mode) 'summary-mode type)))) (not (string-match "mode$" (symbol-name type)))))) ! (set (intern (format "gnus-%s-line-format-spec" type)) val) (if entry ! (setcar (cdr entry) val) ! (push (list type new-format val) gnus-format-specs))))) (gnus-update-group-mark-positions) (gnus-update-summary-mark-positions) (if (and (string-match "%[-,0-9]*D" gnus-group-line-format) (not gnus-description-hashtb) gnus-read-active-file) (gnus-read-all-descriptions-files))) (defun gnus-update-summary-mark-positions () (save-excursion (let ((gnus-replied-mark 129) (gnus-score-below-mark 130) --- 2455,2479 ---- (if (eq type 'article-mode) 'summary-mode type)))) (not (string-match "mode$" (symbol-name type)))))) ! ;; Enter the new format spec into the list. (if entry ! (progn ! (setcar (cdr entry) val) ! (setcar entry new-format)) ! (push (list type new-format val) gnus-format-specs)) ! (set (intern (format "gnus-%s-line-format-spec" type)) val)))) (gnus-update-group-mark-positions) (gnus-update-summary-mark-positions) + ;; See whether we need to read the description file. (if (and (string-match "%[-,0-9]*D" gnus-group-line-format) (not gnus-description-hashtb) gnus-read-active-file) (gnus-read-all-descriptions-files))) (defun gnus-update-summary-mark-positions () + "Compute where the summary marks are to go." (save-excursion (let ((gnus-replied-mark 129) (gnus-score-below-mark 130) *************** *** 3252,3257 **** --- 3261,3268 ---- (when result (select-window result)))))) + (defvar gnus-frame-split-p nil) + (defun gnus-configure-windows (setting &optional force) (setq setting (gnus-windows-old-to-new setting)) (let ((split (if (symbolp setting) *************** *** 3261,3270 **** rule val w height hor ohor heights sub jump-buffer rel total to-buf all-visible) (unless split (error "No such setting: %s" setting)) ! (if (and (not force) (setq all-visible (gnus-all-windows-visible-p split))) ;; All the windows mentioned are already visible, so we just ;; put point in the assigned buffer, and do not touch the ;; winconf. --- 3272,3284 ---- rule val w height hor ohor heights sub jump-buffer rel total to-buf all-visible) + (setq gnus-frame-split-p nil) + (unless split (error "No such setting: %s" setting)) ! (if (and (not force) ! (setq all-visible (gnus-all-windows-visible-p split))) ;; All the windows mentioned are already visible, so we just ;; put point in the assigned buffer, and do not touch the ;; winconf. *************** *** 3274,3283 **** (let ((frame (selected-frame))) (unwind-protect (if gnus-use-full-window ! (mapcar (lambda (frame) ! (select-frame frame) ! (delete-other-windows)) ! (frame-list)) (gnus-remove-some-windows) (switch-to-buffer nntp-server-buffer)) (select-frame frame))) --- 3288,3309 ---- (let ((frame (selected-frame))) (unwind-protect (if gnus-use-full-window ! ;; We want to remove all other windows. ! (if (not gnus-frame-split-p) ! ;; This is not a `frame' split, so we ignore the ! ;; other frames. ! (delete-other-windows) ! ;; This is a `frame' split, so we delete all windows ! ;; on all frames. ! (mapcar ! (lambda (frame) ! (unless (eq (cdr (assq 'minibuffer ! (frame-parameters frame))) ! 'only) ! (select-frame frame) ! (delete-other-windows))) ! (frame-list))) ! ;; Just remove some windows. (gnus-remove-some-windows) (switch-to-buffer nntp-server-buffer)) (select-frame frame))) *************** *** 3315,3320 **** --- 3341,3348 ---- win t)))) (t + (when (eq type 'frame) + (setq gnus-frame-split-p t)) (let ((n (mapcar 'gnus-all-windows-visible-p (cdr (cdr split)))) (win t)) *************** *** 4715,4736 **** (gnus-delete-line) (gnus-group-insert-group-line-info group)) (setq loc (1+ loc))) ! (if (or found visible-only) ! () ;; No such line in the buffer, find out where it's supposed to ;; go, and insert it there (or at the end of the buffer). ! ;; Fix by Per Abrahamsen . ! (let ((entry (cdr (cdr (gnus-gethash group gnus-newsrc-hashtb))))) ! (while (and entry (car entry) ! (not ! (gnus-goto-char ! (text-property-any ! (point-min) (point-max) ! 'gnus-group (gnus-intern-safe ! (car (car entry)) ! gnus-active-hashtb))))) ! (setq entry (cdr entry))) ! (or entry (goto-char (point-max)))) ;; Finally insert the line. (let ((gnus-group-indentation (gnus-group-group-indentation))) (gnus-group-insert-group-line-info group))) --- 4743,4764 ---- (gnus-delete-line) (gnus-group-insert-group-line-info group)) (setq loc (1+ loc))) ! (unless (or found visible-only) ;; No such line in the buffer, find out where it's supposed to ;; go, and insert it there (or at the end of the buffer). ! (if gnus-goto-missing-group-function ! (funcall gnus-goto-missing-group-function group) ! (let ((entry (cdr (cdr (gnus-gethash group gnus-newsrc-hashtb))))) ! (while (and entry (car entry) ! (not ! (gnus-goto-char ! (text-property-any ! (point-min) (point-max) ! 'gnus-group (gnus-intern-safe ! (car (car entry)) ! gnus-active-hashtb))))) ! (setq entry (cdr entry))) ! (or entry (goto-char (point-max))))) ;; Finally insert the line. (let ((gnus-group-indentation (gnus-group-group-indentation))) (gnus-group-insert-group-line-info group))) *************** *** 5062,5082 **** (let ((b (text-property-any (point-min) (point-max) 'gnus-group (gnus-intern-safe group gnus-active-hashtb)))) ! (if b ! ;; Either go to the line in the group buffer... ! (goto-char b) ! ;; ... or insert the line. ! (or ! (gnus-active group) ! (gnus-activate-group group) ! (error "%s error: %s" group (gnus-status-message group))) ! ! (gnus-group-update-group group) ! (goto-char (text-property-any ! (point-min) (point-max) ! 'gnus-group (gnus-intern-safe group gnus-active-hashtb))))) ! ;; Adjust cursor point. ! (gnus-group-position-point)) (defun gnus-group-goto-group (group) "Goto to newsgroup GROUP." --- 5090,5111 ---- (let ((b (text-property-any (point-min) (point-max) 'gnus-group (gnus-intern-safe group gnus-active-hashtb)))) ! (unless (gnus-ephemeral-group-p group) ! (if b ! ;; Either go to the line in the group buffer... ! (goto-char b) ! ;; ... or insert the line. ! (or ! (gnus-active group) ! (gnus-activate-group group) ! (error "%s error: %s" group (gnus-status-message group))) ! ! (gnus-group-update-group group) ! (goto-char (text-property-any ! (point-min) (point-max) ! 'gnus-group (gnus-intern-safe group gnus-active-hashtb))))) ! ;; Adjust cursor point. ! (gnus-group-position-point))) (defun gnus-group-goto-group (group) "Goto to newsgroup GROUP." *************** *** 6699,6705 **** "f" gnus-article-display-x-face "l" gnus-summary-stop-page-breaking "r" gnus-summary-caesar-message ! "t" gnus-summary-toggle-header "v" gnus-summary-verbose-headers "m" gnus-summary-toggle-mime) --- 6728,6734 ---- "f" gnus-article-display-x-face "l" gnus-summary-stop-page-breaking "r" gnus-summary-caesar-message ! "t" gnus-article-hide-headers "v" gnus-summary-verbose-headers "m" gnus-summary-toggle-mime) *************** *** 9428,9437 **** (gnus-summary-update-info) ;; Make sure where I was, and go to next newsgroup. (set-buffer gnus-group-buffer) ! (or quit-config ! (progn ! (gnus-group-jump-to-group group) ! (gnus-group-next-unread-group 1))) (run-hooks 'gnus-summary-exit-hook) (if temporary nil ;Nothing to do. --- 9457,9465 ---- (gnus-summary-update-info) ;; Make sure where I was, and go to next newsgroup. (set-buffer gnus-group-buffer) ! (unless quit-config ! (gnus-group-jump-to-group group) ! (gnus-group-next-unread-group 1)) (run-hooks 'gnus-summary-exit-hook) (if temporary nil ;Nothing to do. *************** *** 10713,10723 **** "Header name: " (mapcar (lambda (string) (list string)) '("Number" "Subject" "From" "Lines" "Date" ! "Message-ID" "Xref" "References")) nil 'require-match)) (read-string "Regexp: ") (read-key-sequence "Command: ") current-prefix-arg)) (gnus-set-global-variables) ;; Hidden thread subtrees must be searched as well. (gnus-summary-show-all-threads) --- 10741,10753 ---- "Header name: " (mapcar (lambda (string) (list string)) '("Number" "Subject" "From" "Lines" "Date" ! "Message-ID" "Xref" "References" "Body")) nil 'require-match)) (read-string "Regexp: ") (read-key-sequence "Command: ") current-prefix-arg)) + (when (equal header "Body") + (setq header "")) (gnus-set-global-variables) ;; Hidden thread subtrees must be searched as well. (gnus-summary-show-all-threads) *************** *** 11940,11946 **** (gnus-set-global-variables) (save-excursion (gnus-summary-catchup all)) ! (gnus-summary-next-article t)) ;; Thread-based commands. --- 11970,11976 ---- (gnus-set-global-variables) (save-excursion (gnus-summary-catchup all)) ! (gnus-summary-next-article t nil nil t)) ;; Thread-based commands. *************** *** 12102,12108 **** ;; ends. (when (and (not (eobp)) (or (zerop (gnus-summary-next-thread 1 t)) ! (goto-char (gnus-data-pos (car (gnus-data-list 'rev)))))) (setq end (point)) (prog1 (if (and (> (point) start) --- 12132,12138 ---- ;; ends. (when (and (not (eobp)) (or (zerop (gnus-summary-next-thread 1 t)) ! (goto-char (point-max)))) (setq end (point)) (prog1 (if (and (> (point) start) *************** *** 12960,12966 **** (cond ;; We first check `gnus-original-article-buffer'. ((and (equal (car gnus-original-article) group) ! (eq (cdr gnus-original-article) article)) (insert-buffer-substring gnus-original-article-buffer) 'article) ;; Check the backlog. --- 12990,12997 ---- (cond ;; We first check `gnus-original-article-buffer'. ((and (equal (car gnus-original-article) group) ! (eq (cdr gnus-original-article) article) ! (get-buffer gnus-original-article-buffer)) (insert-buffer-substring gnus-original-article-buffer) 'article) ;; Check the backlog. *************** *** 13496,13505 **** (type (gnus-fetch-field "content-transfer-encoding"))) (when (or force (and type (string-match "quoted-printable" type))) (goto-char (point-min)) (search-forward "\n\n" nil 'move) ! (gnus-mime-decode-quoted-printable (point) (point-max)) ! (gnus-headers-decode-quoted-printable))))) (defun gnus-mime-decode-quoted-printable (from to) "Decode Quoted-Printable in the region between FROM and TO." --- 13527,13536 ---- (type (gnus-fetch-field "content-transfer-encoding"))) (when (or force (and type (string-match "quoted-printable" type))) + (gnus-headers-decode-quoted-printable) (goto-char (point-min)) (search-forward "\n\n" nil 'move) ! (gnus-mime-decode-quoted-printable (point) (point-max)))))) (defun gnus-mime-decode-quoted-printable (from to) "Decode Quoted-Printable in the region between FROM and TO." *************** *** 13634,13644 **** (beg (point))) (while (gnus-goto-char (text-property-any beg (point-max) 'gnus-type type)) (if hide ! (add-text-properties (point) (setq beg (1+ (point))) ! gnus-hidden-properties) ! (remove-text-properties (point) (setq beg (1+ (point))) ! gnus-hidden-properties))) t))) (defvar gnus-article-time-units --- 13665,13676 ---- (beg (point))) (while (gnus-goto-char (text-property-any beg (point-max) 'gnus-type type)) + (setq beg (point)) + (forward-char) (if hide ! (add-text-properties beg (point) gnus-hidden-properties) ! (remove-text-properties beg (point) gnus-hidden-properties)) ! (setq beg (point))) t))) (defvar gnus-article-time-units *************** *** 14634,14640 **** (gnus-update-format-specifications) ;; Find new newsgroups and treat them. ! (if (and init gnus-check-new-newsgroups gnus-read-active-file (not level) (gnus-check-server gnus-select-method)) (gnus-find-new-newsgroups)) --- 14666,14672 ---- (gnus-update-format-specifications) ;; Find new newsgroups and treat them. ! (if (and init gnus-check-new-newsgroups (not level) (gnus-check-server gnus-select-method)) (gnus-find-new-newsgroups)) *** pub/sgnus/lisp/nnbabyl.el Mon Feb 5 19:15:38 1996 --- sgnus/lisp/nnbabyl.el Tue Feb 6 20:28:00 1996 *************** *** 32,37 **** --- 32,38 ---- (require 'nnheader) (require 'rmail) (require 'nnmail) + (eval-when-compile (require 'cl)) (defvar nnbabyl-mbox-file (expand-file-name "~/RMAIL") "The name of the rmail box file in the users home directory.") *** pub/sgnus/lisp/nndir.el Mon Feb 5 19:15:38 1996 --- sgnus/lisp/nndir.el Tue Feb 6 20:27:57 1996 *************** *** 29,34 **** --- 29,35 ---- (require 'nnheader) (require 'nnmh) (require 'nnml) + (eval-when-compile (require 'cl)) (eval-and-compile (autoload 'mail-send-and-exit "sendmail")) *** pub/sgnus/lisp/nndoc.el Mon Feb 5 19:15:38 1996 --- sgnus/lisp/nndoc.el Thu Feb 8 19:22:20 1996 *************** *** 29,34 **** --- 29,35 ---- (require 'nnheader) (require 'rmail) (require 'nnmail) + (eval-when-compile (require 'cl)) (defvar nndoc-article-type 'guess "*Type of the file. *************** *** 46,52 **** (news (article-begin . "^Path:")) (rnews ! (article-begin . "^#! *rnews +\\([0-9]\\)+ *\n") (body-end-function . nndoc-rnews-body-end)) (mbox (article-begin . --- 47,53 ---- (news (article-begin . "^Path:")) (rnews ! (article-begin . "^#! *rnews +\\([0-9]+\\) *\n") (body-end-function . nndoc-rnews-body-end)) (mbox (article-begin . *************** *** 72,77 **** --- 73,79 ---- (slack-digest (article-begin . "^------------------------------*[\n \t]+") (head-end . "^ ?$") + (body-end-function . nndoc-digest-body-end) (body-begin . "^ ?$") (file-end . "^End of") (prepare-body . nndoc-prepare-digest-body)) *************** *** 219,242 **** (defun nndoc-request-group (group &optional server dont-check) "Select news GROUP." ! (save-excursion ! (let (number) ! (cond ! ((not (nndoc-possibly-change-buffer group server)) ! (nnheader-report 'nndoc "No such file or buffer: %s" ! nndoc-address)) ! (dont-check ! (nnheader-report 'nndoc "Selected group %s" group) ! t) ! ((zerop (setq number (length nndoc-dissection-alist))) ! (nndoc-close-group group) ! (nnheader-report 'nndoc "No articles in group %s" group)) ! (t ! (save-excursion ! (set-buffer nntp-server-buffer) ! (erase-buffer) ! (insert (format "211 %d %d %d %s\n" number 1 number group)) ! t)))))) (defun nndoc-request-type (group &optional article) (cond ((not article) 'unknown) --- 221,239 ---- (defun nndoc-request-group (group &optional server dont-check) "Select news GROUP." ! (let (number) ! (cond ! ((not (nndoc-possibly-change-buffer group server)) ! (nnheader-report 'nndoc "No such file or buffer: %s" ! nndoc-address)) ! (dont-check ! (nnheader-report 'nndoc "Selected group %s" group) ! t) ! ((zerop (setq number (length nndoc-dissection-alist))) ! (nndoc-close-group group) ! (nnheader-report 'nndoc "No articles in group %s" group)) ! (t ! (nnheader-insert "211 %d %d %d %s\n" number 1 number group))))) (defun nndoc-request-type (group &optional article) (cond ((not article) 'unknown) *************** *** 287,297 **** (and (stringp nndoc-address) (file-exists-p nndoc-address) (not (file-directory-p nndoc-address)))) ! (setq nndoc-group-alist ! (cons (cons group (setq nndoc-current-buffer ! (get-buffer-create ! (concat " *nndoc " group "*")))) ! nndoc-group-alist)) (setq nndoc-dissection-alist nil) (save-excursion (set-buffer nndoc-current-buffer) --- 284,293 ---- (and (stringp nndoc-address) (file-exists-p nndoc-address) (not (file-directory-p nndoc-address)))) ! (push (cons group (setq nndoc-current-buffer ! (get-buffer-create ! (concat " *nndoc " group "*")))) ! nndoc-group-alist) (setq nndoc-dissection-alist nil) (save-excursion (set-buffer nndoc-current-buffer) *************** *** 300,315 **** (if (stringp nndoc-address) (insert-file-contents nndoc-address) (insert-buffer-substring nndoc-address))))) ! (when (and nndoc-current-buffer ! (not nndoc-dissection-alist)) (save-excursion (set-buffer nndoc-current-buffer) (nndoc-set-delims) (nndoc-dissect-buffer))) ! t)) ;; MIME (RFC 1341) digest hack by Ulrik Dickow . (defun nndoc-guess-digest-type () (let ((case-fold-search t) ; We match a bit too much, keep it simple. boundary-id b-delimiter entry) (goto-char (point-min)) --- 296,315 ---- (if (stringp nndoc-address) (insert-file-contents nndoc-address) (insert-buffer-substring nndoc-address))))) ! ;; Initialize the nndoc structures according to this new document. ! (if (not (and nndoc-current-buffer ! (not nndoc-dissection-alist))) ! (nndoc-close-server) (save-excursion (set-buffer nndoc-current-buffer) (nndoc-set-delims) (nndoc-dissect-buffer))) ! ;; Return whether we managed to select a file. ! nndoc-current-buffer)) ;; MIME (RFC 1341) digest hack by Ulrik Dickow . (defun nndoc-guess-digest-type () + "Guess what digest type the current document is." (let ((case-fold-search t) ; We match a bit too much, keep it simple. boundary-id b-delimiter entry) (goto-char (point-min)) *************** *** 334,339 **** --- 334,340 ---- ; (concat "\n--" boundary-id "\\(--\\)?[\n \t]+")) (cons 'file-end (concat "\n--" boundary-id "--[ \t]*$")))) 'mime-digest) + ;; Standard digest. ((and (re-search-forward (concat "^" (make-string 70 ?-) "\n\n") nil t) (re-search-forward (concat "\n\n" (make-string 30 ?-) "\n\n") nil t)) *************** *** 367,372 **** --- 368,374 ---- 'digest))) (defun nndoc-set-delims () + "Set the nndoc delimiter variables according to the type of the document." (let ((vars '(nndoc-file-begin nndoc-first-article nndoc-article-end nndoc-head-begin nndoc-head-end *************** *** 381,386 **** --- 383,389 ---- (while (setq defs (cdr (assq nndoc-article-type nndoc-type-alist)) guess (assq 'guess defs)) (setq nndoc-article-type (funcall (cdr guess)))) + ;; Set the nndoc variables. (while defs (set (intern (format "nndoc-%s" (car (car defs)))) (cdr (pop defs)))))) *************** *** 391,396 **** --- 394,400 ---- (beginning-of-line))) (defun nndoc-dissect-buffer () + "Go through the document and partition it into heads/bodies/articles." (let ((i 0) (first t) head-begin head-end body-begin body-end) *************** *** 406,414 **** (nndoc-search nndoc-first-article) (nndoc-search nndoc-article-begin)) (setq first nil) ! (when nndoc-head-begin ! (nndoc-search nndoc-head-begin)) ! (if (and nndoc-file-end (looking-at nndoc-file-end)) (goto-char (point-max)) (setq head-begin (point)) --- 410,418 ---- (nndoc-search nndoc-first-article) (nndoc-search nndoc-article-begin)) (setq first nil) ! (when nndoc-head-begin ! (nndoc-search nndoc-head-begin)) ! (if (and nndoc-file-end (looking-at nndoc-file-end)) (goto-char (point-max)) (setq head-begin (point)) *************** *** 448,454 **** (and (re-search-backward nndoc-article-begin nil t) (setq end (point)) (search-forward "\n\n" beg t) ! (re-search-backward "^Content-Length:[ \t]*\\([0-9]+\\) *$" end t) (setq len (string-to-int (match-string 1))) (search-forward "\n\n" beg t) (or (= (setq len (+ (point) len)) (point-max)) --- 452,459 ---- (and (re-search-backward nndoc-article-begin nil t) (setq end (point)) (search-forward "\n\n" beg t) ! (re-search-backward ! "^Content-Length:[ \t]*\\([0-9]+\\) *$" end t) (setq len (string-to-int (match-string 1))) (search-forward "\n\n" beg t) (or (= (setq len (+ (point) len)) (point-max)) *************** *** 458,466 **** (goto-char len)))) (defun nndoc-rnews-body-end () ! (save-excursion ! (and (re-search-backward nndoc-article-begin nil t) ! (goto-char (+ (point) (string-to-int (match-string 1))))))) (defun nndoc-transform-clari-briefs (article) (goto-char (point-min)) --- 463,471 ---- (goto-char len)))) (defun nndoc-rnews-body-end () ! (and (re-search-backward nndoc-article-begin nil t) ! (forward-line 1) ! (goto-char (+ (point) (string-to-int (match-string 1)))))) (defun nndoc-transform-clari-briefs (article) (goto-char (point-min)) *** pub/sgnus/lisp/nneething.el Mon Feb 5 19:15:38 1996 --- sgnus/lisp/nneething.el Wed Feb 7 08:33:07 1996 *************** *** 35,51 **** (eval-when-compile (require 'cl)) (defvar nneething-map-file-directory "~/.nneething/" ! "*Map files directory.") (defvar nneething-exclude-files nil "*Regexp saying what files to exclude from the group. If this variable is nil, no files will be excluded.") - (defvar nneething-map-file ".nneething" - "*Name of map files.") - (defconst nneething-version "nneething 1.0" "nneething version.") --- 35,53 ---- (eval-when-compile (require 'cl)) (defvar nneething-map-file-directory "~/.nneething/" ! "*Where nneething stores the map files.") ! ! (defvar nneething-map-file ".nneething" ! "*Name of the map files.") (defvar nneething-exclude-files nil "*Regexp saying what files to exclude from the group. If this variable is nil, no files will be excluded.") + ;;; Internal variables. + (defconst nneething-version "nneething 1.0" "nneething version.") *************** *** 55,60 **** --- 57,65 ---- (defvar nneething-status-string "") (defvar nneething-group-alist nil) + (defvar nneething-message-id-number 0) + (defvar nneething-work-buffer " *nneething work*") + (defvar nneething-directory nil) *************** *** 63,136 **** (defvar nneething-read-only nil) (defvar nneething-active nil) (defvar nneething-server-variables ! `((nneething-directory ,nneething-directory) ! (nneething-current-directory nil) ! (nneething-status-string "") ! (nneething-group-alist))) ;;; Interface functions. ! (defun nneething-retrieve-headers (sequence &optional newsgroup server fetch-old) ! (nneething-possibly-change-directory newsgroup) (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) ! (let* ((number (length sequence)) (count 0) (large (and (numberp nnmail-large-newsgroup) (> number nnmail-large-newsgroup))) article file) ! (if (stringp (car sequence)) 'headers ! (while sequence ! (setq article (car sequence)) (setq file (nneething-file-name article)) ! (if (and (file-exists-p file) ! (or (file-directory-p file) ! (not (zerop (nth 7 (file-attributes file)))))) ! (progn ! (insert (format "221 %d Article retrieved.\n" article)) ! (nneething-insert-head file) ! (insert ".\n"))) ! (setq sequence (cdr sequence) ! count (1+ count)) (and large (zerop (% count 20)) (message "nneething: Receiving headers... %d%%" (/ (* count 100) number)))) ! (and large (message "nneething: Receiving headers...done")) ! ;; Fold continuation lines. ! (goto-char (point-min)) ! (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) ! (replace-match " " t t)) 'headers)))) (defun nneething-open-server (server &optional defs) ! (setq nneething-status-string "") (nnheader-init-server-buffer)) (defun nneething-close-server (&optional server) t) (defun nneething-server-opened (&optional server) ! t) (defun nneething-status-message (&optional server) nneething-status-string) ! (defun nneething-request-article (id &optional newsgroup server buffer) ! (nneething-possibly-change-directory newsgroup) ! (let ((file (if (stringp id) nil (nneething-file-name id))) (nntp-server-buffer (or buffer nntp-server-buffer))) (and (stringp file) ; We did not request by Message-ID. (file-exists-p file) ; The file exists. --- 68,137 ---- (defvar nneething-read-only nil) (defvar nneething-active nil) (defvar nneething-server-variables ! `((nneething-directory ,nneething-directory) ! (nneething-current-directory nil) ! (nneething-status-string "") ! (nneething-group-alist))) ;;; Interface functions. ! (defun nneething-retrieve-headers (articles &optional group server fetch-old) ! (nneething-possibly-change-directory group) (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) ! (let* ((number (length articles)) (count 0) (large (and (numberp nnmail-large-newsgroup) (> number nnmail-large-newsgroup))) article file) ! (if (stringp (car articles)) 'headers ! (while (setq article (pop articles)) (setq file (nneething-file-name article)) ! (when (and (file-exists-p file) ! (or (file-directory-p file) ! (not (zerop (nth 7 (file-attributes file)))))) ! (insert (format "221 %d Article retrieved.\n" article)) ! (nneething-insert-head file) ! (insert ".\n")) ! (incf count) (and large (zerop (% count 20)) (message "nneething: Receiving headers... %d%%" (/ (* count 100) number)))) ! (when large ! (message "nneething: Receiving headers...done")) ! (nnheader-fold-continuation-lines) 'headers)))) (defun nneething-open-server (server &optional defs) ! (nnheader-report 'nneething "") (nnheader-init-server-buffer)) (defun nneething-close-server (&optional server) + (setq nneething-current-directory nil) t) (defun nneething-server-opened (&optional server) ! nneething-current-directory) (defun nneething-status-message (&optional server) nneething-status-string) ! (defun nneething-request-article (id &optional group server buffer) ! (nneething-possibly-change-directory group) ! (let ((file (unless (stringp id) (nneething-file-name id))) (nntp-server-buffer (or buffer nntp-server-buffer))) (and (stringp file) ; We did not request by Message-ID. (file-exists-p file) ; The file exists. *************** *** 146,187 **** (defun nneething-request-group (group &optional dir dont-check) (nneething-possibly-change-directory group dir) ! (or dont-check (nneething-create-mapping)) ! (save-excursion ! (set-buffer nntp-server-buffer) ! (erase-buffer) (if (> (car nneething-active) (cdr nneething-active)) ! (insert (format "211 0 1 0 %s\n" group)) ! (insert (format "211 %d %d %d %s\n" ! (- (1+ (cdr nneething-active)) (car nneething-active)) ! (car nneething-active) (cdr nneething-active) ! group))) ! t)) (defun nneething-request-list (&optional server dir) ! (save-excursion ! (set-buffer nntp-server-buffer) ! (erase-buffer)) ! nil) (defun nneething-request-newgroups (date &optional server) ! (save-excursion ! (set-buffer nntp-server-buffer) ! (erase-buffer)) ! nil) ! (defun nneething-request-post (&optional server) ! (mail-send-and-exit nil)) (defun nneething-close-group (group &optional server) t) ;;; Internal functions. (defun nneething-possibly-change-directory (group &optional dir) ! (if (not group) ! () (if (and nneething-group (string= group nneething-group)) t --- 147,181 ---- (defun nneething-request-group (group &optional dir dont-check) (nneething-possibly-change-directory group dir) ! (unless dont-check ! (nneething-create-mapping) (if (> (car nneething-active) (cdr nneething-active)) ! (nnheader-insert "211 0 1 0 %s\n" group) ! (nnheader-insert ! "211 %d %d %d %s\n" ! (- (1+ (cdr nneething-active)) (car nneething-active)) ! (car nneething-active) (cdr nneething-active) ! group))) ! t) (defun nneething-request-list (&optional server dir) ! (nnheader-report 'nneething "LIST is not implemented.")) (defun nneething-request-newgroups (date &optional server) ! (nnheader-report 'nneething "NEWSGROUPS is not implemented.")) ! (defun nneething-request-type (group &optional article) ! 'unknown) (defun nneething-close-group (group &optional server) + (setq nneething-current-directory nil) t) ;;; Internal functions. (defun nneething-possibly-change-directory (group &optional dir) ! (when group (if (and nneething-group (string= group nneething-group)) t *************** *** 197,210 **** (setq nneething-map nil) (setq nneething-active (cons 1 0)) (nneething-create-mapping) ! (setq nneething-group-alist ! (cons (list group dir nneething-map nneething-active) ! nneething-group-alist))))))) (defun nneething-map-file () ;; We make sure that the .nneething directory exists. ! (or (file-exists-p nneething-map-file-directory) ! (make-directory nneething-map-file-directory 'parents)) ;; We store it in a special directory under the user's home dir. (concat (file-name-as-directory nneething-map-file-directory) nneething-group nneething-map-file)) --- 191,203 ---- (setq nneething-map nil) (setq nneething-active (cons 1 0)) (nneething-create-mapping) ! (push (list group dir nneething-map nneething-active) ! nneething-group-alist)))))) (defun nneething-map-file () ;; We make sure that the .nneething directory exists. ! (unless (file-exists-p nneething-map-file-directory) ! (make-directory nneething-map-file-directory 'parents)) ;; We store it in a special directory under the user's home dir. (concat (file-name-as-directory nneething-map-file-directory) nneething-group nneething-map-file)) *************** *** 276,301 **** (write-region (point-min) (point-max) map-file nil 'nomesg) (kill-buffer (current-buffer)))))) - (defvar nneething-message-id-number 0) - (defvar nneething-work-buffer " *nneething work*") - (defun nneething-insert-head (file) ! (and (nneething-get-head file) ! (insert-buffer-substring nneething-work-buffer))) (defun nneething-make-head (file) (let ((atts (file-attributes file))) ! (insert "Subject: " (file-name-nondirectory file) "\n" ! "Message-ID: \n" ! "Date: " (current-time-string (nth 5 atts)) "\n" ! (nneething-from-line (nth 2 atts)) ! "Chars: " (int-to-string (nth 7 atts)) "\n"))) (defun nneething-from-line (uid) (let ((login (condition-case nil (user-login-name uid) (error --- 269,293 ---- (write-region (point-min) (point-max) map-file nil 'nomesg) (kill-buffer (current-buffer)))))) (defun nneething-insert-head (file) ! "Insert the head of FILE." ! (when (nneething-get-head file) ! (insert-buffer-substring nneething-work-buffer))) (defun nneething-make-head (file) + "Create a head by looking at the file attributes of FILE." (let ((atts (file-attributes file))) ! (insert ! "Subject: " (file-name-nondirectory file) "\n" ! "Message-ID: \n" ! "Date: " (current-time-string (nth 5 atts)) "\n" ! (nneething-from-line (nth 2 atts)) ! "Chars: " (int-to-string (nth 7 atts)) "\n"))) (defun nneething-from-line (uid) + "Return a From header based of UID." (let ((login (condition-case nil (user-login-name uid) (error *************** *** 311,316 **** --- 303,309 ---- (if name (concat " (" name ")") "") "\n"))) (defun nneething-get-head (file) + "Either find the head in FILE or make a head for FILE." (save-excursion (set-buffer (get-buffer-create nneething-work-buffer)) (setq case-fold-search nil) *************** *** 340,345 **** --- 333,339 ---- t)))) (defun nneething-file-name (article) + "Return the file name of ARTICLE." (concat (file-name-as-directory nneething-directory) (if (numberp article) (cadr (assq article nneething-map)) *** pub/sgnus/lisp/nnheader.el Mon Feb 5 19:15:38 1996 --- sgnus/lisp/nnheader.el Thu Feb 8 08:41:27 1996 *************** *** 308,313 **** --- 308,337 ---- (erase-buffer) (current-buffer)) + (defmacro nnheader-temp-write (file &rest forms) + "Create a new buffer, evaluate FORM there, and write the buffer to FILE." + `(save-excursion + (let ((nnheader-temp-file ,file) + (nnheader-temp-cur-buffer + (nnheader-set-temp-buffer + (generate-new-buffer-name " *nnheader temp*")))) + (unless (file-directory-p (file-name-directory nnheader-temp-file)) + (make-directory (file-name-directory nnheader-temp-file) t)) + (unwind-protect + (prog1 + (progn + ,@forms) + (when nnheader-temp-file + (set-buffer nnheader-temp-cur-buffer) + (write-region (point-min) (point-max) + nnheader-temp-file nil 'nomesg))) + (when (buffer-name nnheader-temp-cur-buffer) + (kill-buffer nnheader-temp-cur-buffer)))))) + + (put 'nnheader-temp-write 'lisp-indent-function 1) + (put 'nnheader-temp-write 'lisp-indent-hook 1) + (put 'nnheader-temp-write 'edebug-form-spec '(file &rest form)) + (defvar jka-compr-compression-info-list) (defvar nnheader-numerical-files (if (boundp 'jka-compr-compression-info-list) *** pub/sgnus/lisp/nnkiboze.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnkiboze.el Tue Feb 6 20:27:55 1996 *************** *** 33,38 **** --- 33,39 ---- (require 'nnheader) (require 'gnus) (require 'gnus-score) + (eval-when-compile (require 'cl)) (defvar nnkiboze-directory (expand-file-name (or gnus-article-save-directory "~/News/")) *** pub/sgnus/lisp/nnmail.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnmail.el Fri Feb 9 09:52:44 1996 *************** *** 311,334 **** (defun nnmail-days-to-time (days) "Convert DAYS into time." ! (let ((seconds (* 1.0 days 60 60 24)) ! (rest (expt 2 16))) ! (list (round (/ seconds rest)) ! ;;;!!!Error error error. I'm not a mathematician, though. ! (condition-case () ! (% (round seconds) rest) ! (error 0))))) (defun nnmail-time-since (time) "Return the time since TIME, which is either an internal time or a date." (let* ((current (current-time)) ! rest) ! (when (stringp time) ! (setq time (nnmail-date-to-time time))) ! (setq rest (if (< (nth 1 current) (nth 1 time)) (expt 2 16))) ! (setcar (cdr time) (- (+ (or rest 0) (nth 1 current)) (nth 1 time))) ! (setcar time (- (+ (car current) (if rest -1 0)) (car time))) ! time)) ;; Function taken from rmail.el. (defun nnmail-move-inbox (inbox) --- 311,330 ---- (defun nnmail-days-to-time (days) "Convert DAYS into time." ! (let* ((seconds (* 1.0 days 60 60 24)) ! (rest (expt 2 16)) ! (ms (round (/ seconds rest)))) ! (list ms (round (- seconds (* ms rest)))))) (defun nnmail-time-since (time) "Return the time since TIME, which is either an internal time or a date." + (when (stringp time) + ;; Convert date strings to internal time. + (setq time (nnmail-date-to-time time))) (let* ((current (current-time)) ! (rest (if (< (nth 1 current) (nth 1 time)) (expt 2 16)))) ! (list (- (+ (car current) (if rest -1 0)) (car time)) ! (- (+ (or rest 0) (nth 1 current)) (nth 1 time))))) ;; Function taken from rmail.el. (defun nnmail-move-inbox (inbox) *** pub/sgnus/lisp/nnmbox.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnmbox.el Tue Feb 6 20:27:54 1996 *************** *** 32,37 **** --- 32,38 ---- (require 'nnheader) (require 'rmail) (require 'nnmail) + (eval-when-compile (require 'cl)) (defvar nnmbox-mbox-file (expand-file-name "~/mbox") "The name of the mail box file in the user's home directory.") *** pub/sgnus/lisp/nnml.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnml.el Fri Feb 9 09:52:44 1996 *************** *** 309,318 **** (nnml-nov-delete-article newsgroup number)) (push number rest)))) (let ((active (nth 1 (assoc newsgroup nnml-group-alist)))) ! (and active ! (setcar active (or (and active-articles ! (apply 'min active-articles)) ! 0))) (nnmail-save-active nnml-group-alist nnml-active-file)) (nnml-save-nov) (message "") --- 309,318 ---- (nnml-nov-delete-article newsgroup number)) (push number rest)))) (let ((active (nth 1 (assoc newsgroup nnml-group-alist)))) ! (when active ! (setcar active (or (and active-articles ! (apply 'min active-articles)) ! (1+ (cdr active))))) (nnmail-save-active nnml-group-alist nnml-active-file)) (nnml-save-nov) (message "") *** pub/sgnus/lisp/nnsoup.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnsoup.el Thu Feb 8 17:35:01 1996 *************** *** 103,109 **** (let ((areas (cddr (assoc nnsoup-current-group nnsoup-group-alist))) (articles sequence) (use-nov t) ! useful-areas this-area-seq) (if (stringp (car sequence)) ;; We don't support fetching by Message-ID. 'headers --- 103,109 ---- (let ((areas (cddr (assoc nnsoup-current-group nnsoup-group-alist))) (articles sequence) (use-nov t) ! useful-areas this-area-seq msg-buf) (if (stringp (car sequence)) ;; We don't support fetching by Message-ID. 'headers *************** *** 148,165 **** (while useful-areas (goto-char (point-max)) (let ((b (point)) ! (number (car (nth 1 (car useful-areas))))) ! (insert-buffer-substring ! (nnsoup-index-buffer ! (gnus-soup-area-prefix ! (nth 2 (car useful-areas))))) ! (goto-char b) ! ;; We have to remove the index number entires and ! ;; insert article numbers instead. ! (while (looking-at "[0-9]+") ! (replace-match (int-to-string number) t t) ! (incf number) ! (forward-line 1))) (setq useful-areas (cdr useful-areas))) 'nov) ;; We insert HEADs. --- 148,166 ---- (while useful-areas (goto-char (point-max)) (let ((b (point)) ! (number (car (nth 1 (car useful-areas)))) ! (index-buffer (nnsoup-index-buffer ! (gnus-soup-area-prefix ! (nth 2 (car useful-areas)))))) ! (when index-buffer ! (insert-buffer-substring index-buffer) ! (goto-char b) ! ;; We have to remove the index number entires and ! ;; insert article numbers instead. ! (while (looking-at "[0-9]+") ! (replace-match (int-to-string number) t t) ! (incf number) ! (forward-line 1)))) (setq useful-areas (cdr useful-areas))) 'nov) ;; We insert HEADs. *************** *** 167,185 **** (setq articles (car (car useful-areas)) useful-areas (cdr useful-areas)) (while articles ! (goto-char (point-max)) ! (insert (format "221 %d Article retrieved.\n" (car articles))) ! (insert-buffer-substring ! (nnsoup-narrow-to-article ! (car articles) (cdr (car useful-areas)) 'head)) ! (goto-char (point-max)) ! (insert ".\n") (setq articles (cdr articles)))) ! ;; Fold continuation lines. ! (goto-char (point-min)) ! (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) ! (replace-match " " t t)) 'headers))))) (defun nnsoup-open-server (server &optional defs) --- 168,184 ---- (setq articles (car (car useful-areas)) useful-areas (cdr useful-areas)) (while articles ! (when (setq msg-buf ! (nnsoup-narrow-to-article ! (car articles) (cdr (car useful-areas)) 'head)) ! (goto-char (point-max)) ! (insert (format "221 %d Article retrieved.\n" (car articles))) ! (insert-buffer-substring msg-buf) ! (goto-char (point-max)) ! (insert ".\n")) (setq articles (cdr articles)))) ! (nnheader-fold-continuation-lines) 'headers))))) (defun nnsoup-open-server (server &optional defs) *************** *** 406,411 **** --- 405,411 ---- (while (setq area (pop areas)) ;; Change the name to the permanent name and move the files. (setq cur-prefix (nnsoup-next-prefix)) + (message "Incorporating file %s..." cur-prefix) (when (file-exists-p (setq file (concat nnsoup-tmp-directory (gnus-soup-area-prefix area) ".IDX"))) *************** *** 427,438 **** nnsoup-group-alist) ;; There are already articles in this group, so we add this ;; info to the end of the entry. ! (let ((e (cddr entry))) ! (while (cdr e) ! (setq e (cdr e))) ! (setcdr e (list (list (cons (setq lnum (1+ (cdr (car (car e))))) ! (+ lnum number)) ! area)))) (setcdr (cadr entry) (+ lnum number))))) (nnsoup-write-active-file))) --- 427,435 ---- nnsoup-group-alist) ;; There are already articles in this group, so we add this ;; info to the end of the entry. ! (nconc entry (list (list (cons (1+ (setq lnum (cdadr entry))) ! (+ lnum number)) ! area))) (setcdr (cadr entry) (+ lnum number))))) (nnsoup-write-active-file))) *************** *** 462,473 **** (let* ((file (concat prefix (if message ".MSG" ".IDX"))) (buffer-name (concat " *nnsoup " file "*"))) (or (get-buffer buffer-name) ; File aready loaded. ! (save-excursion ; Load the file. ! (set-buffer (get-buffer-create buffer-name)) ! (buffer-disable-undo (current-buffer)) ! (push (cons nnsoup-current-group (current-buffer)) nnsoup-buffers) ! (insert-file-contents (concat nnsoup-directory file)) ! (current-buffer))))) (defun nnsoup-file (prefix &optional message) (expand-file-name --- 459,471 ---- (let* ((file (concat prefix (if message ".MSG" ".IDX"))) (buffer-name (concat " *nnsoup " file "*"))) (or (get-buffer buffer-name) ; File aready loaded. ! (when (file-exists-p (concat nnsoup-directory file)) ! (save-excursion ; Load the file. ! (set-buffer (get-buffer-create buffer-name)) ! (buffer-disable-undo (current-buffer)) ! (push (cons nnsoup-current-group (current-buffer)) nnsoup-buffers) ! (insert-file-contents (concat nnsoup-directory file)) ! (current-buffer)))))) (defun nnsoup-file (prefix &optional message) (expand-file-name *************** *** 493,502 **** (defun nnsoup-narrow-to-article (article &optional area head) (let* ((area (or area (nnsoup-article-to-area article nnsoup-current-group))) (prefix (gnus-soup-area-prefix (nth 1 area))) ! beg end msg-buf) ! (setq msg-buf (nnsoup-index-buffer prefix 'msg)) (save-excursion (cond ;; We use the index file to find out where the article begins and ends. ((and (= (gnus-soup-encoding-index (gnus-soup-area-encoding (nth 1 area))) --- 491,504 ---- (defun nnsoup-narrow-to-article (article &optional area head) (let* ((area (or area (nnsoup-article-to-area article nnsoup-current-group))) (prefix (gnus-soup-area-prefix (nth 1 area))) ! (msg-buf (nnsoup-index-buffer prefix 'msg)) ! beg end) (save-excursion (cond + ;; There is no MSG file. + ((null msg-buf) + nil) + ;; We use the index file to find out where the article begins and ends. ((and (= (gnus-soup-encoding-index (gnus-soup-area-encoding (nth 1 area))) *************** *** 581,586 **** --- 583,591 ---- (setq areas (cdr areas))) (and areas (car areas)))) + (defvar nnsoup-old-functions + (list gnus-inews-article-function send-mail-function)) + ;;;###autoload (defun nnsoup-set-variables () "Use the SOUP methods for posting news and mailing mail." *************** *** 588,593 **** --- 593,605 ---- (setq gnus-inews-article-function 'nnsoup-request-post) (setq send-mail-function 'nnsoup-request-mail)) + ;;;###autoload + (defun nnsoup-revert-variables () + "Revert posting and mailing methods to the standard Emacs methods." + (interactive) + (setq gnus-inews-article-function (car nnsoup-old-functions)) + (setq send-mail-function (cadr nnsoup-old-functions))) + (defun nnsoup-store-reply (kind) ;; Mostly stolen from `sendmail.el'. (let ((tembuf (generate-new-buffer " sendmail temp")) *************** *** 649,654 **** --- 661,667 ---- (while (re-search-forward "^#! *rnews" nil t) (incf num))) (message "Stored %d messages" num))) + (nnsoup-write-replies) (kill-buffer tembuf)))) (defun nnsoup-kind-to-prefix (kind) *** pub/sgnus/lisp/nnspool.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnspool.el Tue Feb 6 20:27:52 1996 *************** *** 29,34 **** --- 29,35 ---- (require 'nnheader) (require 'nntp) (require 'timezone) + (eval-when-compile (require 'cl)) (defvar nnspool-inews-program news-inews-program "Program to post news. *** pub/sgnus/lisp/nntp.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nntp.el Fri Feb 9 05:45:56 1996 *************** *** 29,34 **** --- 29,35 ---- (require 'rnews) (require 'sendmail) (require 'nnheader) + (eval-when-compile (require 'cl)) (eval-and-compile (unless (fboundp 'open-network-stream) *************** *** 424,430 **** (defun nntp-server-opened (&optional server) "Say whether a connection to SERVER has been opened." ! (and (equal server nntp-current-server) nntp-server-buffer (buffer-name nntp-server-buffer) nntp-server-process --- 425,432 ---- (defun nntp-server-opened (&optional server) "Say whether a connection to SERVER has been opened." ! (and (or (not server) ! (equal server nntp-current-server)) nntp-server-buffer (buffer-name nntp-server-buffer) nntp-server-process *************** *** 693,700 **** (when proc (delete-process (process-name proc))) (nntp-close-server server) ! (setq nntp-status-string ! (message "Connection timed out to server %s." server)) (ding) (sit-for 1))) --- 695,702 ---- (when proc (delete-process (process-name proc))) (nntp-close-server server) ! (nnheader-report ! 'nntp (message "Connection timed out to server %s" server)) (ding) (sit-for 1))) *************** *** 1058,1076 **** (nntp-wait-for-response "^[23].*\r?\n" 'slow) (error nil) (quit nil))) ! (or status (nntp-close-server-internal server)) ! (and nntp-server-process ! (progn ! (set-process-sentinel ! nntp-server-process 'nntp-default-sentinel) ! ;; You can send commands at startup like AUTHINFO here. ! ;; Added by Hallvard B Furuseth ! (run-hooks 'nntp-server-opened-hook)))) ((null server) ! (setq nntp-status-string "NNTP server is not specified.")) (t ; We couldn't open the server. ! (setq nntp-status-string ! (buffer-substring (point-min) (point-max))))) (and timer (cancel-timer timer)) (message "") (or status --- 1060,1080 ---- (nntp-wait-for-response "^[23].*\r?\n" 'slow) (error nil) (quit nil))) ! (unless status ! (nntp-close-server-internal server) ! (nnheader-report ! 'nntp "Couldn't open connection to %s" server)) ! (when nntp-server-process ! (set-process-sentinel ! nntp-server-process 'nntp-default-sentinel) ! ;; You can send commands at startup like AUTHINFO here. ! ;; Added by Hallvard B Furuseth ! (run-hooks 'nntp-server-opened-hook))) ((null server) ! (nnheader-report 'nntp "NNTP server is not specified.")) (t ; We couldn't open the server. ! (nnheader-report ! 'nntp (buffer-substring (point-min) (point-max))))) (and timer (cancel-timer timer)) (message "") (or status *** pub/sgnus/lisp/nnvirtual.el Mon Feb 5 19:15:39 1996 --- sgnus/lisp/nnvirtual.el Wed Feb 7 05:24:47 1996 *************** *** 276,282 **** "Return the real group and article for virtual GROUP and ARTICLE." (nnvirtual-possibly-change-group group nil t) (let ((mart (assq article nnvirtual-mapping))) ! (cons (cadr mart) (caddr mart)))) ;;; Internal functions. --- 276,283 ---- "Return the real group and article for virtual GROUP and ARTICLE." (nnvirtual-possibly-change-group group nil t) (let ((mart (assq article nnvirtual-mapping))) ! (when mart ! (cons (cadr mart) (caddr mart))))) ;;; Internal functions. *** pub/sgnus/lisp/ChangeLog Mon Feb 5 19:15:46 1996 --- sgnus/lisp/ChangeLog Fri Feb 9 10:26:14 1996 *************** *** 1,9 **** --- 1,136 ---- + Fri Feb 9 09:56:45 1996 Lars Magne Ingebrigtsen + + * gnus-picon.el (gnus-picons-convert-x-face): Changed to use + pbmplus, + + * gnus.el (gnus-buffer-configuration): One quote too many. + + * gnus-kill.el (gnus-execute): Allow searching bodies. + + * gnus.el (gnus-summary-execute-command): Accept "Body" searches. + + Fri Feb 9 09:44:04 1996 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-time-since): Reversed time. + + * nnml.el (nnml-request-expire-articles): Set lower limit + correctly. + + Fri Feb 9 05:40:39 1996 Lars Ingebrigtsen + + * nntp.el (nntp-open-server-semi-internal): Report errors better. + + Thu Feb 8 00:36:09 1996 Lars Ingebrigtsen + + * gnus.el (gnus-group-jump-to-group): Don't jump to ephemeral + groups. + (gnus-summary-catchup-and-goto-next-group): Allow quiet going. + + * gnus-topic.el (gnus-topic-move-group): Allow removal of groups. + (gnus-topic-remove-group): New command and keystroke. + + * nnsoup.el (nnsoup-read-areas): Message. + + * nndoc.el (nndoc-possibly-change-buffer): Return nil when the + file doesn't exist. + (nndoc-close-server): Really close. + + * gnus.el (gnus-update-format-specifications): Would not update + format specs. + + * gnus-topic.el (gnus-topic-remove-topic): Accept a list-level. + (gnus-group-prepare-topics): List dead groups. + + Wed Feb 7 00:04:23 1996 Lars Ingebrigtsen + + * gnus.el (gnus-summary-hide-thread): Hide the last thread. + + * gnus-kill.el (gnus-kill): Provide. + (gnus-execute-1): Accept forms. + + * nnheader.el (nnheader-temp-write): New macro. + + * gnus-soup.el (gnus-soup-group-brew): Pack ticked. + (gnus-soup-write-replies): Be silent. + + * gnus-msg.el (gnus-bug-mail-send-and-exit): Kill gnus-bug buffer + after sending. + + * gnus.el (gnus-setup-news): Find new newsgroups even if + gnus-read-active-file is nil. + + * gnus-soup.el (gnus-soup-group-brew): Would pack too few + articles. + + * nneething.el (nneething-request-type): New function. + (nneething-request-post): Removed. + + * nnvirtual.el (nnvirtual-find-group-art): Never return `(nil)'. + + * nndoc.el (nndoc-rnews-body-end): Really go to the end. + + * nnsoup.el (nnsoup-read-areas): Would calculate new article + boundary +1. + (nnsoup-index-buffer): Check whether the file exists before + reading it. + (nnsoup-retrieve-headers): Ditto. + + * gnus-topic.el (gnus-topic-goto-missing-group): New function. + + Tue Feb 6 22:33:50 1996 Lars Ingebrigtsen + + * gnus.el (gnus-goto-missing-group-function): New variable. + + * nnmail.el (nnmail-time-since): Don't alter time. + (nnmail-days-to-time): Would give wrong result. + + * gnus.el (gnus-article-de-quoted-unreadable): Decode headers + before body. + + Tue Feb 6 09:51:14 1996 Morioka Tomohiko + + * gnus.el (gnus-article-show-hidden-text): Don't use `(1+ + (point))'. It does not work in Mule. + + Mon Feb 5 13:03:47 1996 Wes Hardaker + + * gnus-picon.el (gnus-group-display-picons): Delete buffer on exit. + (gnus-article-display-picons): Ditto. + + Tue Feb 6 00:26:44 1996 Lars Ingebrigtsen + + * gnus-salt.el (gnus-tree-recenter): Recenter the tree buffer. + + * gnus-cite.el (gnus-article-toggle-cited-text): Bind + `buffer-read-only'. + + * gnus.el (gnus-configure-windows): Don't search all frames unless + when using a frame split. + (gnus-summary-mode-map): Change `W t'. + + Mon Feb 5 23:41:09 1996 Lars Ingebrigtsen + + * gnus-score.el (gnus-short-name-score-file-cache): New variable. + (gnus-score-score-files): Use it. + (gnus-score-flush-cache): Ditto. + + Mon Feb 4 23:55:30 1996 Morioka Tomohiko + + * gnus.el (gnus-configure-windows): Check minibuffer only frame. + + Mon Feb 5 22:36:24 1996 Lars Ingebrigtsen + + * nnsoup.el (nnsoup-old-functions): New variable. + (nnsoup-revert-variables): New command. + Mon Feb 5 17:54:07 1996 Lars Magne Ingebrigtsen * nnvirtual.el (nnvirtual-update-marked): Copy empty mark lists. * gnus.el (gnus-summary-read-group): Allow entry with no-display. + * gnus.el: 0.36 is released. + Sat Feb 3 11:56:53 1996 Steven L. Baur * gnus-uu.el (gnus-uu-default-view-rules): Added rule for playing of *************** *** 38,43 **** --- 165,172 ---- * gnus.el (gnus-summary-edit-article): Make sure we're in the summary buffer. + + * gnus.el: 0.35 is released. Sun Feb 4 14:05:20 1996 Lars Magne Ingebrigtsen *** pub/sgnus/texi/gnus.texi Mon Feb 5 19:15:48 1996 --- sgnus/texi/gnus.texi Thu Feb 8 19:22:37 1996 *************** *** 334,340 **** distribution point for the new and spiffy versions of Gnus, also know as The Site That Destroys Newsrcs And Drives People Mad. ! During the first extended alpha period of develpment, the new Gnus was called ``(ding) Gnus''. @dfn{(ding)}, is, of course, short for @dfn{ding is not Gnus}, which is a total and utter lie, but who cares? (Besides, the ``Gnus'' in this abbreviation should probably be pronounced ``news'' as --- 334,340 ---- distribution point for the new and spiffy versions of Gnus, also know as The Site That Destroys Newsrcs And Drives People Mad. ! During the first extended alpha period of development, the new Gnus was called ``(ding) Gnus''. @dfn{(ding)}, is, of course, short for @dfn{ding is not Gnus}, which is a total and utter lie, but who cares? (Besides, the ``Gnus'' in this abbreviation should probably be pronounced ``news'' as *************** *** 343,349 **** In any case, after spending all that energy with coming up with a new and spiffy name, we decided that the name was @emph{too} spiffy, so we ! renamamed it back again to ``Gnus''. But in mixed case. ``Gnus'' vs. ``@sc{gnus}''. New vs. old. Incidentally, the next Gnus generation will be called ``September Gnus'', --- 343,349 ---- In any case, after spending all that energy with coming up with a new and spiffy name, we decided that the name was @emph{too} spiffy, so we ! renamed it back again to ``Gnus''. But in mixed case. ``Gnus'' vs. ``@sc{gnus}''. New vs. old. Incidentally, the next Gnus generation will be called ``September Gnus'', *************** *** 496,502 **** @end table ! If you ever see Gnus act noncompliantly to the texts mentioned above, don't hesitate to drop a note to Gnus Towers and let us know. --- 496,502 ---- @end table ! If you ever see Gnus act non-compliantly to the texts mentioned above, don't hesitate to drop a note to Gnus Towers and let us know. *************** *** 602,613 **** @item Brian Edmonds has written @code{gnus-bbdb}. @item ! Ricardo Nassif did the proof-reading. @item Kevin Davidson came up with the name @dfn{ding}, so blame him. @item Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel ! Quinlan, Frank D. Cringle, Geoffrey T. Dairiki and Andrew Eskilsson have all contributed code and suggestions. @end itemize --- 602,613 ---- @item Brian Edmonds has written @code{gnus-bbdb}. @item ! Ricardo Nassif and Mark Borges did the proff-reading (sic). @item Kevin Davidson came up with the name @dfn{ding}, so blame him. @item Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel ! Quinlan, Frank D. Cringle, Geoffrey T. Dairiki, and Andrew Eskilsson have all contributed code and suggestions. @end itemize *************** *** 928,934 **** Gnus will see whether @code{gnus-nntpserver-file} (default @file{/etc/nntpserver}) has any opinions in the matter. It that fails as well, Gnus will will try to use the machine that is running Emacs as ! an @sc{nntp} server. That's a longshot, though. @vindex gnus-nntp-server If @code{gnus-nntp-server} is set, this variable will override --- 928,934 ---- Gnus will see whether @code{gnus-nntpserver-file} (default @file{/etc/nntpserver}) has any opinions in the matter. It that fails as well, Gnus will will try to use the machine that is running Emacs as ! an @sc{nntp} server. That's a long-shot, though. @vindex gnus-nntp-server If @code{gnus-nntp-server} is set, this variable will override *************** *** 1048,1054 **** information from all of them. (The slave files will be read in the sequence they were created, so the latest changes will have precedence.) ! Information from the slave files has, of course, presedence over the information in the normal (i. e., master) @code{.newsrc} file. --- 1048,1054 ---- information from all of them. (The slave files will be read in the sequence they were created, so the latest changes will have precedence.) ! Information from the slave files has, of course, precedence over the information in the normal (i. e., master) @code{.newsrc} file. *************** *** 1060,1066 **** group and I don't care whether Gnus has been started or not''. This is perhaps more useful for people who write code than for users, but the command @code{gnus-fetch-group} provides this functionality in any ! case. It takes the group name as a paramenter. @node New Groups --- 1060,1066 ---- group and I don't care whether Gnus has been started or not''. This is perhaps more useful for people who write code than for users, but the command @code{gnus-fetch-group} provides this functionality in any ! case. It takes the group name as a parameter. @node New Groups *************** *** 1142,1148 **** @vindex gnus-auto-subscribed-groups Yet another variable that meddles here is @code{gnus-auto-subscribed-groups}. It works exactly like ! @code{gnus-options-subscribe}, and is therefore really superfluos, but I thought it would be nice to have two of these. This variable is more meant for setting some ground rules, while the other variable is used more for user fiddling. By default this variable makes all new groups --- 1142,1148 ---- @vindex gnus-auto-subscribed-groups Yet another variable that meddles here is @code{gnus-auto-subscribed-groups}. It works exactly like ! @code{gnus-options-subscribe}, and is therefore really superfluous, but I thought it would be nice to have two of these. This variable is more meant for setting some ground rules, while the other variable is used more for user fiddling. By default this variable makes all new groups *************** *** 1895,1902 **** @code{t} by default. If it is @code{nil}, inactive groups won't be listed. ! @vindex gnus-group-use-permament-levels ! If @code{gnus-group-use-permament-levels} is non-@code{nil}, once you give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will use this level as the ``work'' level. --- 1895,1902 ---- @code{t} by default. If it is @code{nil}, inactive groups won't be listed. ! @vindex gnus-group-use-permanent-levels ! If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will use this level as the ``work'' level. *************** *** 2080,2086 **** @vindex gnus-group-recent-archive-directory Make a Gnus archive group (@code{gnus-group-make-archive-group}). By default a group pointing to the most recent articles will be created ! (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full group will be created from from @code{gnus-group-archive-directory}. @item G k --- 2080,2086 ---- @vindex gnus-group-recent-archive-directory Make a Gnus archive group (@code{gnus-group-make-archive-group}). By default a group pointing to the most recent articles will be created ! (@code{gnus-group-recent-archive-directory}), but given a prefix, a full group will be created from from @code{gnus-group-archive-directory}. @item G k *************** *** 2508,2514 **** didn't think much about it---a backend to read directories. Big deal. @code{ange-ftp} changes that picture dramatically. For instance, if you ! enter @file{"/ftp@@sina.tcamc.uh.edu:/pub/emacs/ding-list/"} as the the directory name, ange-ftp will actually allow you to read this directory over at @samp{sina} as a newsgroup. Distributed news ahoy! --- 2508,2514 ---- didn't think much about it---a backend to read directories. Big deal. @code{ange-ftp} changes that picture dramatically. For instance, if you ! enter @file{"/ftp.hpc.uh.edu:/pub/emacs/ding-list/"} as the the directory name, ange-ftp will actually allow you to read this directory over at @samp{sina} as a newsgroup. Distributed news ahoy! *************** *** 2642,2648 **** that. Say you have an old @file{RMAIL} file with mail that you now want to split into your new @code{nnml} groups. You look at that file using @code{nndoc}, set the process mark on all the articles in the buffer ! (@kbd{M P b}, for instance), and then respool (@kbd{B r}) using @code{nnml}. If all goes well, all the mail in the @file{RMAIL} file is now also stored in lots of @code{nnml} directories, and you can delete that pesky @file{RMAIL} file. If you have the guts! --- 2642,2648 ---- that. Say you have an old @file{RMAIL} file with mail that you now want to split into your new @code{nnml} groups. You look at that file using @code{nndoc}, set the process mark on all the articles in the buffer ! (@kbd{M P b}, for instance), and then re-spool (@kbd{B r}) using @code{nnml}. If all goes well, all the mail in the @file{RMAIL} file is now also stored in lots of @code{nnml} directories, and you can delete that pesky @file{RMAIL} file. If you have the guts! *************** *** 2654,2660 **** @vindex nndoc-article-type This should be one of @code{mbox}, @code{babyl}, @code{digest}, @code{mmdf}, @code{forward}, @code{news}, @code{rnews}, ! @code{mime-difest}, @code{clari-briefs}, or @code{guess}. @item nndoc-post-type @vindex nndoc-post-type --- 2654,2660 ---- @vindex nndoc-article-type This should be one of @code{mbox}, @code{babyl}, @code{digest}, @code{mmdf}, @code{forward}, @code{news}, @code{rnews}, ! @code{mime-digest}, @code{clari-briefs}, or @code{guess}. @item nndoc-post-type @vindex nndoc-post-type *************** *** 2675,2681 **** Of course, us Unix Weenie types of human beans use things like @code{uucp} and, like, @code{nntpd} and set up proper news and mail ! transport things like Ghod inteded. And then we just use normal newsreaders. However, it can sometimes be convenient to do something a that's a bit --- 2675,2681 ---- Of course, us Unix Weenie types of human beans use things like @code{uucp} and, like, @code{nntpd} and set up proper news and mail ! transport things like Ghod intended. And then we just use normal newsreaders. However, it can sometimes be convenient to do something a that's a bit *************** *** 2805,2811 **** @item gnus-soup-packet-directory @vindex gnus-soup-packet-directory ! Wehre Gnus will look for reply packets. The default is @file{~/}. @item gnus-soup-packet-regexp @vindex gnus-soup-packet-regexp --- 2805,2811 ---- @item gnus-soup-packet-directory @vindex gnus-soup-packet-directory ! Where Gnus will look for reply packets. The default is @file{~/}. @item gnus-soup-packet-regexp @vindex gnus-soup-packet-regexp *************** *** 2840,2846 **** @item nnsoup-replies-format-type @vindex nnsoup-replies-format-type The @sc{soup} format of the replies packets. The default is @samp{?n} ! (rnews), and I don't think you should touch that variable. I probaly shouldn't even have documented it. Drats! Too late! @item nnsoup-replies-index-type --- 2840,2846 ---- @item nnsoup-replies-format-type @vindex nnsoup-replies-format-type The @sc{soup} format of the replies packets. The default is @samp{?n} ! (rnews), and I don't think you should touch that variable. I probably shouldn't even have documented it. Drats! Too late! @item nnsoup-replies-index-type *************** *** 2951,2957 **** mail if you're not using a mail backend---you have to do a lot of magic invocations first. At the time when you have finished drawing the pentagram, lightened the candles, and sacrificed the goat, you really ! shouldn't be too suprised when Gnus moves your mail. @vindex nnmail-use-procmail If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will --- 2951,2957 ---- mail if you're not using a mail backend---you have to do a lot of magic invocations first. At the time when you have finished drawing the pentagram, lightened the candles, and sacrificed the goat, you really ! shouldn't be too surprised when Gnus moves your mail. @vindex nnmail-use-procmail If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will *************** *** 3037,3043 **** (setq nnmail-split-fancy '(| ;; Messages duplicates go to a separate group. ("gnus-warning" "duplication of message" "duplicate") ! ;; Message from deamons, postmaster, and the like to another. (any mail "mail.misc") ;; Other rules. [ ... ] )) --- 3037,3043 ---- (setq nnmail-split-fancy '(| ;; Messages duplicates go to a separate group. ("gnus-warning" "duplication of message" "duplicate") ! ;; Message from daemons, postmaster, and the like to another. (any mail "mail.misc") ;; Other rules. [ ... ] )) *************** *** 3776,3782 **** @end table @vindex gnus-permanently-visible-groups ! @cindex visible group paramenter Groups that match the @code{gnus-permanently-visible-groups} regexp will always be shown, whether they have unread articles or not. You can also add the @code{visible} element to the group parameters in question to --- 3776,3782 ---- @end table @vindex gnus-permanently-visible-groups ! @cindex visible group parameter Groups that match the @code{gnus-permanently-visible-groups} regexp will always be shown, whether they have unread articles or not. You can also add the @code{visible} element to the group parameters in question to *************** *** 3796,3802 **** @kindex C-c C-s (Group) @findex gnus-group-sort-groups @vindex gnus-group-sort-function ! The @kbd{C-c C-s} (@code{gnus-group-srot-groups}) command sorts the group buffer according to the function(s) given by the @code{gnus-group-sort-function} variable. Available sorting functions include: --- 3796,3802 ---- @kindex C-c C-s (Group) @findex gnus-group-sort-groups @vindex gnus-group-sort-function ! The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the group buffer according to the function(s) given by the @code{gnus-group-sort-function} variable. Available sorting functions include: *************** *** 4020,4026 **** @cindex unloading If you wish to completely unload Gnus and all its adherents, you can use the @code{gnus-unload} command. This command is also very handy when ! trying to custoize meta-variables. Note: --- 4020,4026 ---- @cindex unloading If you wish to completely unload Gnus and all its adherents, you can use the @code{gnus-unload} command. This command is also very handy when ! trying to customize meta-variables. Note: *************** *** 4140,4145 **** --- 4140,4152 ---- (@code{gnus-topic-copy-group}). This command understands the process/prefix convention (@pxref{Process/Prefix}). + @item T D + @kindex T D (Group) + @findex gnus-topic-remove-group + Remove a group from the current topic (@code{gnus-topic-remove-group}). + This command understands the process/prefix convention + (@pxref{Process/Prefix}). + @item T M @kindex T M (Group) @findex gnus-topic-move-matching *************** *** 4178,4184 **** @item C-y @kindex C-y (Group) @findex gnus-topic-yank-group ! Yank the previosuly killed group or topic (@code{gnus-topic-yank-group}). Note that all topics will be yanked before all groups. @item T r --- 4185,4191 ---- @item C-y @kindex C-y (Group) @findex gnus-topic-yank-group ! Yank the previously killed group or topic (@code{gnus-topic-yank-group}). Note that all topics will be yanked before all groups. @item T r *************** *** 4194,4200 **** @item A T @kindex A T (Group) @findex gnus-topic-list-active ! List all groups that Gnus knows about in a topicsified way (@code{gnus-topic-list-active}). @end table --- 4201,4207 ---- @item A T @kindex A T (Group) @findex gnus-topic-list-active ! List all groups that Gnus knows about in a topics-ified way (@code{gnus-topic-list-active}). @end table *************** *** 4651,4657 **** centered at all times. This makes things quite tidy, but if you have a slow network connection, or simply do not like this un-Emacsism, you can set this variable to @code{nil} to get the normal Emacs scrolling ! action. This will also inhibit horizontal recentering of the summary buffer, which might make it more inconvenient to read extremely long threads. --- 4658,4664 ---- centered at all times. This makes things quite tidy, but if you have a slow network connection, or simply do not like this un-Emacsism, you can set this variable to @code{nil} to get the normal Emacs scrolling ! action. This will also inhibit horizontal re-centering of the summary buffer, which might make it more inconvenient to read extremely long threads. *************** *** 4931,4937 **** headers of the message won't be altered---but lots of headers that say @samp{Resent-To}, @samp{Resent-From} and so on will be added. This means that you actually send a mail to someone that has a @samp{To} ! header that (proabbly) points to yourself. This will confuse people. So, natcherly you'll only do that if you're really eVIl. This command is mainly used if you have several accounts and want to --- 4938,4944 ---- headers of the message won't be altered---but lots of headers that say @samp{Resent-To}, @samp{Resent-From} and so on will be added. This means that you actually send a mail to someone that has a @samp{To} ! header that (probably) points to yourself. This will confuse people. So, natcherly you'll only do that if you're really eVIl. This command is mainly used if you have several accounts and want to *************** *** 5033,5039 **** @item gnus-forward-included-headers @vindex gnus-forward-included-headers Regexp matching header lines to be included in forwarded messages. It ! usese the same regexp as @code{gnus-visible-headers} by default. @end table --- 5040,5046 ---- @item gnus-forward-included-headers @vindex gnus-forward-included-headers Regexp matching header lines to be included in forwarded messages. It ! uses the same regexp as @code{gnus-visible-headers} by default. @end table *************** *** 5070,5076 **** @vindex gnus-mail-reply-method @item gnus-mail-reply-method ! This function is used to compose replies. The three functions avaibale are: @findex gnus-mail-reply-using-vm --- 5077,5083 ---- @vindex gnus-mail-reply-method @item gnus-mail-reply-method ! This function is used to compose replies. The three functions available are: @findex gnus-mail-reply-using-vm *************** *** 5087,5093 **** @vindex gnus-mail-forward-method @item gnus-mail-forward-method ! This function is used to forward messages. The three functions avaibale are: @findex gnus-mail-forward-using-vm --- 5094,5100 ---- @vindex gnus-mail-forward-method @item gnus-mail-forward-method ! This function is used to forward messages. The three functions available are: @findex gnus-mail-forward-using-vm *************** *** 5104,5110 **** @vindex gnus-mail-other-window-method @item gnus-mail-other-window-method ! This function is used to send mails. The three functions avaibale are: @findex gnus-mail-other-window-using-vm @findex gnus-mail-other-window-using-mhe --- 5111,5117 ---- @vindex gnus-mail-other-window-method @item gnus-mail-other-window-method ! This function is used to send mails. The three functions available are: @findex gnus-mail-other-window-using-vm @findex gnus-mail-other-window-using-mhe *************** *** 5505,5518 **** @item gnus-local-domain @vindex gnus-local-domain @cindex domain ! The local doman name excluding the host name. If your host is called @samp{"narfi.ifi.uio.no"}, then this variable should be @samp{"ifi.uio.no"}. @item gnus-local-domain @vindex gnus-local-domain @cindex domain ! The local doman name excluding the host name. If your host is called @samp{"narfi.ifi.uio.no"}, then this variable should be @samp{"ifi.uio.no"}. --- 5512,5525 ---- @item gnus-local-domain @vindex gnus-local-domain @cindex domain ! The local domain name excluding the host name. If your host is called @samp{"narfi.ifi.uio.no"}, then this variable should be @samp{"ifi.uio.no"}. @item gnus-local-domain @vindex gnus-local-domain @cindex domain ! The local domain name excluding the host name. If your host is called @samp{"narfi.ifi.uio.no"}, then this variable should be @samp{"ifi.uio.no"}. *************** *** 5556,5562 **** @findex gnus-mailing-list-groups @cindex mailing lists ! If your newsserver offer groups that are really mailing lists that are gatewayed to the @sc{nntp} server, you can read those groups without problems, but you can't post/followup to them without some difficulty. One solution is to add a @code{to-address} to the group parameters --- 5563,5569 ---- @findex gnus-mailing-list-groups @cindex mailing lists ! If your news server offers groups that are really mailing lists that are gatewayed to the @sc{nntp} server, you can read those groups without problems, but you can't post/followup to them without some difficulty. One solution is to add a @code{to-address} to the group parameters *************** *** 5600,5606 **** use to store sent messages. It is @code{(nnfolder "archive" (nnfolder-directory "~/Mail/archive/"))} by default, but you can use any mail select method (@code{nnml}, @code{nnmbox}, etc.). However, ! @code{nnfolder} is a quite likable select method for doing this sort of thing. If you don't like the default directory chosen, you could say something like: --- 5607,5613 ---- use to store sent messages. It is @code{(nnfolder "archive" (nnfolder-directory "~/Mail/archive/"))} by default, but you can use any mail select method (@code{nnml}, @code{nnmbox}, etc.). However, ! @code{nnfolder} is a quite likeable select method for doing this sort of thing. If you don't like the default directory chosen, you could say something like: *************** *** 6070,6076 **** @item Articles that are ``saved'' (in some manner or other; not necessarily ! religously) are marked with an @samp{S} in the second column (@code{gnus-saved-mark}. @item --- 6077,6083 ---- @item Articles that are ``saved'' (in some manner or other; not necessarily ! religiously) are marked with an @samp{S} in the second column (@code{gnus-saved-mark}. @item *************** *** 6094,6100 **** in the second column by default. So if you have a cached, saved, replied article that you have process-marked, what will that look like? ! Nothing much. The presedence rules go as follows: process -> cache -> replied -> saved. So if the article is in the cache and is replied, you'll only see the cache mark and not the replied mark. --- 6101,6107 ---- in the second column by default. So if you have a cached, saved, replied article that you have process-marked, what will that look like? ! Nothing much. The precedence rules go as follows: process -> cache -> replied -> saved. So if the article is in the cache and is replied, you'll only see the cache mark and not the replied mark. *************** *** 6286,6292 **** @item M P v @kindex M P v (Summary) @findex gnus-uu-mark-over ! Mark all articles that have a score above the prefix argumnet (@code{gnus-uu-mark-over}). @item M P s --- 6293,6299 ---- @item M P v @kindex M P v (Summary) @findex gnus-uu-mark-over ! Mark all articles that have a score above the prefix argument (@code{gnus-uu-mark-over}). @item M P s *************** *** 6402,6408 **** @findex gnus-summary-limit-mark-excluded-as-read Mark all excluded unread articles as read (@code{gnus-summary-limit-mark-excluded-as-read}). If given a prefix, ! also mark exluded ticked and dormant articles as read. @end table --- 6409,6415 ---- @findex gnus-summary-limit-mark-excluded-as-read Mark all excluded unread articles as read (@code{gnus-summary-limit-mark-excluded-as-read}). If given a prefix, ! also mark excluded ticked and dormant articles as read. @end table *************** *** 7125,7131 **** unwanted headers before saving the article. @vindex gnus-saved-headers ! If the preceeding variable is @code{nil}, all headers that match the @code{gnus-saved-headers} regexp will be kept, while the rest will be deleted before saving. --- 7132,7138 ---- unwanted headers before saving the article. @vindex gnus-saved-headers ! If the preceding variable is @code{nil}, all headers that match the @code{gnus-saved-headers} regexp will be kept, while the rest will be deleted before saving. *************** *** 7183,7189 **** and every article in. The prompting action is controlled by the @code{gnus-prompt-before-saving} variable, which is @code{always} by default, giving you that excessive prompting action you know and ! loathe. If you set this variable to @code{t} instead, you'll be promted just once for each series of articles you save. If you like to really have Gnus do all your thinking for you, you can even set this variable to @code{nil}, which means that you will never be prompted for files to --- 7190,7196 ---- and every article in. The prompting action is controlled by the @code{gnus-prompt-before-saving} variable, which is @code{always} by default, giving you that excessive prompting action you know and ! loathe. If you set this variable to @code{t} instead, you'll be prompted just once for each series of articles you save. If you like to really have Gnus do all your thinking for you, you can even set this variable to @code{nil}, which means that you will never be prompted for files to *************** *** 7650,7656 **** to unpack the archive and see if any of the files in the archive can be viewed. For instance, if you have a gzipped tar file @file{pics.tar.gz} containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will ! uncompress and detar the main file, and then view the two pictures. This unpacking process is recursive, so if the archive contains archives of archives, it'll all be unpacked. --- 7657,7663 ---- to unpack the archive and see if any of the files in the archive can be viewed. For instance, if you have a gzipped tar file @file{pics.tar.gz} containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will ! uncompress and de-tar the main file, and then view the two pictures. This unpacking process is recursive, so if the archive contains archives of archives, it'll all be unpacked. *************** *** 7696,7702 **** * Article Highlighting:: You want to make the article look like fruit salad. * Article Hiding:: You also want to make certain info go away. * Article Washing:: Lots of way-neat functions to make life better. ! * Article Buttons:: Clcik on URLs, Message-IDs, addresses and the like. * Article Date:: Grumble, UT! @end menu --- 7703,7709 ---- * Article Highlighting:: You want to make the article look like fruit salad. * Article Hiding:: You also want to make certain info go away. * Article Washing:: Lots of way-neat functions to make life better. ! * Article Buttons:: Click on URLs, Message-IDs, addresses and the like. * Article Date:: Grumble, UT! @end menu *************** *** 7744,7750 **** @item gnus-cite-prefix-regexp @vindex gnus-cite-prefix-regexp ! Regexp mathcing the longest possible citation prefix on a line. @item gnus-cite-max-prefix @vindex gnus-cite-max-prefix --- 7751,7757 ---- @item gnus-cite-prefix-regexp @vindex gnus-cite-prefix-regexp ! Regexp matching the longest possible citation prefix on a line. @item gnus-cite-max-prefix @vindex gnus-cite-max-prefix *************** *** 7767,7774 **** @vindex gnus-cite-attribution-prefix Regexp matching the beginning of an attribution line. ! @item gnus-cite-addtribution-suffix ! @vindex gnus-cite-addtribution-suffix Regexp matching the end of an attribution line. @item gnus-cite-attribution-face --- 7774,7781 ---- @vindex gnus-cite-attribution-prefix Regexp matching the beginning of an attribution line. ! @item gnus-cite-attribution-suffix ! @vindex gnus-cite-attribution-suffix Regexp matching the end of an attribution line. @item gnus-cite-attribution-face *************** *** 7795,7801 **** @cindex article hiding Or rather, hiding certain things in each article. There usually is much ! too much gruft in most articles. @table @kbd --- 7802,7808 ---- @cindex article hiding Or rather, hiding certain things in each article. There usually is much ! too much cruft in most articles. @table @kbd *************** *** 8227,8233 **** @kindex M-x gnus-pick-mode Gnus provides a summary buffer minor mode that allows this---@code{gnus-pick-mode}. This basically means that a few process ! mark commands becode one-keystroke commands to allow easy marking, and it makes one additional command for switching to the summary buffer available. --- 8234,8240 ---- @kindex M-x gnus-pick-mode Gnus provides a summary buffer minor mode that allows this---@code{gnus-pick-mode}. This basically means that a few process ! mark commands become one-keystroke commands to allow easy marking, and it makes one additional command for switching to the summary buffer available. *************** *** 8441,8447 **** @findex gnus-summary-expire-articles-now Expunge all the expirable articles in the group (@code{gnus-summary-expire-articles-now}). This means that @strong{all} ! articles that are eligeble for expiry in the current group will disappear forever into that big @file{/dev/null} in the sky. @item B DEL --- 8448,8454 ---- @findex gnus-summary-expire-articles-now Expunge all the expirable articles in the group (@code{gnus-summary-expire-articles-now}). This means that @strong{all} ! articles that are eligible for expiry in the current group will disappear forever into that big @file{/dev/null} in the sky. @item B DEL *************** *** 8504,8511 **** @item B q @kindex B q (Summary) @findex gnus-summary-respool-query ! If you want to respool an article, you might be curious as to what group ! the article will end up in before you do the respooling. This command will tell you (@code{gnus-summary-fancy-query}). @end table --- 8511,8518 ---- @item B q @kindex B q (Summary) @findex gnus-summary-respool-query ! If you want to re-spool an article, you might be curious as to what group ! the article will end up in before you do the re-spooling. This command will tell you (@code{gnus-summary-fancy-query}). @end table *************** *** 9680,9686 **** some author. Uses the same match types as the @code{From} header uses. @item Thread ! This match key will add a ascore entry on all articles that are part of a thread. Uses the same match types as the @code{References} header uses. @end table --- 9687,9693 ---- some author. Uses the same match types as the @code{From} header uses. @item Thread ! This match key will add a score entry on all articles that are part of a thread. Uses the same match types as the @code{References} header uses. @end table *************** *** 9941,9947 **** @end lisp You may also consider doing something similar with @code{expunge}. ! @item Negated charater classes If you say stuff like @code{[^abcd]*}, you may get unexpected results. That will match newlines, which might lead to, well, The Unknown. Say @code{[^abcd\n]*} instead. --- 9948,9954 ---- @end lisp You may also consider doing something similar with @code{expunge}. ! @item Negated character classes If you say stuff like @code{[^abcd]*}, you may get unexpected results. That will match newlines, which might lead to, well, The Unknown. Say @code{[^abcd\n]*} instead. *************** *** 10272,10278 **** you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all reaching for that calculator there). However, the special number @code{1.0} is used to signal that this buffer should soak up all the ! rest of the space avaiable after the rest of the buffers have taken whatever they need. There should be only one buffer with the @code{1.0} size spec per split. --- 10279,10285 ---- you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all reaching for that calculator there). However, the special number @code{1.0} is used to signal that this buffer should soak up all the ! rest of the space available after the rest of the buffers have taken whatever they need. There should be only one buffer with the @code{1.0} size spec per split. *************** *** 10408,10414 **** @xref{(elisp)Frame Parameters}. Here's a list of all possible keys for ! @code{gnus-buffer-configuaration}: @code{group}, @code{summary}, @code{article}, @code{server}, @code{browse}, @code{group-mail}, @code{summary-mail}, --- 10415,10421 ---- @xref{(elisp)Frame Parameters}. Here's a list of all possible keys for ! @code{gnus-buffer-configuration}: @code{group}, @code{summary}, @code{article}, @code{server}, @code{browse}, @code{group-mail}, @code{summary-mail}, *************** *** 10583,10592 **** To set the whole thing in motion, though, you have to set @code{gnus-use-demon} to @code{t}. - @vindex gnus-use-demon - To set the whole thing in motion, though, you have to set - @code{gnus-use-demon} to @code{t}. - So, if you want to add a handler, you could put something like this in your @file{.gnus} file: --- 10590,10595 ---- *************** *** 10721,10727 **** @end table So if you only want highlighting in the article buffer and menus in all ! buffers, you couls say something like: @lisp (setq gnus-visual '(article-highlight menu)) --- 10724,10730 ---- @end table So if you only want highlighting in the article buffer and menus in all ! buffers, you could say something like: @lisp (setq gnus-visual '(article-highlight menu)) *************** *** 10831,10837 **** @table @code @item gnus-auto-center-summary ! Set this to @code{nil} to inhibit Gnus from recentering the summary buffer all the time. @item gnus-visible-headers --- 10834,10840 ---- @table @code @item gnus-auto-center-summary ! Set this to @code{nil} to inhibit Gnus from re-centering the summary buffer all the time. @item gnus-visible-headers *************** *** 10954,10960 **** It is also important to remember that I have no memory whatsoever. If you send a bug report, and I send you a reply, and then you send back just ``No, it's not! Moron!'', I will have no idea what you are insulting ! me about. Always overexplain everything. It's much easier for all of us---if I don't have all the information I need, I will just mail you and ask for more info, and everything takes more time. --- 10957,10963 ---- It is also important to remember that I have no memory whatsoever. If you send a bug report, and I send you a reply, and then you send back just ``No, it's not! Moron!'', I will have no idea what you are insulting ! me about. Always over-explain everything. It's much easier for all of us---if I don't have all the information I need, I will just mail you and ask for more info, and everything takes more time. *************** *** 10999,11005 **** @menu * A Programmer@'s Guide to Gnus:: Rilly, rilly technical stuff. ! * Emacs for Heathens:: A short intruduction to Emacsian terms. * Frequently Asked Questions:: A question-and-answer session. @end menu --- 11002,11008 ---- @menu * A Programmer@'s Guide to Gnus:: Rilly, rilly technical stuff. ! * Emacs for Heathens:: A short introduction to Emacsian terms. * Frequently Asked Questions:: A question-and-answer session. @end menu *************** *** 11245,11251 **** considering the highest and lowest article numbers, but some articles may have been cancelled. Gnus just discards the total-number, so whether one should take the bother to generate it properly (if that is a ! problem) is left as an excercise to the reader. @example group-status = [ error / info ] eol --- 11248,11254 ---- considering the highest and lowest article numbers, but some articles may have been cancelled. Gnus just discards the total-number, so whether one should take the bother to generate it properly (if that is a ! problem) is left as an exercise to the reader. @example group-status = [ error / info ] eol *************** *** 11400,11406 **** would generally expect that if one later fetches article number 4, for instance, some sort of asynchronous fetching of the articles after 4 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that ! alist) would be fetched asynchronouly, but that is left up to the backend. Gnus doesn't care. There should be no result data from this function. --- 11403,11409 ---- would generally expect that if one later fetches article number 4, for instance, some sort of asynchronous fetching of the articles after 4 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that ! alist) would be fetched asynchronously, but that is left up to the backend. Gnus doesn't care. There should be no result data from this function. *************** *** 11597,11614 **** almost suspect that the author looked at the @sc{nov} specification and just shamelessly @emph{stole} the entire thing, and one would be right. ! @dfn{Header} is a severly overloaded term. ``Header'' is used in RFC1036 to talk about lines in the head of an article (eg., @code{From}). It is used by many people as a synonym for ``head''---``the header and the body''. (That should be avoided, in my opinion.) And Gnus uses a format ! interanally that it calls ``header'', which is what I'm talking about here. This is a 9-element vector, basically, with each header (ouch) having one slot. These slots are, in order: @code{number}, @code{subject}, @code{from}, @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines}, @code{xref}. There are macros for accessing and setting these slots -- ! they all have predicatable names beginning with @code{mail-header-} and @code{mail-header-set-}, respectively. The @code{xref} slot is really a @code{misc} slot. Any extra info will --- 11600,11617 ---- almost suspect that the author looked at the @sc{nov} specification and just shamelessly @emph{stole} the entire thing, and one would be right. ! @dfn{Header} is a severely overloaded term. ``Header'' is used in RFC1036 to talk about lines in the head of an article (eg., @code{From}). It is used by many people as a synonym for ``head''---``the header and the body''. (That should be avoided, in my opinion.) And Gnus uses a format ! internally that it calls ``header'', which is what I'm talking about here. This is a 9-element vector, basically, with each header (ouch) having one slot. These slots are, in order: @code{number}, @code{subject}, @code{from}, @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines}, @code{xref}. There are macros for accessing and setting these slots -- ! they all have predictable names beginning with @code{mail-header-} and @code{mail-header-set-}, respectively. The @code{xref} slot is really a @code{misc} slot. Any extra info will *************** *** 11665,11671 **** (1 2 3 4 5) @end example ! is a perfectly valid range, although a pretty longwinded one. This is also legal: @example --- 11668,11674 ---- (1 2 3 4 5) @end example ! is a perfectly valid range, although a pretty long-winded one. This is also legal: @example *************** *** 11755,11761 **** question. It also lists the highest and lowest current article numbers in each group. ! Here's an exceprt from a typical active file: @example soc.motss 296030 293865 y --- 11758,11764 ---- question. It also lists the highest and lowest current article numbers in each group. ! Here's an excerpt from a typical active file: @example soc.motss 296030 293865 y *************** *** 11838,11844 **** normally used to get capital letters and stuff. You probably use it all the time. The control key is normally marked ``CTRL'' or something like that. The meta key is, funnily enough, never marked as such on any ! keyboards. The one I'm curretly at has a key that's marked ``Alt'', which is the meta key on this keyboard. It's usually located somewhere to the left hand side of the keyboard, usually on the bottom row. --- 11841,11847 ---- normally used to get capital letters and stuff. You probably use it all the time. The control key is normally marked ``CTRL'' or something like that. The meta key is, funnily enough, never marked as such on any ! keyboards. The one I'm currently at has a key that's marked ``Alt'', which is the meta key on this keyboard. It's usually located somewhere to the left hand side of the keyboard, usually on the bottom row. *************** *** 11889,11895 **** how Gnus works. If you have put that thing in your @code{.emacs} file, it will be read ! and @code{eval}ed (which is lispese for ``run'') the next time you start Emacs. If you want to change the variable right away, simply say @kbd{C-x C-e} after the closing parenthesis. That will @code{eval} the previous ``form'', which here is a simple @code{setq} statement. --- 11892,11898 ---- how Gnus works. If you have put that thing in your @code{.emacs} file, it will be read ! and @code{eval}ed (which is lisp-ese for ``run'') the next time you start Emacs. If you want to change the variable right away, simply say @kbd{C-x C-e} after the closing parenthesis. That will @code{eval} the previous ``form'', which here is a simple @code{setq} statement. *** pub/sgnus/texi/ChangeLog Mon Feb 5 19:15:46 1996 --- sgnus/texi/ChangeLog Thu Feb 8 17:34:38 1996 *************** *** 1,3 **** --- 1,7 ---- + Thu Feb 8 17:34:33 1996 Lars Ingebrigtsen + + * gnus.texi (Topic Commands): Addition. + Mon Feb 5 05:24:01 1996 Lars Ingebrigtsen * gnus.texi (Article Washing): Addition.