X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-agent.el;h=f8f353d16d459a45ae74115189f329588fbf196a;hb=754a007c9c67f3506008dab6e7e8943eb51848f2;hp=853c0ca5b46b8e76b1fbf0eb26d119ce500ee069;hpb=29efd9c86bb28f8a2a1098e67f1b1c973d2e542d;p=gnus diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 853c0ca5b..f8f353d16 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -1,9 +1,7 @@ ;;; 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 -;; Keywords: news - ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify @@ -46,6 +44,11 @@ :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) @@ -110,7 +113,8 @@ (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." @@ -172,11 +176,11 @@ 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 @@ -234,12 +238,13 @@ (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 () @@ -255,6 +260,13 @@ (setq gnus-plugged nil) (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. @@ -297,6 +309,11 @@ agent minor mode in all Gnus buffers." ;;; 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))) @@ -378,7 +395,6 @@ If N is negative, mark backward instead. If UNMARK is non-nil, remove 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 @@ -399,7 +415,6 @@ articles marked is returned." 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) @@ -407,7 +422,6 @@ the actual number of articles unmarked is returned." 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) @@ -415,9 +429,13 @@ the actual number of articles toggled is returned." (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) @@ -469,8 +487,11 @@ the actual number of articles toggled is returned." (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 + group + (nnheader-replace-chars-in-string + (nnheader-translate-file-chars group) + ?. ?/))) @@ -608,9 +629,11 @@ the actual number of articles toggled is returned." (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 @@ -686,7 +709,8 @@ the actual number of articles toggled is returned." (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)))) @@ -786,7 +810,8 @@ the actual number of articles toggled is returned." 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) @@ -912,7 +937,7 @@ the actual number of articles toggled is returned." ["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. @@ -938,7 +963,7 @@ The following commands are available: (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) @@ -987,7 +1012,7 @@ The following commands are available: (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." @@ -1250,6 +1275,15 @@ The following commands are available: (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