diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/ChangeLog dgnus/lisp/ChangeLog *** pub/dgnus/lisp/ChangeLog Fri Apr 21 02:40:38 1995 --- dgnus/lisp/ChangeLog Fri Apr 21 05:46:14 1995 *************** *** 1,3 **** --- 1,29 ---- + Fri Apr 21 02:50:11 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-start-news-server): Set nnmh-directory in the + select method. + + * nnfolder.el: Installed Scott Byer's patches. + + * nnheader.el (nnheader-make-complex-temp-name): New variable. + + * gnus-mh.el: Installed Eric Selberg's patches. + + * gnus.el (gnus-summary-check-current): New variable. + (gnus-summary-search-subject): Use variable. + Did the (replace-match "" t t) thing. + (gnus-simplify-subject-fuzzy): Buffer implementation. + + * nnspool.el (nnspool-seconds-since-epoch): Returned incorrect + data. + + * gnus.el (gnus-article-prepare): Go to the next subject if the + article is canceled. + + Fri Apr 21 02:48:19 1995 Lars Magne Ingebrigtsen + + * gnus.el: 0.54 is released. + Thu Apr 20 06:36:33 1995 Lars Ingebrigtsen * gnus.el (gnus-setup-news): Read .newsrc.eld before reading the diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-mh.el dgnus/lisp/gnus-mh.el *** pub/dgnus/lisp/gnus-mh.el Fri Apr 21 02:40:32 1995 --- dgnus/lisp/gnus-mh.el Fri Apr 21 04:21:50 1995 *************** *** 68,127 **** "Compose reply mail using mh-e. Optional argument YANK means yank original article. The command \\[mh-yank-cur-msg] yank the original message into current buffer." - ;; First of all, prepare mhe mail buffer. - ;; Bug fix by Timo METZEMAKERS . (let (from cc subject date to reply-to to-userid orig-to (config (current-window-configuration)) ! (buffer)) (pop-to-buffer gnus-article-buffer) (setq buffer (current-buffer)) ! (save-restriction ! (or gnus-user-login-name ;; here cuz we need it here. ! (setq gnus-user-login-name (or (getenv "USER") ! (getenv "LOGNAME")))) ! ;; junk which mh-send did, but now we do. also better, cuz doesn't ! ;; call delete-other-windows when we don't want it to. ! (if gnus-split-window ! (progn ! (split-window-vertically) ! )) ! (gnus-article-show-all-headers) ;I don't think this is really needed. ! (setq from (gnus-fetch-field "from") ! subject (let ((subject (or (gnus-fetch-field "subject") ! "(None)"))) ! (if (and subject ! (not (string-match "^[Rr][Ee]:.+$" subject))) ! (concat "Re: " subject) subject)) ! reply-to (gnus-fetch-field "reply-to") ! cc (gnus-fetch-field "cc") ! orig-to (or (gnus-fetch-field "to") "") ! date (gnus-fetch-field "date")) ! (setq to (or reply-to from)) ! (setq to-userid (mail-strip-quoted-names orig-to)) ! (if (or (string-match "," orig-to) ! (not (string-match (substring to-userid 0 (string-match "@" to-userid)) ! gnus-user-login-name))) ! (setq cc (concat (if cc (concat cc ", ") "") orig-to)) ! ) ! ; (setq mh-show-buffer buffer) ! (mh-find-path) ! (mh-goto-header-end 0) ! (if gnus-split-window ! (mh-send-sub to (or cc "") (or subject "(None)") config) ;; Erik Selberg 1/23/94 ! (mh-send to (or cc "") subject) ;; shouldn't use according to mhe ! ) ! (save-excursion ! (mh-insert-fields ! "In-reply-to:" ! (concat ! (substring from 0 (string-match " *at \\| *@ \\| *(\\| *<" from)) ! "'s message of " date))) ! (setq mh-sent-from-folder buffer) ! (setq mh-sent-from-msg 1) ! (setq mh-previous-window-config config) ! )) ;; Then, yank original article if requested. (if yank --- 68,130 ---- "Compose reply mail using mh-e. Optional argument YANK means yank original article. The command \\[mh-yank-cur-msg] yank the original message into current buffer." (let (from cc subject date to reply-to to-userid orig-to (config (current-window-configuration)) ! buffer) (pop-to-buffer gnus-article-buffer) (setq buffer (current-buffer)) ! (save-excursion ! (save-restriction ! (or gnus-user-login-name ; we need this ! (setq gnus-user-login-name (or (getenv "USER") ! (getenv "LOGNAME")))) ! (gnus-article-show-all-headers) ;; so colors are happy ! ;; lots of junk to avoid mh-send deleting other windows ! (if gnus-split-window ! (split-window-vertically) ! ) ! (setq from (gnus-fetch-field "from") ! subject (let ((subject (or (gnus-fetch-field "subject") ! "(None)"))) ! (if (and subject ! (not (string-match "^[Rr][Ee]:.+$" subject))) ! (concat "Re: " subject) subject)) ! reply-to (gnus-fetch-field "reply-to") ! cc (gnus-fetch-field "cc") ! orig-to (or (gnus-fetch-field "to") "") ! date (gnus-fetch-field "date")) ! (setq to (or reply-to from)) ! (setq to-userid (mail-strip-quoted-names orig-to)) ! (if (or (string-match "," orig-to) ! (not (string-match (substring to-userid 0 (string-match "@" to-userid)) ! gnus-user-login-name))) ! (setq cc (concat (if cc (concat cc ", ") "") orig-to)) ! ) ! ;; (setq mh-show-buffer buffer) ! )) ;; save excursion/restriction ! ! (mh-find-path) ! (if gnus-split-window ! (mh-send-sub to (or cc "") (or subject "(None)") config);; Erik Selberg 1/23/94 ! (mh-send to (or cc "") subject);; shouldn't use according to mhe ! ) ! ! ;; note - current buffer is now draft! ! (save-excursion ! (mh-insert-fields ! "In-reply-to:" ! (concat ! (substring from 0 (string-match " *at \\| *@ \\| *(\\| *<" from)) ! "'s message of " date))) ! ! ;; need this for mh-yank-cur-msg ! (setq mh-sent-from-folder buffer) ! (setq mh-sent-from-msg 1) ! (setq mh-show-buffer buffer) ! (setq mh-previous-window-config config) ! ) ;; Then, yank original article if requested. (if yank diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-visual.el dgnus/lisp/gnus-visual.el *** pub/dgnus/lisp/gnus-visual.el Fri Apr 21 02:40:32 1995 --- dgnus/lisp/gnus-visual.el Fri Apr 21 05:50:47 1995 *************** *** 454,459 **** --- 454,464 ---- (put-text-property beg end 'face face))) (goto-char p))) + (defvar mode-motion-hook nil) + (defun gnus-install-mouse-tracker () + (require 'mode-motion) + (setq mode-motion-hook 'mode-motion-highlight-line)) + (if (not gnus-xemacs) () (setq gnus-group-mode-hook *************** *** 462,468 **** (easy-menu-add gnus-group-reading-menu) (easy-menu-add gnus-group-group-menu) (easy-menu-add gnus-group-post-menu) ! (easy-menu-add gnus-group-misc-menu)) gnus-group-mode-hook)) (setq gnus-summary-mode-hook (cons --- 467,474 ---- (easy-menu-add gnus-group-reading-menu) (easy-menu-add gnus-group-group-menu) (easy-menu-add gnus-group-post-menu) ! (easy-menu-add gnus-group-misc-menu) ! (gnus-install-mouse-tracker)) gnus-group-mode-hook)) (setq gnus-summary-mode-hook (cons *************** *** 473,479 **** (easy-menu-add gnus-summary-thread-menu) (easy-menu-add gnus-summary-misc-menu) (easy-menu-add gnus-summary-post-menu) ! (easy-menu-add gnus-summary-kill-menu)) gnus-summary-mode-hook)) (setq gnus-article-mode-hook (cons --- 479,486 ---- (easy-menu-add gnus-summary-thread-menu) (easy-menu-add gnus-summary-misc-menu) (easy-menu-add gnus-summary-post-menu) ! (easy-menu-add gnus-summary-kill-menu) ! (gnus-install-mouse-tracker)) gnus-summary-mode-hook)) (setq gnus-article-mode-hook (cons *************** *** 484,487 **** (provide 'gnus-visual) ! ;;; gnus-visual.el ends here \ No newline at end of file --- 491,494 ---- (provide 'gnus-visual) ! ;;; gnus-visual.el ends here diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus.el dgnus/lisp/gnus.el *** pub/dgnus/lisp/gnus.el Fri Apr 21 02:40:34 1995 --- dgnus/lisp/gnus.el Fri Apr 21 05:50:49 1995 *************** *** 652,657 **** --- 652,662 ---- (defvar gnus-auto-select-same nil "*If non-nil, select the next article with the same subject.") + (defvar gnus-summary-check-current nil + "*If non-nil, consider the current article when moving. + The \"unread\" movement commands will stay on the same line if the + current article is unread.") + (defvar gnus-auto-center-summary t "*If non-nil, always center the current summary buffer.") *************** *** 792,797 **** --- 797,806 ---- "*Score mark used for articles with high scores.") (defvar gnus-score-below-mark ?- "*Score mark used for articles with low scores.") + (defvar gnus-empty-thread-mark ? + "*There is no thread under the article.") + (defvar gnus-not-empty-thread-mark ?= + "*There is a thread under the article.") (defvar gnus-view-pseudo-asynchronously nil "*If non-nil, Gnus will view pseudo-articles asynchronously.") *************** *** 876,882 **** %< Spaces of length (- 20 thread-level) (string) %i Article score (number) %z Article zcore (character) ! %t Number of articles under the current thread. %u User defined specifier. The next character in the format string should be a letter. Gnus will call the function gnus-user-format-function-X, where X is the letter following %u. The function will be passed the --- 885,892 ---- %< Spaces of length (- 20 thread-level) (string) %i Article score (number) %z Article zcore (character) ! %t Number of articles under the current thread (number). ! %e Whether the thread is empty or not (character). %u User defined specifier. The next character in the format string should be a letter. Gnus will call the function gnus-user-format-function-X, where X is the letter following %u. The function will be passed the *************** *** 1299,1304 **** --- 1309,1315 ---- (list ?z 'score-char ?c) (list ?U 'unread ?c) (list ?t '(gnus-summary-number-of-articles-in-thread thread) ?d) + (list ?e '(gnus-summary-number-of-articles-in-thread thread t) ?c) (list ?u 'user-defined ?s)) "An alist of format specifications that can appear in summary lines, and what variables they correspond with, along with the type of the *************** *** 1331,1337 **** (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.54" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1342,1348 ---- (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.55" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 1348,1353 **** --- 1359,1366 ---- (defvar gnus-article-buffer "*Article*") (defvar gnus-server-buffer "*Server*") + (defvar gnus-work-buffer " *gnus work*") + (defvar gnus-buffer-list nil "Gnus buffers that should be killed on exit.") *************** *** 1745,1753 **** (gnus-score-over-mark 130) (thread nil) pos) ! (set-buffer (get-buffer-create " *gnus work*")) ! (buffer-disable-undo (current-buffer)) ! (erase-buffer) (gnus-summary-insert-line nil [0 "" "" "" "" "" 0 0 ""] 0 nil 128 t nil "" nil 1) (goto-char (point-min)) --- 1758,1764 ---- (gnus-score-over-mark 130) (thread nil) pos) ! (gnus-set-work-buffer) (gnus-summary-insert-line nil [0 "" "" "" "" "" 0 0 ""] 0 nil 128 t nil "" nil 1) (goto-char (point-min)) *************** *** 1759,1766 **** (goto-char (point-min)) (setq pos (cons (cons 'score (and (search-forward "\202" nil t) (- (point) 2))) pos)) ! (setq gnus-summary-mark-positions pos) ! (kill-buffer (current-buffer))))) (defun gnus-format-max-width (var length) (let (result) --- 1770,1776 ---- (goto-char (point-min)) (setq pos (cons (cons 'score (and (search-forward "\202" nil t) (- (point) 2))) pos)) ! (setq gnus-summary-mark-positions pos)))) (defun gnus-format-max-width (var length) (let (result) *************** *** 1805,1814 **** (let ((max-width 0) spec flist fstring b newspec max-width elem beg) (save-excursion ! (set-buffer (get-buffer-create " *gnus work*")) ! (buffer-disable-undo (current-buffer)) ! (gnus-add-current-to-buffer-list) ! (erase-buffer) (insert format) (goto-char 1) (while (re-search-forward "%[-0-9]*\\(,[0-9]*\\)*\\(.\\)\\(.\\)?" nil t) --- 1815,1821 ---- (let ((max-width 0) spec flist fstring b newspec max-width elem beg) (save-excursion ! (gnus-set-work-buffer) (insert format) (goto-char 1) (while (re-search-forward "%[-0-9]*\\(,[0-9]*\\)*\\(.\\)\\(.\\)?" nil t) *************** *** 1867,1872 **** --- 1874,1888 ---- (file-exists-p (concat gnus-init-file ".elc"))) (load gnus-init-file nil t))) + (defun gnus-set-work-buffer () + (if (get-buffer gnus-work-buffer) + (progn + (set-buffer (get-buffer gnus-work-buffer)) + (gnus-add-current-to-buffer-list) + (erase-buffer)) + (set-buffer (get-buffer-create gnus-work-buffer)) + (buffer-disable-undo (current-buffer)))) + ;; Article file names when saving. (defun gnus-Numeric-save-name (newsgroup headers &optional last-file) *************** *** 2102,2122 **** (defun gnus-simplify-subject-fuzzy (subject) (let ((case-fold-search t)) ! (and (string-match "^re:[ \t]*" subject) ! (setq subject (substring subject (match-end 0)))) ! (while (string-match "[ \t\n]*([^()]*)[ \t\n]*\\'" subject) ! (setq subject (substring subject 0 (match-beginning 0)))) ! (let ((beg 0) ! (osubject "")) ! (while (string-match "[ \t]+" subject beg) ! (setq osubject ! (concat osubject (substring ! subject beg (match-beginning 0)) " ") ! beg (match-end 0))) ! (setq osubject (concat osubject (substring subject beg))) ! (and (string-match " \\'" osubject) ! (setq osubject (substring osubject 0 (match-beginning 0)))) ! osubject))) (defun gnus-add-current-to-buffer-list () (setq gnus-buffer-list (cons (current-buffer) gnus-buffer-list))) --- 2118,2139 ---- (defun gnus-simplify-subject-fuzzy (subject) (let ((case-fold-search t)) ! (save-excursion ! (gnus-set-work-buffer) ! (insert subject) ! (goto-char (point-min)) ! (and (looking-at "^[ \t]*re:[ \t]*") ! (replace-match "" t t)) ! (while (re-search-forward "[ \t\n]*([^()]*)[ \t\n]*\\'" nil t) ! (replace-match "" t t) ! (goto-char (point-min))) ! (while (re-search-forward "[ \t]+" nil t) ! (replace-match " " t t)) ! (goto-char (point-max)) ! (forward-char -1) ! (if (= (following-char) ? ) ! (substring (point-min) (point)) ! (substring (point-min) (point-max)))))) (defun gnus-add-current-to-buffer-list () (setq gnus-buffer-list (cons (current-buffer) gnus-buffer-list))) *************** *** 2593,2604 **** (setq last (car numbers))) (t ;End of one sequence (setq result ! (cons (if (= first last) first (cons first last)) result)) (setq first (car numbers)) (setq last (car numbers)))) (setq numbers (cdr numbers))) (if (and (not always-list) (null result)) ! (if (= first last) first (cons first last)) (nreverse (cons (if (= first last) first (cons first last)) result))))))) --- 2610,2622 ---- (setq last (car numbers))) (t ;End of one sequence (setq result ! (cons (if (= first last) first ! (cons first last)) result)) (setq first (car numbers)) (setq last (car numbers)))) (setq numbers (cdr numbers))) (if (and (not always-list) (null result)) ! (if (= first last) (list first) (cons first last)) (nreverse (cons (if (= first last) first (cons first last)) result))))))) *************** *** 2691,2748 **** (setq ranges (cdr ranges))) out))) - (defun gnus-add-to-range-new (ranges list) - (gnus-compress-sequence - (sort (nconc (gnus-uncompress-range ranges) list) '<))) - - (defun gnus-add-to-range-old (ranges list) - "Return a list of ranges that has all articles from both RANGES and LIST. - Note: LIST has to be sorted over `<'." - (let* ((ranges (if (and ranges (not (listp (cdr ranges)))) - (list ranges) ranges)) - (inrange ranges) - did-one - range nranges first last) - (if (not list) - ranges - (if (not ranges) - (gnus-compress-sequence list t) - (and ranges - (> (car (car ranges)) 1) - (progn - (setq did-one t) - (setq inrange (setq ranges (cons (cons 1 1) ranges))))) - (while (and ranges list) - (setq range (car ranges)) - (while (and list (>= (car list) (car range)) - (<= (car list) (cdr range))) - (setq list (cdr list))) - (while (and list (= (1- (car list)) (cdr range))) - (setcdr range (car list)) - (setq list (cdr list))) - (if (and list (and (> (car list) (cdr range)) - (cdr ranges) - (< (car list) (car (car (cdr ranges)))))) - (setcdr ranges (cons (cons (car list) (car list)) (cdr ranges)))) - (setq ranges (cdr ranges))) - (if (and list (not ranges)) - (setq inrange (nconc inrange (gnus-compress-sequence list t)))) - (if did-one - (if (eq (cdr (car inrange)) 1) - (setq inrange (cdr inrange)) - (setcar (car inrange) 2))) - (setq ranges inrange) - (while ranges - (if (and (cdr ranges) (>= (1+ (cdr (car ranges))) - (car (car (cdr ranges))))) - (progn - (setcdr (car ranges) (cdr (car (cdr ranges)))) - (setcdr ranges (cdr (cdr ranges)))) - (setq ranges (cdr ranges)))) - (if (not (cdr inrange)) - (car inrange) - inrange))))) - (defun gnus-remove-from-range (ranges list) "Return a list of ranges that has all articles from LIST removed from RANGES. Note: LIST has to be sorted over `<'." --- 2709,2714 ---- *************** *** 3578,3584 **** (let* ((meth (if address (list (intern method) address) method)) (nname (gnus-group-prefixed-name name meth)) info) ! (and (gnus-gethash nname gnus-active-hashtb) (error "Group %s already exists" nname)) (gnus-group-change-level (setq info (list t nname gnus-level-default-subscribed nil nil meth)) --- 3544,3550 ---- (let* ((meth (if address (list (intern method) address) method)) (nname (gnus-group-prefixed-name name meth)) info) ! (and (gnus-gethash nname gnus-newsrc-hashtb) (error "Group %s already exists" nname)) (gnus-group-change-level (setq info (list t nname gnus-level-default-subscribed nil nil meth)) *************** *** 3714,3729 **** (car scores)))) (gnus-group-make-group group "nnkiboze" address) (save-excursion ! (set-buffer (get-buffer-create " *gnus work*")) ! (buffer-disable-undo (current-buffer)) (let (emacs-lisp-mode-hook) (pp (list 'setq 'gnus-score-alist (list 'quote (list scores))) (current-buffer))) (write-region (point-min) (point-max) (concat (or gnus-kill-files-directory "~/News") ! "nnkiboze:" group "." gnus-score-file-suffix)) ! (kill-buffer (current-buffer))) (gnus-group-position-cursor)) ;; Group sorting commands --- 3680,3693 ---- (car scores)))) (gnus-group-make-group group "nnkiboze" address) (save-excursion ! (gnus-set-work-buffer) (let (emacs-lisp-mode-hook) (pp (list 'setq 'gnus-score-alist (list 'quote (list scores))) (current-buffer))) (write-region (point-min) (point-max) (concat (or gnus-kill-files-directory "~/News") ! "nnkiboze:" group "." gnus-score-file-suffix))) (gnus-group-position-cursor)) ;; Group sorting commands *************** *** 5149,5159 **** (gnus-summary-update-line) (forward-line 1))))) ! (defun gnus-summary-number-of-articles-in-thread (thread) ;; Sum up all elements (and sub-elements) in a list. ! (if (listp thread) ! (apply '+ (mapcar 'gnus-summary-number-of-articles-in-thread thread)) ! 1)) (defun gnus-summary-read-group (group &optional show-all no-article kill-buffer) "Start reading news in newsgroup GROUP. --- 5113,5129 ---- (gnus-summary-update-line) (forward-line 1))))) ! (defun gnus-summary-number-of-articles-in-thread (thread &optional char) ;; Sum up all elements (and sub-elements) in a list. ! (let ((number ! (if (listp thread) ! (apply ! '+ (mapcar 'gnus-summary-number-of-articles-in-thread thread)) ! 1))) ! (if char ! (if (> number 1) gnus-not-empty-thread-mark ! gnus-empty-thread-mark) ! number))) (defun gnus-summary-read-group (group &optional show-all no-article kill-buffer) "Start reading news in newsgroup GROUP. *************** *** 6477,6498 **** (did t) pos) (beginning-of-line) ! (forward-char (if backward (if (bobp) 0 -1) (if (eobp) 0 1))) ! (while (and (setq pos (funcall func (point) 'gnus-number)) ! (goto-char (if backward (1- pos) pos)) ! (setq did ! (not (and (or (not unread) ! (eq (get-text-property (point) 'gnus-mark) ! gnus-unread-mark)) ! (or (not subject) ! (equal (gnus-simplify-subject-re ! subject) ! (gnus-simplify-subject-re ! (get-text-property ! (point) ! 'gnus-subject))))))) ! (if backward (if (bobp) nil (forward-char -1) t) ! (if (eobp) nil (forward-char 1) t)))) (if did (progn (goto-char beg) nil) (prog1 --- 6447,6474 ---- (did t) pos) (beginning-of-line) ! (and gnus-summary-check-current unread ! (eq (get-text-property (point) 'gnus-mark) gnus-unread-mark) ! (setq did nil)) ! (if (not did) ! () ! (forward-char (if backward (if (bobp) 0 -1) (if (eobp) 0 1))) ! (while ! (and ! (setq pos (funcall func (point) 'gnus-number)) ! (goto-char (if backward (1- pos) pos)) ! (setq did ! (not (and ! (or (not unread) ! (eq (get-text-property (point) 'gnus-mark) ! gnus-unread-mark)) ! (or (not subject) ! (equal (gnus-simplify-subject-re subject) ! (gnus-simplify-subject-re ! (get-text-property (point) ! 'gnus-subject))))))) ! (if backward (if (bobp) nil (forward-char -1) t) ! (if (eobp) nil (forward-char 1) t))))) (if did (progn (goto-char beg) nil) (prog1 *************** *** 9515,9522 **** (and (numberp article) (gnus-summary-mark-as-read article gnus-canceled-mark)) (message "No such article (may be canceled)") (ding)) ! (setq gnus-article-current nil) nil) (if (not (eq result 'article)) (progn --- 9491,9500 ---- (and (numberp article) (gnus-summary-mark-as-read article gnus-canceled-mark)) (message "No such article (may be canceled)") + (setq gnus-current-article article) (ding)) ! (setq gnus-article-current ! (cons gnus-newsgroup-name article)) nil) (if (not (eq result 'article)) (progn *************** *** 9751,9757 **** (let ((buffer-read-only nil)) (goto-char (point-min)) (while (search-forward "\r" nil t) ! (replace-match ""))))) (defun gnus-article-display-x-face () "Look for an X-Face header and display it if present." --- 9729,9735 ---- (let ((buffer-read-only nil)) (goto-char (point-min)) (while (search-forward "\r" nil t) ! (replace-match "" t t))))) (defun gnus-article-display-x-face () "Look for an X-Face header and display it if present." *************** *** 9800,9806 **** (* 16 (gnus-hex-char-to-integer (char-after (1+ (match-beginning 0))))) (gnus-hex-char-to-integer ! (char-after (1- (match-end 0)))))))))))) ;; Taken from hexl.el. (defun gnus-hex-char-to-integer (character) --- 9778,9784 ---- (* 16 (gnus-hex-char-to-integer (char-after (1+ (match-beginning 0))))) (gnus-hex-char-to-integer ! (char-after (1- (match-end 0)))))) t t)))))) ;; Taken from hexl.el. (defun gnus-hex-char-to-integer (character) *************** *** 9890,9896 **** (goto-char (point-min)) (insert "\^L\n0, unseen,,\n*** EOOH ***\n") (while (search-forward "\n\^_" nil t) ;single char ! (replace-match "\n^_")) ;2 chars: "^" and "_" (goto-char (point-max)) (insert "\^_"))) --- 9868,9874 ---- (goto-char (point-min)) (insert "\^L\n0, unseen,,\n*** EOOH ***\n") (while (search-forward "\n\^_" nil t) ;single char ! (replace-match "\n^_" t t)) ;2 chars: "^" and "_" (goto-char (point-max)) (insert "\^_"))) *************** *** 10365,10373 **** (if (file-readable-p file) (progn (save-excursion ! (set-buffer (get-buffer-create " *gnus work*")) ! (buffer-disable-undo (current-buffer)) ! (erase-buffer) (insert-file-contents file) (goto-char (point-min)) ;; Only do the loading if the score file isn't empty. --- 10343,10349 ---- (if (file-readable-p file) (progn (save-excursion ! (gnus-set-work-buffer) (insert-file-contents file) (goto-char (point-min)) ;; Only do the loading if the score file isn't empty. *************** *** 11010,11016 **** (goto-char 1) ;; First remove the suffix itself. (re-search-forward (concat "." gnus-score-file-suffix "$")) ! (replace-match "") (goto-char 1) (if (looking-at (regexp-quote kill-dir)) ;; If the file name was just "SCORE", `klen' is one character --- 10986,10992 ---- (goto-char 1) ;; First remove the suffix itself. (re-search-forward (concat "." gnus-score-file-suffix "$")) ! (replace-match "" t t) (goto-char 1) (if (looking-at (regexp-quote kill-dir)) ;; If the file name was just "SCORE", `klen' is one character *************** *** 11021,11027 **** (delete-region (1+ (point)) (point-min))) ;; Translate "all" to ".*". (while (search-forward "all" nil t) ! (replace-match ".*")) (goto-char 1) ;; Deal with "not."s. (if (looking-at "not.") --- 10997,11003 ---- (delete-region (1+ (point)) (point-min))) ;; Translate "all" to ".*". (while (search-forward "all" nil t) ! (replace-match ".*" t t)) (goto-char 1) ;; Deal with "not."s. (if (looking-at "not.") *************** *** 11152,11159 **** (pop-to-buffer gnus-article-buffer) (widen) (delete-other-windows) ! (gnus-post-news 'post)) ! ) (or (and (eq (current-buffer) (get-buffer gnus-post-news-buffer)) (not (zerop (buffer-size)))) ;; Restore last window configuration. --- 11128,11134 ---- (pop-to-buffer gnus-article-buffer) (widen) (delete-other-windows) ! (gnus-post-news 'post))) (or (and (eq (current-buffer) (get-buffer gnus-post-news-buffer)) (not (zerop (buffer-size)))) ;; Restore last window configuration. *************** *** 11268,11274 **** (search-forward "\n\n" nil t) (if (not (re-search-backward "^Message-ID: " nil t)) (error "No Message-ID in this article") ! (replace-match "Supersedes: ")) (search-forward "\n\n") (forward-line -1) (insert mail-header-separator)))) --- 11243,11249 ---- (search-forward "\n\n" nil t) (if (not (re-search-backward "^Message-ID: " nil t)) (error "No Message-ID in this article") ! (replace-match "Supersedes: " t t)) (search-forward "\n\n") (forward-line -1) (insert mail-header-separator)))) *************** *** 11315,11326 **** (gnus-request-post-buffer post real-group subject header article-buffer (nth 2 (and group (gnus-gethash group gnus-newsrc-hashtb))) ! (if (and (boundp 'gnus-followup-to-function) ! gnus-followup-to-function) ! (setq follow-to ! (save-excursion ! (set-buffer article-buffer) ! (funcall gnus-followup-to-function group)))) (eq gnus-use-followup-to t))) (if post (progn --- 11290,11305 ---- (gnus-request-post-buffer post real-group subject header article-buffer (nth 2 (and group (gnus-gethash group gnus-newsrc-hashtb))) ! (or (cdr (assq 'to-group ! (nth 5 (nth 2 (gnus-gethash ! gnus-newsgroup-name ! gnus-newsrc-hashtb))))) ! (if (and (boundp 'gnus-followup-to-function) ! gnus-followup-to-function) ! (setq follow-to ! (save-excursion ! (set-buffer article-buffer) ! (funcall gnus-followup-to-function group))))) (eq gnus-use-followup-to t))) (if post (progn *************** *** 11489,11495 **** (funcall gnus-mail-send-method) (goto-char 1) (search-forward gnus-mail-courtesy-message) ! (replace-match "")) (funcall gnus-mail-send-method)) (message "Sending via mail... done") --- 11468,11474 ---- (funcall gnus-mail-send-method) (goto-char 1) (search-forward gnus-mail-courtesy-message) ! (replace-match "" t t)) (funcall gnus-mail-send-method)) (message "Sending via mail... done") *************** *** 11580,11586 **** (save-excursion (let* ((case-fold-search t) (message-id (mail-fetch-field "message-id"))) ! (or (and (string-match "@" message-id) (string-match "@[^\\.]*\\." message-id)) (gnus-yes-or-no-p (format "The Message-ID looks strange: \"%s\". Really post? " --- 11559,11566 ---- (save-excursion (let* ((case-fold-search t) (message-id (mail-fetch-field "message-id"))) ! (or (not message-id) ! (and (string-match "@" message-id) (string-match "@[^\\.]*\\." message-id)) (gnus-yes-or-no-p (format "The Message-ID looks strange: \"%s\". Really post? " *************** *** 11589,11595 **** (save-excursion (let* ((case-fold-search t) (from (mail-fetch-field "from"))) ! (or (and (string-match "@" from) (string-match "@[^\\.]*\\." from)) (gnus-yes-or-no-p (format "The From looks strange: \"%s\". Really post? " --- 11569,11576 ---- (save-excursion (let* ((case-fold-search t) (from (mail-fetch-field "from"))) ! (or (not from) ! (and (string-match "@" from) (string-match "@[^\\.]*\\." from)) (gnus-yes-or-no-p (format "The From looks strange: \"%s\". Really post? " *************** *** 11716,11722 **** (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) ! (replace-match "") ;; This hook may insert a signature. (run-hooks 'gnus-prepare-article-hook) ;; Run final inews hooks. This hook may do FCC. --- 11697,11703 ---- (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) ! (replace-match "" t t) ;; This hook may insert a signature. (run-hooks 'gnus-prepare-article-hook) ;; Run final inews hooks. This hook may do FCC. *************** *** 11833,11839 **** (save-excursion (goto-char (point-max)) (insert (symbol-name header) ": " value "\n")) ! (replace-match value)))) (setq headers (cdr headers))))) (defun gnus-inews-insert-signature () --- 11814,11820 ---- (save-excursion (goto-char (point-max)) (insert (symbol-name header) ": " value "\n")) ! (replace-match value t t)))) (setq headers (cdr headers))))) (defun gnus-inews-insert-signature () *************** *** 12056,12062 **** (insert organization)) (goto-char (point-min)) (while (re-search-forward " *\n *" nil t) ! (replace-match " ")) (buffer-substring (point-min) (point-max)))))) (defun gnus-inews-lines () --- 12037,12043 ---- (insert organization)) (goto-char (point-min)) (while (re-search-forward " *\n *" nil t) ! (replace-match " " t t)) (buffer-substring (point-min) (point-max)))))) (defun gnus-inews-lines () *************** *** 12525,12531 **** (string= gnus-nntp-server "::")) (list 'nnspool (system-name))) ((string-match ":" gnus-nntp-server) ! (list 'nnmh gnus-nntp-server)) (t (list 'nntp gnus-nntp-server))))) --- 12506,12517 ---- (string= gnus-nntp-server "::")) (list 'nnspool (system-name))) ((string-match ":" gnus-nntp-server) ! (list 'nnmh gnus-nntp-server ! (list 'nnmh-directory ! (file-name-as-directory ! (expand-file-name ! (concat "~/" (substring ! 1 gnus-nntp-server))))))) (t (list 'nntp gnus-nntp-server))))) *************** *** 12807,12812 **** --- 12793,12800 ---- (gnus-read-active-file) (setq gnus-active-hashtb (make-vector 4095 0))) + (and init gnus-use-dribble-file (gnus-dribble-read-file)) + ;; Find the number of unread articles in each non-dead group. (gnus-get-unread-articles (or level (1+ gnus-level-subscribed))) ;; Find new newsgroups and treat them. *************** *** 13579,13586 **** (buffer-disable-undo (current-buffer)) (gnus-newsrc-to-gnus-format) (kill-buffer (current-buffer)) ! (message "Reading %s... done" newsrc-file))) ! (and gnus-use-dribble-file (gnus-dribble-read-file))))) (defun gnus-read-newsrc-el-file (file) (let ((ding-file (concat file "d"))) --- 13567,13573 ---- (buffer-disable-undo (current-buffer)) (gnus-newsrc-to-gnus-format) (kill-buffer (current-buffer)) ! (message "Reading %s... done" newsrc-file)))))) (defun gnus-read-newsrc-el-file (file) (let ((ding-file (concat file "d"))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnfolder.el dgnus/lisp/nnfolder.el *** pub/dgnus/lisp/nnfolder.el Fri Apr 21 02:40:34 1995 --- dgnus/lisp/nnfolder.el Fri Apr 21 05:09:08 1995 *************** *** 40,45 **** --- 40,49 ---- (defvar nnfolder-active-file (concat nnfolder-directory "active") "The name of the active file.") + (defvar nnfolder-active-file-paranoia nil + "If non-nil, causes nnfolder to do some extra work in order to + determine the true active ranges of an mbox file.") + (defvar nnfolder-newsgroups-file (concat nnfolder-directory "newsgroups") "Mail newsgroups description file.") *************** *** 152,158 **** (defun nnfolder-request-close () (let ((alist nnfolder-buffer-alist)) (while alist ! (nnfolder-close-group (car (car alist))) (setq alist (cdr alist)))) (setq nnfolder-buffer-alist nil nnfolder-group-alist nil)) --- 156,162 ---- (defun nnfolder-request-close () (let ((alist nnfolder-buffer-alist)) (while alist ! (nnfolder-close-group (car (car alist)) nil t) (setq alist (cdr alist)))) (setq nnfolder-buffer-alist nil nnfolder-group-alist nil)) *************** *** 210,225 **** (car active)))) t))))) ! (defun nnfolder-close-group (group &optional server) (nnfolder-possibly-change-group group) (save-excursion (set-buffer nnfolder-current-buffer) ! (or (buffer-modified-p) ! (kill-buffer (current-buffer)))) ! (setq nnfolder-buffer-alist (delq (assoc group nnfolder-buffer-alist) ! nnfolder-buffer-alist)) ! (setq nnfolder-current-group nil ! nnfolder-current-buffer nil) t) (defun nnfolder-request-list (&optional server) --- 214,239 ---- (car active)))) t))))) ! ;; Don't close the buffer if we're not shutting down the server. This way, ! ;; we can keep the buffer in the group buffer cache, and not have to grovel ! ;; over the buffer again unless we add new mail to it or modify it in some ! ;; way. ! ! (defun nnfolder-close-group (group &optional server force) (nnfolder-possibly-change-group group) (save-excursion (set-buffer nnfolder-current-buffer) ! ;; If the buffer was modified, write the file out now. ! (save-buffer) ! (if force ! ;; If we're shutting the server down, we need to kill the buffer and ! ;; remove it from the open buffer list. ! (progn ! (kill-buffer (current-buffer)) ! (setq nnfolder-buffer-alist (delq (assoc group nnfolder-buffer-alist) ! nnfolder-buffer-alist)))) ! (setq nnfolder-current-group nil ! nnfolder-current-buffer nil)) t) (defun nnfolder-request-list (&optional server) *************** *** 322,328 **** (insert "From nobody " (current-time-string) "\n")) (and (nnfolder-request-list) - (setq nnfolder-group-alist (nnmail-get-active)) (progn (set-buffer buf) (goto-char (point-min)) --- 336,341 ---- *************** *** 330,343 **** (forward-line -1) (while (re-search-backward "^X-Gnus-Newsgroup: " nil t) (delete-region (point) (progn (forward-line 1) (point)))) ! (setq result (nnfolder-save-mail (and (stringp group) group)))) (save-excursion (set-buffer nnfolder-current-buffer) (insert-buffer-substring buf) (and last (save-buffer)) result) (nnmail-save-active nnfolder-group-alist nnfolder-active-file)) ! (car result))) (defun nnfolder-request-replace-article (article group buffer) (nnfolder-possibly-change-group group) --- 343,356 ---- (forward-line -1) (while (re-search-backward "^X-Gnus-Newsgroup: " nil t) (delete-region (point) (progn (forward-line 1) (point)))) ! (setq result (car (nnfolder-save-mail (and (stringp group) group))))) (save-excursion (set-buffer nnfolder-current-buffer) (insert-buffer-substring buf) (and last (save-buffer)) result) (nnmail-save-active nnfolder-group-alist nnfolder-active-file)) ! result)) (defun nnfolder-request-replace-article (article group buffer) (nnfolder-possibly-change-group group) *************** *** 390,396 **** (if (and (equal group nnfolder-current-group) (buffer-name nnfolder-current-buffer)) () ! (if (setq inf (member group nnfolder-buffer-alist)) (setq nnfolder-current-buffer (nth 1 inf))) (setq nnfolder-current-group group) (if (not (buffer-name nnfolder-current-buffer)) --- 403,409 ---- (if (and (equal group nnfolder-current-group) (buffer-name nnfolder-current-buffer)) () ! (if (setq inf (assoc group nnfolder-buffer-alist)) (setq nnfolder-current-buffer (nth 1 inf))) (setq nnfolder-current-group group) (if (not (buffer-name nnfolder-current-buffer)) *************** *** 414,422 **** (if group (list (list group "")) nnmail-split-methods)) (group-art-list (nreverse (nnmail-article-group 'nnfolder-active-number))) ! group-art) (nnmail-insert-lines) (nnmail-insert-xref group-art-list) (while group-art-list (setq group-art (car group-art-list) group-art-list (cdr group-art-list)) --- 427,445 ---- (if group (list (list group "")) nnmail-split-methods)) (group-art-list (nreverse (nnmail-article-group 'nnfolder-active-number))) ! save-list group-art) ! (setq save-list group-art-list) (nnmail-insert-lines) (nnmail-insert-xref group-art-list) + + ;; Kill the previous newsgroup markers. + (goto-char (point-min)) + (search-forward "\n\n" nil t) + (forward-line -1) + (while (re-search-backward (concat "^" nnfolder-article-marker) nil t) + (delete-region (point) (progn (forward-line 1) (point)))) + + ;; Insert the mail into each of the destination groups. (while group-art-list (setq group-art (car group-art-list) group-art-list (cdr group-art-list)) *************** *** 428,438 **** (save-excursion (set-buffer nnfolder-current-buffer) (goto-char (point-max)) ! (insert-buffer-substring obuf beg end))) ! (goto-char (point-min)) ! (search-forward (concat "\n" nnfolder-article-marker)) ! (delete-region (progn (beginning-of-line) (point)) ! (progn (forward-line 1) (point)))))) (defun nnfolder-insert-newsgroup-line (group-art) (save-excursion --- 451,460 ---- (save-excursion (set-buffer nnfolder-current-buffer) (goto-char (point-max)) ! (insert-buffer-substring obuf beg end)))) ! ! ;; Did we save it anywhere? ! save-list)) (defun nnfolder-insert-newsgroup-line (group-art) (save-excursion *************** *** 488,496 **** (goto-char (point-min)) ;; ;; Anytime the active number is 1 or 0, it is supect. In that case, ! ;; search the file manually to find the active number. (setq activenumber (cdr active)) ! (if (< activenumber 2) (progn (while (and (search-forward marker nil t) (re-search-forward number nil t)) --- 510,522 ---- (goto-char (point-min)) ;; ;; Anytime the active number is 1 or 0, it is supect. In that case, ! ;; search the file manually to find the active number. Or, of course, ! ;; if we're being paranoid. (This would also be the place to build ! ;; other lists from the header markers, such as expunge lists, etc., if ! ;; we ever desired to abandon the active file entirely for mboxes.) (setq activenumber (cdr active)) ! (if (or nnfolder-active-file-paranoia ! (< activenumber 2)) (progn (while (and (search-forward marker nil t) (re-search-forward number nil t)) *************** *** 498,503 **** --- 524,542 ---- (string-to-number (buffer-substring (match-beginning 0) (match-end 0)))))) + (goto-char (point-min)))) + + ;; + ;; If we're being paranoid, verify the minimum number as well. + (if nnfolder-active-file-paranoia + (let ((activemin activenumber)) + (while (and (search-forward marker nil t) + (re-search-forward number nil t)) + (setq activemin (min activemin + (string-to-number (buffer-substring + (match-beginning 0) + (match-end 0)))))) + (setcar active activemin) (goto-char (point-min)))) ;; Keep track of the active number on our own, and insert it back into diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmail.el dgnus/lisp/nnmail.el *** pub/dgnus/lisp/nnmail.el Fri Apr 21 02:40:34 1995 --- dgnus/lisp/nnmail.el Fri Apr 21 04:58:29 1995 *************** *** 239,245 **** (defun nnmail-move-inbox (inbox tofile) (let ((inbox (file-truename (expand-file-name (substitute-in-file-name inbox)))) ! (tofile (make-temp-name (expand-file-name tofile))) movemail popmail errors) ;; Check whether the inbox is to be moved to the special tmp dir. (if nnmail-tmp-directory --- 239,245 ---- (defun nnmail-move-inbox (inbox tofile) (let ((inbox (file-truename (expand-file-name (substitute-in-file-name inbox)))) ! (tofile (nnmail-make-complex-temp-name (expand-file-name tofile))) movemail popmail errors) ;; Check whether the inbox is to be moved to the special tmp dir. (if nnmail-tmp-directory *************** *** 479,484 **** --- 479,493 ---- (cdr (car group-alist)))) (setq group-alist (cdr group-alist))) (insert "\n"))))) + + ;; Written by byer@mv.us.adobe.com (Scott Byer). + (defun nnmail-make-complex-temp-name (prefix) + (let ((newname (make-temp-name prefix)) + (newprefix prefix)) + (while (file-exists-p newname) + (setq newprefix (concat newprefix "x")) + (setq newname (make-temp-name newprefix))) + newname)) (provide 'nnmail) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnspool.el dgnus/lisp/nnspool.el *** pub/dgnus/lisp/nnspool.el Fri Apr 21 02:40:34 1995 --- dgnus/lisp/nnspool.el Fri Apr 21 04:21:38 1995 *************** *** 277,283 **** (while (and (not (looking-at "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] ")) (zerop (forward-line -1)))) ! (let ((seconds (nnspool-seconds-since-epoch)) groups) ;; Go through lines and add the latest groups to a list. (while (and (looking-at "\\([^ ]+\\) +[0-9]+ ") --- 277,283 ---- (while (and (not (looking-at "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] ")) (zerop (forward-line -1)))) ! (let ((seconds (nnspool-seconds-since-epoch date)) groups) ;; Go through lines and add the latest groups to a list. (while (and (looking-at "\\([^ ]+\\) +[0-9]+ ") *************** *** 442,451 **** (setcar num (/ (car num) 10)) (nnspool-number-base-10 num (1- pos)))))))) ! (defun nnspool-seconds-since-epoch () ! (let ((time (current-time))) ! (+ (* 1.0 (car time) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2) ! (nth 1 time)))) (provide 'nnspool) --- 442,463 ---- (setcar num (/ (car num) 10)) (nnspool-number-base-10 num (1- pos)))))))) ! (defun nnspool-seconds-since-epoch (date) ! (let* ((tdate (mapcar (lambda (ti) (and ti (string-to-int ti))) ! (timezone-parse-date date))) ! (ttime (mapcar (lambda (ti) (and ti (string-to-int ti))) ! (timezone-parse-time ! (aref (timezone-parse-date date) 3)))) ! (edate (mapcar (lambda (ti) (and ti (string-to-int ti))) ! (timezone-parse-date "Jan 1 12:00:00 1970"))) ! (tday (- (timezone-absolute-from-gregorian ! (nth 1 tdate) (nth 2 tdate) (nth 0 tdate)) ! (timezone-absolute-from-gregorian ! (nth 1 edate) (nth 2 edate) (nth 0 edate))))) ! (+ (nth 2 ttime) ! (* (nth 1 ttime) 60) ! (* 1.0 (nth 0 ttime) 60 60) ! (* 1.0 tday 60 60 24)))) (provide 'nnspool) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nntp.el dgnus/lisp/nntp.el *** pub/dgnus/lisp/nntp.el Fri Apr 21 02:40:34 1995 --- dgnus/lisp/nntp.el Fri Apr 21 04:45:58 1995 *************** *** 26,31 **** --- 26,32 ---- ;;; Code: (require 'rnews) + (require 'sendmail) (require 'nnheader) (eval-and-compile diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/texi/gnus.texi dgnus/texi/gnus.texi *** pub/dgnus/texi/gnus.texi Fri Apr 21 02:40:40 1995 --- dgnus/texi/gnus.texi Fri Apr 21 04:45:56 1995 *************** *** 2029,2034 **** --- 2029,2039 ---- mail-to-news gateway. Posting directly to this group is therefore impossible - you have to send mail to the mailing list address instead. + @item to-group + @cindex to-group + IF the group parameter list contains an element like @code{(to-group + . "some.group.name")}, all posts will be sent to that groups. + @item auto-expire @cindex auto-expire If this symbol is present in the group parameter list, all articles that *************** *** 2544,2549 **** --- 2549,2566 ---- buffer, searching for the next group to read without actually returning to the group buffer. + @vindex gnus-auto-select-same + If @code{gnus-auto-select-same} is non-@code{nil}, all the movement + commands wil try to go to the next article with the same subject as the + current. This variable is not particularly useful if you use a threaded + display. + + @vindex gnus-summary-check-current + If @code{gnus-summary-check-current} is non-@code{nil}, all the "unread" + movement commands will not proceed to the next (or previous) article if + the current article is unread. Instead, they will choose the current + article. + @vindex gnus-auto-center-summary If @code{gnus-auto-center-summary} is non-@code{nil}, Gnus will keep the point in the summary buffer centered at all times. This makes things *************** *** 3259,3269 **** All articles that you have replied to or made a followup to will be marked with an @samp{R} in the second column (@code{gnus-replied-mark}). ! Finally we have the @dfn{process mark}. A variety of commands react to ! the presence of the process mark. For instance, @kbd{X u} ! (@code{gnus-uu-decode-uu}) will uudecode and view all articles that have ! been marked with the process mark. Articles marked with the process ! mark have a @samp{#} in the second column. @node Setting Marks @subsection Setting Marks --- 3276,3293 ---- All articles that you have replied to or made a followup to will be marked with an @samp{R} in the second column (@code{gnus-replied-mark}). ! @vindex gnus-not-empty-thread-mark ! @vindex gnus-empty-thread-mark ! It the @samp{%e} spec is used, the presence of threads or not will be ! marked with @code{gnus-not-empty-thread-mark} and ! @code{gnus-empty-thread-mark}, respectively. ! ! @vindex gnus-process-mark ! Finally we have the @dfn{process mark} (@code{gnus-process-mark}. A ! variety of commands react to the presence of the process mark. For ! instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view ! all articles that have been marked with the process mark. Articles ! marked with the process mark have a @samp{#} in the second column. @node Setting Marks @subsection Setting Marks