;;; gnus-agent.el --- unplugged support for Gnus
-;; Copyright (C) 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1997,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-;; Keywords: news
-
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
:group 'gnus-agent
:type 'hook)
+(defcustom gnus-agent-handle-level gnus-level-subscribed
+ "Groups on levels higher than this variable will be ignored by the Agent."
+ :group 'gnus-agent
+ :type 'integer)
+
;;; Internal variables
(defvar gnus-agent-history-buffers nil)
(defsubst gnus-agent-directory ()
"Path of the Gnus agent directory."
- (nnheader-concat gnus-agent-directory (gnus-agent-method) "/"))
+ (nnheader-concat gnus-agent-directory
+ (nnheader-translate-file-chars (gnus-agent-method)) "/"))
(defun gnus-agent-lib-file (file)
"The full path of the Gnus agent library FILE."
buffer))))
minor-mode-map-alist))
(gnus-agent-toggle-plugged gnus-plugged)
- (run-hooks 'gnus-agent-mode-hook)))
+ (gnus-run-hooks 'gnus-agent-mode-hook)))
(defvar gnus-agent-group-mode-map (make-sparse-keymap))
(gnus-define-keys gnus-agent-group-mode-map
- "Ju" gnus-agent-fetch-group
+ "Ju" gnus-agent-fetch-groups
"Jc" gnus-enter-category-buffer
"Jj" gnus-agent-toggle-plugged
"Js" gnus-agent-fetch-session
(interactive (list (not gnus-plugged)))
(if plugged
(progn
- (run-hooks 'gnus-agent-plugged-hook)
+ (setq gnus-plugged plugged)
+ (gnus-run-hooks 'gnus-agent-plugged-hook)
(setcar (cdr gnus-agent-mode-status) " Plugged"))
(gnus-agent-close-connections)
- (run-hooks 'gnus-agent-unplugged-hook)
+ (setq gnus-plugged plugged)
+ (gnus-run-hooks 'gnus-agent-unplugged-hook)
(setcar (cdr gnus-agent-mode-status) " Unplugged"))
- (setq gnus-plugged plugged)
(set-buffer-modified-p t))
(defun gnus-agent-close-connections ()
(gnus))
;;;###autoload
+(defun gnus-plugged ()
+ "Start Gnus plugged."
+ (interactive)
+ (setq gnus-plugged t)
+ (gnus))
+
+;;;###autoload
(defun gnus-agentize ()
"Allow Gnus to be an offline newsreader.
The normal usage of this command is to put the following as the
;;; Group mode commands
;;;
+(defun gnus-agent-fetch-groups (n)
+ "Put all new articles in the current groups into the agent."
+ (interactive "P")
+ (gnus-group-iterate n 'gnus-agent-fetch-group))
+
(defun gnus-agent-fetch-group (group)
"Put all new articles in GROUP into the agent."
(interactive (list (gnus-group-group-name)))
the mark instead. The difference between N and the actual number of
articles marked is returned."
(interactive "p")
- (gnus-set-global-variables)
(let ((backward (< n 0))
(n (abs n)))
(while (and
If N is negative, unmark backward instead. The difference between N and
the actual number of articles unmarked is returned."
(interactive "p")
- (gnus-set-global-variables)
(gnus-agent-mark-article n t))
(defun gnus-agent-toggle-mark (n)
If N is negative, toggle backward instead. The difference between N and
the actual number of articles toggled is returned."
(interactive "p")
- (gnus-set-global-variables)
(gnus-agent-mark-article n 'toggle))
(defun gnus-summary-set-agent-mark (article &optional unmark)
(let ((unmark (if (and (not (null unmark)) (not (eq t unmark)))
(memq article gnus-newsgroup-downloadable)
unmark)))
- (setq gnus-newsgroup-downloadable
- (delq article gnus-newsgroup-downloadable))
- (unless unmark
+ (if unmark
+ (progn
+ (setq gnus-newsgroup-downloadable
+ (delq article gnus-newsgroup-downloadable))
+ (push article gnus-newsgroup-undownloaded))
+ (setq gnus-newsgroup-undownloaded
+ (delq article gnus-newsgroup-undownloaded))
(push article gnus-newsgroup-downloadable))
(gnus-summary-update-mark
(if unmark gnus-undownloaded-mark gnus-downloadable-mark)
(defun gnus-agent-group-path (group)
"Translate GROUP into a path."
- (nnheader-translate-file-chars
- (nnheader-replace-chars-in-string group ?. ?/)))
+ (if nnmail-use-long-file-names
+ (gnus-group-real-name group)
+ (nnheader-replace-chars-in-string
+ (nnheader-translate-file-chars (gnus-group-real-name group))
+ ?. ?/)))
\f
(if (not (re-search-forward "^Message-ID: *<\\([^>\n]+\\)>" nil t))
(setq id "No-Message-ID-in-article")
(setq id (buffer-substring (match-beginning 1) (match-end 1))))
- (write-region (point-min) (point-max)
- (concat dir (number-to-string (caar pos)))
- nil 'silent)
+ (let ((coding-system-for-write
+ gnus-agent-article-file-coding-system))
+ (write-region (point-min) (point-max)
+ (concat dir (number-to-string (caar pos)))
+ nil 'silent))
(when (setq elem (assq (caar pos) gnus-agent-article-alist))
(setcdr elem t))
(gnus-agent-enter-history
(when (file-exists-p
(setq file (gnus-agent-article-name ".overview" group)))
(gnus-agent-braid-nov group articles file))
- (gnus-make-directory (file-name-directory file))
+ (gnus-make-directory (nnheader-translate-file-chars
+ (file-name-directory file)))
(write-region (point-min) (point-max) file nil 'silent)
(gnus-agent-save-alist group articles nil))
t))))
groups (gnus-groups-from-server (pop methods)))
(gnus-agent-with-fetch
(while (setq group (pop groups))
- (gnus-agent-fetch-group-1 group gnus-command-method))))
+ (when (<= (gnus-group-level group) gnus-agent-handle-level)
+ (gnus-agent-fetch-group-1 group gnus-command-method)))))
(gnus-message 6 "Finished fetching articles into the Gnus agent"))))
(defun gnus-agent-fetch-group-1 (group method)
["Edit groups" gnus-category-edit-groups t]
["Exit" gnus-category-exit t]))
- (run-hooks 'gnus-category-menu-hook)))
+ (gnus-run-hooks 'gnus-category-menu-hook)))
(defun gnus-category-mode ()
"Major mode for listing and editing agent categories.
(buffer-disable-undo (current-buffer))
(setq truncate-lines t)
(setq buffer-read-only t)
- (run-hooks 'gnus-category-mode-hook))
+ (gnus-run-hooks 'gnus-category-mode-hook))
(defalias 'gnus-category-position-point 'gnus-goto-colon)
(setq gnus-category-alist
(or (gnus-agent-read-file
(nnheader-concat gnus-agent-directory "lib/categories"))
- (list (list 'default 'true nil nil)))))
+ (list (list 'default 'short nil nil)))))
(defun gnus-category-write ()
"Write the category alist."
(delete-file file))))))
(gnus-agent-save-alist nil nil nil dir))))
+;;;###autoload
+(defun gnus-agent-batch ()
+ (interactive)
+ (let ((init-file-user "")
+ (gnus-always-read-dribble-file t))
+ (gnus))
+ (gnus-group-send-drafts)
+ (gnus-agent-fetch-session))
+
(provide 'gnus-agent)
;;; gnus-agent.el ends here