-Thu Oct 19 10:08:24 1995 Lars Magne Ingebrigtsen <larsi@narfi.ifi.uio.no>
+Tue Oct 24 22:11:44 1995 Peter Arius <arius@informatik.uni-erlangen.de>
+
+ * gnus.el (gnus-summary-skip-intangible): Quotes missing in macro
+ body; turned into an inline function.
+ (gnus-summary-article-intangible-p): dito.
+ (gnus-summary-article-number): Didn't skip intangible articles
+ when compiled. Turned from macro into an inline function.
+
+Thu Oct 26 00:04:57 1995 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-msg.el (gnus-new-news): Would bug out on nil group names.
+
+ * gnus-mh.el (gnus-mh-mail-send-and-exit): Use mh's send-letter
+ function.
+
+ * gnus.el (gnus-summary-number-of-articles-in-thread): Don't count
+ limited articles.
+ (gnus-summary-number-of-articles-in-thread): Count false roots
+ correctly.
+
+ * gnus-msg.el (gnus-inews-do-fcc): Expand the FCC file name.
+
+ * gnus.el (gnus-summary-read-group): Update summary line after
+ setting the initial limit.
+ (gnus-summary-mode-map): Moved all limit commands to the `/'
+ submap.
- * gnus-msg.el (gnus-inews-send-mail-copy): Changed X-Courtesy-Copy
- to Posted-To.
+ * gnus-msg.el (gnus-new-mail): Didn't run `gnus-mail-hook'.
+Wed Oct 25 22:45:44 1995 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-mh.el (gnus-mh-mail-setup): Didn't set `gnus-mail-buffer'.
+
+ * gnus.el (gnus-compile): Didn't really work.
+
+ * nnbabyl.el (nnbabyl-request-article): Handle Summary-Line.
+
+ * gnus-topic.el: Didn't really work.
+
+ * gnus.el (gnus-parse-simple-format): Bugged out on user format
+ functions.
+ (gnus-group-make-help-group): Don't signal errors on non-retrieval
+ of the doc group.
+ (gnus-summary-toggle-header): Would delete functions from hook
+ forever.
+
+Thu Oct 19 10:08:24 1995 Lars Magne Ingebrigtsen <larsi@narfi.ifi.uio.no>
+
+ * gnus-msg.el (gnus-inews-send-mail-copy): Changed X-Courtesy-Copy
+ to Posted-To.
+
Mon Oct 16 11:57:14 1995 Lars Ingebrigtsen <lars@eyesore.no>
* gnus.el (gnus-group-foreign-p): New definition. Secondary
some:
$(EMACS) $(FLAGS) -f dgnushack-recompile
+tags:
+ etags *.el
+
separately:
rm -f *.elc ; for i in *.el; do $(EMACS) $(FLAGS) -f batch-byte-compile $i; done
(set-buffer gnus-article-buffer)
(gnus-cite-parse-maybe force)
(goto-char (point-min))
- (search-forward "\n\n")
+ (search-forward "\n\n" nil t)
(let ((start (point))
(atts gnus-cite-attribution-alist)
(buffer-read-only nil)
;; Parse current buffer searching for attribution lines.
(goto-char (point-min))
- (search-forward "\n\n")
+ (search-forward "\n\n" nil t)
(while (re-search-forward gnus-cite-attribution-suffix (point-max) t)
(let* ((start (match-beginning 0))
(end (match-end 0))
(and in-reply-to (insert "In-Reply-To: " in-reply-to "\n"))
(setq mh-sent-from-folder gnus-article-copy)
(setq mh-sent-from-msg 1)
+ (setq gnus-mail-buffer (buffer-name (current-buffer)))
+ (local-set-key "\C-c\C-c" 'gnus-mh-mail-send-and-exit)
(setq mh-previous-window-config config)))
+(defun gnus-mh-mail-send-and-exit (&optional dont-send)
+ "Send the current mail and return to Gnus."
+ (interactive)
+ (let* ((reply gnus-article-reply)
+ (winconf gnus-prev-winconf)
+ (address-group gnus-add-to-address)
+ (to-address (and address-group
+ (mail-fetch-field "to"))))
+ (setq gnus-add-to-address nil)
+ (or dont-send (mh-send-letter))
+ (bury-buffer)
+ ;; This mail group doesn't have a `to-address', so we add one
+ ;; here. Magic!
+ (and to-address
+ (gnus-group-add-parameter
+ address-group (cons 'to-address to-address)))
+ (if (get-buffer gnus-group-buffer)
+ (progn
+ (if (gnus-buffer-exists-p (car-safe reply))
+ (progn
+ (set-buffer (car reply))
+ (and (cdr reply)
+ (gnus-summary-mark-article-as-replied
+ (cdr reply)))))
+ (and winconf (set-window-configuration winconf))))))
+
(defun gnus-Folder-save-name (newsgroup headers &optional last-folder)
"Generate folder name from NEWSGROUP, HEADERS, and optional LAST-FOLDER.
If variable `gnus-use-long-file-name' is nil, it is +News.group.
(call-process-region (point-min) (point-max) shell-file-name
nil nil nil "-c" program)))
(t
+ (setq fcc-file (expand-file-name fcc-file))
;; Suggested by hyoko@flab.fujitsu.junet.
;; Save article in Unix mail format by default.
(gnus-make-directory (file-name-directory fcc-file))
(pop-to-buffer gnus-mail-buffer)
(erase-buffer)
(gnus-mail-setup 'new to)
- (gnus-inews-modify-mail-mode-map))
+ (run-hooks 'gnus-mail-hook))
(defun gnus-mail-reply (&optional yank to-address followup)
(save-excursion
(setq gnus-in-reply-to message-of)
(auto-save-mode auto-save-default)
- (gnus-inews-modify-mail-mode-map)
(if (and follow-to (listp follow-to))
(progn
(news-reply-mode)
;; Let posting styles be configured.
(gnus-configure-posting-styles)
- (news-setup nil subject nil (gnus-group-real-name group) nil)
+ (news-setup nil subject nil (and group (gnus-group-real-name group)) nil)
(gnus-inews-insert-signature)
(and gnus-post-prepare-function
(symbolp gnus-post-prepare-function)
()
(erase-buffer)
(gnus-mail-setup 'forward nil subject)
- (gnus-inews-modify-mail-mode-map)
(make-local-variable 'gnus-prev-winconf)
(setq gnus-prev-winconf winconf)
(gnus-forward-insert-buffer forward-buffer)
(goto-char (point-min))
- (re-search-forward "^To: " nil t)
+ (re-search-forward "^To: ?" nil t)
(gnus-configure-windows 'mail-forward 'force)
;; You have a chance to arrange the message.
(run-hooks 'gnus-mail-forward-hook)
(funcall
(cond
((or
- (and (eq type 'reply)
+ (and (or (eq type 'reply) (eq type 'followup))
(eq gnus-mail-reply-method 'gnus-mail-reply-using-mhe))
(and (eq type 'forward)
(eq gnus-mail-forward-method 'gnus-mail-forward-using-mhe))
'gnus-mail-other-window-using-mhe)))
'gnus-mh-mail-setup)
((or
- (and (eq type 'reply)
+ (and (or (eq type 'reply) (eq type 'followup))
(eq gnus-mail-reply-method 'gnus-mail-reply-using-vm))
(and (eq type 'forward)
(eq gnus-mail-forward-method 'gnus-mail-forward-using-vm))
(defun gnus-sendmail-mail-setup (to subject in-reply-to cc replybuffer actions)
(mail-mode)
- (mail-setup to subject nil cc replybuffer actions))
+ (mail-setup to subject nil cc replybuffer actions)
+ (gnus-inews-modify-mail-mode-map))
;;; Gcc handling.
(defvar gnus-score-cache nil)
(defvar gnus-scores-articles nil)
-(defvar gnus-scores-exclude-files nil)
(defvar gnus-header-index nil)
(defvar gnus-score-index nil)
;;; Code:
(require 'gnus)
+(eval-when-compile (require 'cl))
(defvar gnus-group-topic-face 'bold
"*Face used to highlight topic headers.")
the groups are always shown if SHOW is true or never if SHOW is a
number.")
+(defvar gnus-topic-names nil
+ "A list of all topic names.")
+
(defvar gnus-topic-names nil
"A list of all topic names.")
"The name of the topic on the current line."
(get-text-property (gnus-point-at-bol) 'gnus-topic))
-(defun gnus-group-prepare-topics (level &optional all lowest regexp topic)
+(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.
(lowest (or lowest 1))
tlist info)
- (or topic (erase-buffer))
+ (or list-topic (erase-buffer))
;; List dead groups?
(and (>= level gnus-level-zombie) (<= lowest gnus-level-zombie)
gnus-level-killed ?K
regexp))
- ;; Use topics
+ ;; Use topics.
(if (< lowest gnus-level-zombie)
- (let ((topics (gnus-topic-find-groups topic))
+ (let ((topics (gnus-topic-find-groups list-topic level all))
topic how)
(setq gnus-topic-names topics)
- (erase-buffer)
(while topics
(setq topic (car (car topics))
tlist (cdr (car topics))
topics (cdr topics))
;; Insert the topic.
- (add-text-properties
- (point)
- (progn
- (insert topic "\n")
- (point))
- (list 'mouse-face gnus-mouse-face
- 'face gnus-group-topic-face
- 'gnus-topic topic))
+ (unless list-topic
+ (add-text-properties
+ (point)
+ (progn
+ (insert topic "\n")
+ (point))
+ (list 'mouse-face gnus-mouse-face
+ 'face gnus-group-topic-face
+ 'gnus-topic topic)))
;; We insert the groups for the topics we want to have.
(if (and (or (and (not how) (not gnus-group-topic-topics-only))
(setq gnus-group-list-mode (cons level all))
(run-hooks 'gnus-group-prepare-hook))
-(defun gnus-topic-find-groups (&optional topic)
+(defun gnus-topic-find-groups (&optional topic level all)
"Find all topics and all groups in all topics.
If TOPIC, just find the groups in that topic."
(let ((newsrc (cdr gnus-newsrc-alist))
- (topics (mapcar (lambda (e) (list (car e)))
- gnus-group-topics))
+ (topics (if topic
+ (list (list topic))
+ (mapcar (lambda (e) (list (car e)))
+ gnus-group-topics)))
(topic-alist (if topic (list (assoc topic gnus-group-topics))
gnus-group-topics))
- info clevel unread group w lowest level all gtopic)
+ info clevel unread group w lowest gtopic)
(setq lowest (or lowest 1))
+ (setq all (or all nil))
+ (setq level (or level 7))
;; We go through the newsrc to look for matches.
(while newsrc
(setq info (car newsrc)
unread (car (gnus-gethash group gnus-newsrc-hashtb)))
(and
unread ; nil means that the group is dead.
- (setq clevel (car (cdr info)))
+ (<= (setq clevel (car (cdr info))) level)
(>= clevel lowest) ; Is inside the level we want.
(or all
(eq unread t)
(defun gnus-topic-insert-topic (topic)
"Insert TOPIC."
+ (setq gnus-topics-not-listed (delete topic gnus-topics-not-listed))
(gnus-group-prepare-topics
- (car gnus-group-list-mode) (cdr gnus-group-list-mode)
- nil nil topic))
+ (car gnus-group-list-mode) (cdr gnus-group-list-mode)
+ nil nil topic))
(defun gnus-topic-fold ()
"Remove/insert the current topic."
(let ((topic (gnus-group-topic-name)))
- (if (not topic)
- () ; Nothing to do.
+ (when topic
(save-excursion
(if (not (member topic gnus-topics-not-listed))
;; If the topic is visible, we remove it.
(defvar gnus-current-score-file nil)
(defvar gnus-internal-global-score-files nil)
(defvar gnus-score-file-list nil)
+(defvar gnus-scores-exclude-files nil)
(defvar gnus-opened-servers nil)
(?z gnus-tmp-score-char ?c)
(?U gnus-tmp-unread ?c)
(?t (gnus-summary-number-of-articles-in-thread
- (and (boundp 'thread) (car thread)))
+ (and (boundp 'thread) (car thread)) gnus-tmp-level)
?d)
(?e (gnus-summary-number-of-articles-in-thread
- (and (boundp 'thread) (car thread)) t)
+ (and (boundp 'thread) (car thread)) gnus-tmp-level t)
?c)
(?u gnus-tmp-user-defined ?s)))
"An alist of format specifications that can appear in summary lines,
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "September Gnus v0.11"
+(defconst gnus-version "September Gnus v0.12"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
(defvar gnus-newsgroup-threads nil)
+(defvar gnus-newsgroup-threads nil)
+
(defvar gnus-newsgroup-ancient nil
"List of `gnus-fetch-old-headers' articles in the current newsgroup.")
(setq address (substring from (match-beginning 0) (match-end 0))))
;; Then we check whether the "name <address>" format is used.
(and address
- (string-match (concat "<" (regexp-quote address) ">") from)
- (and (setq name (substring from 0 (1- (match-beginning 0))))
+ ;; Fix by MORIOKA Tomohiko <morioka@jaist.ac.jp>
+ ;; Linear white space is not required.
+ (string-match (concat "[ \t]*<" (regexp-quote address) ">") from)
+ (and (setq name (substring from 0 (match-beginning 0)))
;; Strip any quotes from the name.
(string-match "\".*\"" name)
(setq name (substring name 1 (1- (match-end 0))))))
(gnus-set-work-buffer)
(insert format)
(goto-char (point-min))
- (while (re-search-forward "%[-0-9]*\\(,[0-9]*\\)*\\(.\\)\\(.\\)?" nil t)
+ (while (re-search-forward "%[-0-9]*\\(,[0-9]+\\)?\\([^0-9]\\)\\(.\\)?" nil t)
(setq spec (string-to-char (buffer-substring (match-beginning 2)
(match-end 2))))
;; First check if there are any specs that look anything like
(buffer-substring
(match-beginning 3)
(match-end 3))))
- 'header)
+ 'gnus-tmp-header)
?s))
(delete-region (match-beginning 3) (match-end 3)))
(if (not (zerop max-width))
(setq gnus-buffer-list (cdr gnus-buffer-list))))
(defun gnus-windows-old-to-new (setting)
+ ;; First we take care of the really, really old Gnus 3 actions.
(if (symbolp setting)
(setq setting
- (cond ((eq setting 'SelectArticle)
+ (cond ((memq setting '(SelectArticle))
'article)
- ((eq setting 'SelectSubject)
+ ((memq setting '(SelectSubject ExpandSubject))
'summary)
- ((eq setting 'SelectNewsgroup)
+ ((memq setting '(SelectNewsgroup ExitNewsgroup))
'group)
(t setting))))
(if (or (listp setting)
"Byte-compile the Gnus startup file.
This will also compile the user-defined format specs."
(interactive)
- (let ((file (make-temp-name "/tmp/gnuss")))
+ (let ((file (concat (make-temp-name "/tmp/gnuss") ".el")))
(save-excursion
(gnus-message 7 "Compiling user file...")
(nnheader-set-temp-buffer " *compile gnus*")
"-line-format-spec (list 'gnus-byte-code 'gnus-"
format "-line-format-spec))\n"))
- (insert "(setq gnus-old-specs '" (prin1-to-string fs) "\n")
+ (insert "(setq gnus-old-specs '" (prin1-to-string fs) ")\n")
(write-region (point-min) (point-max) file nil 'silent)
(byte-compile-file file)
(rename-file
- (concat file ".elc")
+ (concat file "c")
(concat gnus-init-file
(if (string-match "\\.el$" gnus-init-file) "c" ".elc"))
t)
- (delete-file file)
+ (when (file-exists-p file)
+ (delete-file file))
(kill-buffer (current-buffer)))
(gnus-message 7 "Compiling user file...done"))))
(not (file-exists-p (concat (file-name-as-directory (car path))
"doc.txt"))))
(setq path (cdr path)))
- (or path (error "Couldn't find doc group"))
- (gnus-group-make-group
- (gnus-group-real-name name)
- (list 'nndoc name
- (list 'nndoc-address
- (concat (file-name-as-directory (car path)) "doc.txt"))
- (list 'nndoc-article-type 'mbox)))
- (forward-line -1))
+ (if (not path)
+ (message "Couldn't find doc group")
+ (gnus-group-make-group
+ (gnus-group-real-name name)
+ (list 'nndoc name
+ (list 'nndoc-address
+ (concat (file-name-as-directory (car path)) "doc.txt"))
+ (list 'nndoc-article-type 'mbox)))
+ (forward-line -1)))
(gnus-group-position-point))
(defun gnus-group-make-doc-group (file type)
(define-key gnus-summary-mode-map "\C-t" 'gnus-summary-toggle-truncation)
(define-key gnus-summary-mode-map "?" 'gnus-summary-mark-as-dormant)
(define-key gnus-summary-mode-map
- "\C-c\M-\C-s" 'gnus-summary-show-all-expunged)
+ "\C-c\M-\C-s" 'gnus-summary-limit-include-expunged)
(define-key gnus-summary-mode-map
"\C-c\C-s\C-n" 'gnus-summary-sort-by-number)
(define-key gnus-summary-mode-map
(define-key gnus-summary-mode-map "\C-d" 'gnus-summary-enter-digest-group)
(define-key gnus-summary-mode-map "v" 'gnus-summary-verbose-headers)
(define-key gnus-summary-mode-map "\C-c\C-b" 'gnus-bug)
- (define-key gnus-summary-mode-map "/" 'gnus-summary-limit-to-subject)
;; Sort of orthogonal keymap
(define-key gnus-summary-mark-map "B" 'gnus-summary-remove-bookmark)
(define-key gnus-summary-mark-map "#" 'gnus-summary-mark-as-processable)
(define-key gnus-summary-mark-map "\M-#" 'gnus-summary-unmark-as-processable)
- (define-key gnus-summary-mark-map "S" 'gnus-summary-show-all-expunged)
+ (define-key gnus-summary-mark-map "S" 'gnus-summary-limit-include-expunged)
(define-key gnus-summary-mark-map "C" 'gnus-summary-catchup)
(define-key gnus-summary-mark-map "H" 'gnus-summary-catchup-to-here)
(define-key gnus-summary-mark-map "\C-c" 'gnus-summary-catchup-all)
(define-key gnus-summary-mode-map "S" 'gnus-summary-send-map)
(define-prefix-command 'gnus-summary-limit-map)
- (define-key gnus-summary-mark-map "N" 'gnus-summary-limit-map)
+ (define-key gnus-summary-mark-map "/" 'gnus-summary-limit-map)
+ (define-key gnus-summary-limit-map "/" 'gnus-summary-limit-to-subject)
(define-key gnus-summary-limit-map "n" 'gnus-summary-limit-to-articles)
(define-key gnus-summary-limit-map "w" 'gnus-summary-pop-limit)
(define-key gnus-summary-limit-map "s" 'gnus-summary-limit-to-subject)
(define-key gnus-summary-limit-map "v" 'gnus-summary-limit-to-score)
(define-key gnus-summary-limit-map "D" 'gnus-summary-limit-include-dormant)
(define-key gnus-summary-limit-map "d" 'gnus-summary-limit-exclude-dormant)
+ (define-key gnus-summary-mark-map "E" 'gnus-summary-limit-include-expunged)
(define-key gnus-summary-limit-map "c"
'gnus-summary-limit-exclude-childless-dormant)
(run-hooks 'gnus-summary-update-hook))
(forward-line 1)))))))
-(defvar gnus-tmp-gathered nil)
+(defvar gnus-tmp-new-adopts)
-(defun gnus-summary-number-of-articles-in-thread (thread &optional char)
+(defun gnus-summary-number-of-articles-in-thread (thread &optional level char)
;; Sum up all elements (and sub-elements) in a list.
(let* ((number
;; Fix by Luc Van Eycken <Luc.VanEycken@esat.kuleuven.ac.be>.
- (if (and (consp thread) (cdr thread))
- (apply
- '+ 1 (mapcar
- 'gnus-summary-number-of-articles-in-thread
- (cdr thread)))
- 1)))
+ (cond ((and (consp thread) (cdr thread))
+ (apply
+ '+ 1 (mapcar
+ 'gnus-summary-number-of-articles-in-thread
+ (cdr thread))))
+ ((null thread)
+ 1)
+ ((and level (zerop level) gnus-tmp-new-adopts)
+ (apply '+ 1 (mapcar
+ 'gnus-summary-number-of-articles-in-thread
+ gnus-tmp-new-adopts)))
+ ((memq (mail-header-number (car thread))
+ gnus-newsgroup-limit)
+ 1)
+ (t 0))))
(if char
(if (> number 1) gnus-not-empty-thread-mark
gnus-empty-thread-mark)
(gnus-update-format-specifications)
;; Find the initial limit.
(gnus-summary-initial-limit)
+ (gnus-set-mode-line 'summary)
;; Generate the summary buffer.
(or no-display
(gnus-summary-prepare))
(cond (gnus-newsgroup-dormant
(gnus-summary-limit-include-dormant))
((and gnus-newsgroup-scored show-all)
- (gnus-summary-show-all-expunged))))
+ (gnus-summary-limit-include-expunged))))
;; Function `gnus-apply-kill-file' must be called in this hook.
(run-hooks 'gnus-apply-kill-hook)
(if (zerop (buffer-size))
(let ((level 0)
thread header number subject stack state gnus-tmp-gathered mark
- new-roots new-adopts thread-end)
+ new-roots gnus-tmp-new-adopts thread-end)
(setq gnus-tmp-prev-subject nil)
;; Do the threaded display.
- (while (or threads stack new-adopts new-roots)
+ (while (or threads stack gnus-tmp-new-adopts new-roots)
(if (and (= level 0)
(progn (setq gnus-tmp-dummy-line nil) t)
(or (not stack)
(= (car (car stack)) 0))
(not gnus-tmp-false-parent)
- (or new-adopts new-roots))
+ (or gnus-tmp-new-adopts new-roots))
(progn
- (if new-adopts
+ (if gnus-tmp-new-adopts
(setq level (if gnus-tmp-root-expunged 0 1)
- thread (list (car new-adopts))
+ thread (list (car gnus-tmp-new-adopts))
header (car (car thread))
- new-adopts (cdr new-adopts))
+ gnus-tmp-new-adopts (cdr gnus-tmp-new-adopts))
(if new-roots
(setq thread (list (car new-roots))
header (car (car thread))
(cond
((eq gnus-summary-make-false-root 'adopt)
;; We let the first article adopt the rest.
- (setq new-adopts (nconc new-adopts
- (cdr (cdr (car thread)))))
+ (setq gnus-tmp-new-adopts (nconc gnus-tmp-new-adopts
+ (cdr (cdr (car thread)))))
(setq gnus-tmp-gathered
(nconc (mapcar
(lambda (h) (mail-header-number (car h)))
(lambda (h) (mail-header-number (car h)))
(cdr (car thread)))
gnus-tmp-gathered))
- (setq new-adopts (if (cdr (car thread))
- (append new-adopts
- (cdr (car thread)))
- new-adopts)
+ (setq gnus-tmp-new-adopts (if (cdr (car thread))
+ (append gnus-tmp-new-adopts
+ (cdr (car thread)))
+ gnus-tmp-new-adopts)
thread-end t
header nil)
(if (zerop level)
(goto-char (point-min))
(setq e (1- (search-forward "\n\n"))))
(insert-buffer-substring gnus-original-article-buffer 1 e)
- (let ((hook (delete 'gnus-article-hide-headers-if-wanted
- (delete 'gnus-article-hide-headers
- gnus-article-display-hook))))
+ (let ((hook (delq 'gnus-article-hide-headers-if-wanted
+ (delq 'gnus-article-hide-headers
+ (copy-sequence gnus-article-display-hook)))))
(run-hooks 'hook))
(if (or (not hidden) (and (numberp arg) (< arg 0)))
(gnus-article-hide-headers)))))
(gnus-summary-find-next)))))
;; Suggested by Daniel Quinlan <quinlan@best.com>.
-(defun gnus-summary-show-all-expunged ()
+(defalias 'gnus-summary-show-all-expunged 'gnus-summary-limit-include-expunged)
+(defun gnus-summary-limit-include-expunged ()
"Display all the hidden articles that were expunged for low scores."
(interactive)
(gnus-set-global-variables)
(gnus-set-global-variables)
(gnus-summary-catchup all quietly nil 'fast)
;; Select next newsgroup or exit.
- (if (and (eq gnus-auto-select-next 'quietly)
- (not (gnus-ephemeral-group-p gnus-newsgroup-name)))
+ (if (eq gnus-auto-select-next 'quietly)
(gnus-summary-next-group nil)
(gnus-summary-exit)))
gnus-extract-address-components
(mail-header-from header))))
(concat (or (car extract) (cdr extract))
- "\r" (int-to-string (mail-header-number header))
"\r" (mail-header-subject header))))
'gnus-thread-sort-by-author)
reverse))
(mail-header-from header))))
(concat
(downcase (gnus-simplify-subject (gnus-summary-article-subject) t))
- "\r" (int-to-string (mail-header-number header))
"\r" (or (car extract) (cdr extract)))))
'gnus-thread-sort-by-subject)
reverse))
;; Options may continue on the next line.
(or (and (re-search-forward "^[^ \t]" nil 'move)
(progn (beginning-of-line) (point)))
- (point))))))
+ (point)))))
+ (forward-line -1))
(symbol
(or (boundp symbol) (set symbol nil))
;; It was a group name.
(search-forward "+")
(forward-char -1)
(insert "\\")))
- ;; Translate ".all" to "[./].*";
- (while (search-forward ".all" nil t)
- (replace-match "[./].*" t t))
- (goto-char (point-min))
;; Translate "all" to ".*".
(while (search-forward "all" nil t)
(replace-match ".*" t t))
(set-buffer nnbabyl-mbox-buffer)
(goto-char (point-min))
(if (search-forward (nnbabyl-article-string article) nil t)
- (let (start stop)
+ (let (start stop summary-line)
(re-search-backward (concat "^" nnbabyl-mail-delimiter) nil t)
(while (and (not (looking-at ".+:"))
(zerop (forward-line 1))))
(erase-buffer)
(insert-buffer-substring nnbabyl-mbox-buffer start stop)
(goto-char (point-min))
- (if (search-forward "\n*** EOOH ***" nil t)
- (progn
- (delete-region (progn (beginning-of-line) (point))
- (or (search-forward "\n\n" nil t)
- (point)))))
+ ;; If there is an EOOH header, then we have to remove some
+ ;; duplicated headers.
+ (setq summary-line (looking-at "Summary-line:"))
+ (when (search-forward "\n*** EOOH ***" nil t)
+ (if summary-line
+ ;; The headers to be deleted are located before the
+ ;; EOOH line...
+ (delete-region (point-min) (progn (forward-line 1)
+ (point)))
+ ;; ...or after.
+ (delete-region (progn (beginning-of-line) (point))
+ (or (search-forward "\n\n" nil t)
+ (point)))))
(if (numberp article)
(cons nnbabyl-current-group article)
(nnbabyl-article-group-number)))))))
?n ?m)))
nnsoup-replies-list))
(gnus-soup-reply-prefix (car nnsoup-replies-list)))))
-
+
+(defun nnsoup-make-active ()
+ (let ((files (sort (directory-files nnsoup-directory t "IDX$")
+ (lambda (f1 f2)
+ (< (progn (string-match "/\\([0-9]+\\)\\." f1)
+ (string-to-int (substring
+ f1 (match-beginning 1)
+ (match-end 1))))
+ (progn (string-match "/\\([0-9]+\\)\\." f2)
+ (string-to-int (substring
+ f2 (match-beginning 1)
+ (match-end 1))))))))
+ active group lines ident elem min)
+ (set-buffer (get-buffer-create " *nnsoup work*"))
+ (buffer-disable-undo)
+ (while files
+ (message "Doing %s..." (car files))
+ (erase-buffer)
+ (insert-file-contents (car files))
+ (goto-char (point-min))
+ (end-of-line)
+ (re-search-backward "[ \t]\\([^ ]+\\):[0-9]")
+ (setq group (buffer-substring (match-beginning 1) (match-end 1)))
+ (setq lines (count-lines (point-min) (point-max)))
+ (setq ident (progn (string-match
+ "/\\([0-9]+\\)\\." (car files))
+ (substring
+ (car files) (match-beginning 1)
+ (match-end 1))))
+ (if (not (setq elem (assoc group active)))
+ (push (list group (list (cons 1 lines)
+ (vector ident group "ncm" "" lines)))
+ active)
+ (setcdr elem (cons (list (cons (setq min (1+ (cdr (car (car
+ (cdr elem))))))
+ (+ min lines))
+ (vector ident group "ncm" "" lines))
+ (cdr elem))))
+ (setq files (cdr files)))
+ (setq nnsoup-group-alist active)
+ (while active
+ (setcdr (car active) (nreverse (cdr (car active))))
+ (setq active (cdr active)))))
+
(provide 'nnsoup)
;;; nnsoup.el ends here
+Thu Oct 26 14:56:41 1995 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Limiting): Change.
+
+Mon Oct 16 12:47:13 1995 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Listing Groups): Addition.
+
+Sun Oct 15 09:23:55 1995 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Group Topics): Addition.
+
Mon Oct 16 12:47:13 1995 Lars Ingebrigtsen <lars@eyesore.no>
* gnus.texi (Listing Groups): Addition.
(All these format variables can also be random elisp forms. In that
case, they will be @code{eval}ed to insert the required lines.)
+(All these format variables can also be random elisp forms. In that
+case, they will be @code{eval}ed to insert the required lines.)
+
In addition to the normal "padding" specs that @code{format} supports
(eg. @samp{%7d}), specifications like @samp{%7,12s} are allowed. A spec
of this type means that the field will be at least 7 characters long,
(@code{gnus-group-add-to-topic}) command. It understands the
process/prefix convention (@pxref{Process/Prefix}).
+If you want to add a group to a topic, you can use the @kbd{G t}
+(@code{gnus-group-add-to-topic}) command. It understands the
+process/prefix convention (@pxref{Process/Prefix}).
+
@node Misc Group Stuff
@section Misc Group Stuff
@item mail-yank-ignored-headers
@vindex mail-yank-ignored-headers
When you yank a message, you do not want to quote any headers, so
-@code{(setq mail-yank-ignored-headers ":")}.
+@code{(setq mail-yank-ignored-headers "^")}.
@item user-mail-address
@vindex user-mail-address
@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"}.
+
@item gnus-user-from-line
@vindex gnus-user-from-line
Your full, complete e-mail address with name. This variable overrides
to it.
@findex gnus-summary-send-draft
-@kindex S D c
+@kindex S D c S (Summary)
When you want to continue editing the article, you simply enter the
draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
that. You will be placed in a buffer where you left off.
@table @kbd
-@item M N u
+@item / /
+@kindex / / (Summary)
+@findex gnus-summary-limit-to-subject
+Limit the summary buffer to articles that match some subject
+(@code{gnus-summary-limit-to-subject}).
+
+@item / u
@itemx x
-@kindex M N u (Summary)
+@kindex / u (Summary)
@kindex x (Summary)
@findex gnus-summary-limit-to-unread
Limit the summary buffer to articles that are not marked as read
buffer to articles that are strictly unread. This means that ticked and
dormant articles will also be excluded.
-@item M N m
-@kindex M N m (Summary)
+@item / m
+@kindex / m (Summary)
@findex gnus-summary-limit-to-marks
Ask for a mark and then limit to all articles that have not been marked
with that mark (@code{gnus-summary-limit-to-marks}).
-@item M N n
-@kindex M N n (Summary)
+@item / n
+@kindex / n (Summary)
@findex
Limit the summary buffer to the current article
(@code{gnus-summary-limit-to-articles}). Uses the process/prefix
convention (@pxref{Process/Prefix}).
-@item M N w
-@kindex M N w (Summary)
+@item / w
+@kindex / w (Summary)
@findex gnus-summary-pop-limit
Pop the previous limit off the stack and restore it
(@code{gnus-summary-pop-limit}). If given a prefix, pop all limits off
the stack.
-@item M N s
+@item / s
@itemx /
-@kindex M N s (Summary)
+@kindex / s (Summary)
@kindex / (Summary)
@findex gnus-summary-limit-to-subject
Limit the summary buffer to articles that have a subject that matches a
regexp (@code{gnus-summary-limit-to-subject}).
-@item M N v
-@kindex M N v (Summary)
+@item / v
+@kindex / v (Summary)
@findex gnus-summary-limit-to-score
Limit the summary buffer to articles that have a score at or above some
score (@code{gnus-summary-limit-to-score}).
-@item M S
+@item / E
+@itemx M S
@kindex M S (Summary)
-@findex gnus-summary-show-all-expunged
-Display all expunged articles (@code{gnus-summary-show-all-expunged}).
+@kindex / E (Summary)
+@findex gnus-summary-limit-include-expunged
+Display all expunged articles
+(@code{gnus-summary-limit-include-expunged}).
-@item M N D
-@kindex M N D (Summary)
+@item / D
+@kindex / D (Summary)
@findex gnus-summary-limit-include-dormant
Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
-@item M N d
-@kindex M N d (Summary)
+@item / d
+@kindex / d (Summary)
@findex gnus-summary-limit-exclude-dormant
Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
-@item M N c
-@kindex M N c (Summary)
+@item / c
+@kindex / c (Summary)
@findex gnus-summary-limit-exclude-childless-dormant
Hide all dormant articles that have no children
(@code{gnus-summary-limit-exclude-childless-dormant}).
("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff"))
@end lisp
+@vindex gnus-split-methods
+You can have Gnus suggest where to save articles by plonking regexp into
+the @code{gnus-split-methods} alist. The syntax of this variable is the
+same as @code{nnmail-split-methods}. For instance, if you would like to
+save articles related to Gnus in the file @file{gnus-stuff}, and articles
+related to VM in @code{vm-stuff}, you could set this variable to something
+like:
+
+@lisp
+(("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
+ ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff"))
+@end lisp
+
@vindex gnus-use-long-file-name
Finally, you have the @code{gnus-use-long-file-name} variable. If it is
@code{nil}, all the preceding functions will replace all periods
@table @kbd
@item W H a
-@kindex W H a
+@kindex W H a (Summary)
@findex gnus-article-highlight
Highlight the current article (@code{gnus-article-highlight}).
@item W H h
-@kindex W H h
+@kindex W H h (Summary)
@findex gnus-article-highlight-headers
@vindex gnus-header-face-alist
Highlight the headers (@code{gnus-article-highlight-headers}). The
match made will be used.
@item W H c
-@kindex W H c
+@kindex W H c (Summary)
@findex gnus-article-highlight-citation
Highlight cited text (@code{gnus-article-highlight-citation}).
@item W H s
-@kindex W H s
+@kindex W H s (Summary)
@vindex gnus-signature-separator
@findex gnus-article-highlight-signature
Highlight the signature (@code{gnus-article-highlight-signature}).
scoring, then you might set this variable to @code{t}. This will make
Gnus save the scores into the @file{.newsrc.eld} file.
+@item gnus-save-score
+@vindex gnus-save-score
+If you have really complicated score files, and do lots of batch
+scoring, then you might set this variable to @code{t}. This will make
+Gnus save the scores into the @file{.newsrc.eld} file.
+
@item gnus-score-interactive-default-score
@vindex gnus-score-interactive-default-score
Score used by all the interactive raise/lower commands to raise/lower
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:
@node Emacs Lisp
-@section Emacs Lisp
+@subsection Emacs Lisp
Emacs is the King of Editors because it's really a Lisp interpreter.
Each and every key you tap runs some Emacs Lisp code snippet, and since
@section Frequently Asked Questions
+
@node Index
@chapter Index
@printindex cp