Path: utzoo!attcan!uunet!kddlab!ccut!titcca!fgw!flab!umerin From: umerin@flab.flab.fujitsu.JUNET (Masanobu UMEDA) Newsgroups: comp.emacs,fj.editor.emacs Subject: GNUS 3.10: an NNTP-based newsreader for GNU Emacs (1 of 5) Message-ID: <4375@flab.flab.fujitsu.JUNET> Date: 11 Nov 88 06:15:30 GMT Reply-To: umerin@flab.flab.fujitsu.JUNET (Masanobu UMEDA) Organization: Fujitsu Laboratories Ltd., Kawasaki, Japan Lines: 1279 This is a new version of GNUS, an NNTP-based newsreader for GNU Emacs. Many kinds of extensions and bug fixes are included in this release. I'd like to thank all of you who send me valuable comments. I'd also like to give great thanks to beta-testers here in Fujitsu Lab. New features of 3.10 version: + Understand `options -n XXX !YYY' in .newsrc file. + New implementation of KILL file. + Commands for searching articles by REGEXP. + Commands for executing a command on articles by REGEXP. + Rmail saver. + Improved RMAIL digest reader. + Improved article referencing commands. + Customizable article save name. + Customizable subject buffer. + Supporting external TCP/IP. + More hooks for customization. Other important changes from 3.8 version: + Variable gnus-server-host is renamed to gnus-nntp-server. + Variable gnus-force-nntp is obsolete. Use gnus-nntp-service instead. + Many internal variables are deleted, renamed, or added. Hook functions must be carefully rewritten if they are used in. Installation guide is included in the beginning of gnus.el. Please read it carefully for happy GNUSing. Please send questions, bug fixes and extensions to: info-gnus-english@tut.cis.ohio-state.edu Masanobu UMEDA umerin@flab.flab.Fujitsu.JUNET umerin%flab.flab.Fujitsu.JUNET@uunet.uu.NET ---------------------------------------------------------------------- ---- Cut Here and unpack ---- #!/bin/sh # shar: Shell Archiver (v1.22) # # This is part 1 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # # Run the following text with /bin/sh to create: # gnus.el # mhspool.el # nnspool.el # nntp.el # tcp.el # tcp.c # if test -r s2_seq_.tmp then echo "Must unpack archives in sequence!" next=`cat s2_seq_.tmp`; echo "Please unpack part $next next" exit 1; fi sed 's/^X//' << 'SHAR_EOF' > gnus.el && X;;; GNUS: NNTP-based News Reader for GNU Emacs X;; Copyright (C) 1987, 1988 Fujitsu Laboratoris LTD. X;; Copyright (C) 1987, 1988 Masanobu UMEDA (umerin@flab.flab.Fujitsu.JUNET) X;; $Header: gnus.el,v 3.10 88/11/11 14:58:29 umerin Exp $ X X;; This file is part of GNU Emacs. X X;; GNU Emacs is distributed in the hope that it will be useful, X;; but WITHOUT ANY WARRANTY. No author or distributor X;; accepts responsibility to anyone for the consequences of using it X;; or for whether it serves any particular purpose or works at all, X;; unless he says so in writing. Refer to the GNU Emacs General Public X;; License for full details. X X;; Everyone is granted permission to copy, modify and redistribute X;; GNU Emacs, but only under the conditions described in the X;; GNU Emacs General Public License. A copy of this license is X;; supposed to have been given to you along with GNU Emacs so you X;; can know your rights and responsibilities. It should be in a X;; file named COPYING. Among other things, the copyright notice X;; and this notice must be preserved on all copies. X X;; How to Install GNUS: X;; (0) First of all, remove GNUS related OLD *.elc files (at least nntp.elc). X;; (1) Unshar gnus.el, nntp.el, and nnspool.el. X;; (2) byte-compile-file nntp.el, nnspool.el, and gnus.el. X;; (3) Define three environment variables in .login file as follows: X;; X;; setenv NNTPSERVER flab X;; setenv DOMAINNAME "stars.flab.Fujitsu.JUNET" X;; setenv ORGANIZATION "Fujitsu Laboratories Ltd., Kawasaki, Japan." X;; X;; Or instead define lisp variables in your .emacs, site-init.el, X;; or default.el as follows: X;; X;; (setq gnus-nntp-server "flab") X;; (setq gnus-your-domain "stars.flab.Fujitsu.JUNET") X;; (setq gnus-your-organization "Fujitsu Laboratories Ltd., ...") X;; X;; If lisp function (system-name) returns full internet name, you X;; don't have to define domain name. X;; X;; (4) You may have to define NNTP service name as number 119. X;; X;; (setq gnus-nntp-service 119) X;; X;; Or, if you'd like to use local news spool directly in stead of X;; via NNTP, set the variable to nil as follows: X;; X;; (setq gnus-nntp-service nil) X;; X;; (5) If you'd like to use GENERICFROM feature like Bnews, define X;; lisp variable as follows: X;; X;; (setq gnus-use-generic-from t) X;; X;; (6) Define autoload entries in .emacs file as follows: X;; X;; (autoload 'gnus "gnus" "Read network news." t) X;; (autoload 'gnus-post-news "gnus" "Post a news." t) X;; X;; (7) Read nntp.el if you have any trouble with NNTP or Kanji handling. X;; X;; (8) Install mhspool.el, tcp.el and tcp.c if you think it is necessary. X;; X;; mhspool.el is a package for reading articles or mails in your X;; private directory using GNUS. X;; X;; tcp.el and tcp.c are necessary if and only if your Emacs does X;; not have a function `open-network-stream' which is used for X;; communicating with NNTP server inside Emacs. tcp.el contains a X;; few patches for very OOOOOOOLD version of Emacs. X X;; GNUS Mailing List: X;; There are two mailing lists for GNUS lovers in the world: X;; X;; info-gnus@flab.fujitsu.junet, and X;; info-gnus-english@tut.cis.ohio-state.edu. X;; X;; Both of them are intended to exchange valuable information about X;; GNUS, such as bug fixes, useful hooks and extensions. The major X;; difference of the two lists is what the official language is. Both X;; Japanese and English are available in info-gnus, while English is X;; only available in info-gnus-english. There is no need to subscribe X;; info-gnus if you cannot read Japanese messages, because most of the X;; discussion and important announcements will be sent to X;; info-gnus-english. Moreover, if you are able to read gnu.emacs.gnus X;; newsgroup of USENET, you need not, either. info-gnus-english and X;; gnu.emacs.gnus are linked each other. X;; X;; Please send subscription request to: X;; X;; info-gnus-request%flab.fujitsu.junet@uunet.uu.net, or X;; info-gnus-english-request@cis.ohio-state.edu X X;; TO DO: X;; (1) Incremental update of active info. X;; (2) GNUS own poster and programmable interface to various mailers. X;; (3) Multi-GNUS (Talking to many hosts same time). X;; (4) Asynchronous transmission of large messages. X X(provide 'gnus) X(require 'nntp) X(require 'mail-utils) X X(defvar gnus-nntp-server (getenv "NNTPSERVER") X "*Host the NNTP server is running. XIf the value is a string like a `:DIRECTORY', user's private DIRECTORY Xis used as news spool. XInitialized from the NNTPSERVER environment variable.") X X(defvar gnus-nntp-service "nntp" X "*NNTP service name (\"nntp\" or 119). XGo to local news spool if its value is nil.") X X(defvar gnus-startup-file "~/.newsrc" X "*Your .newsrc file. Use `.newsrc-SERVER' instead if it exists.") X X(defvar gnus-subject-lines-height 4 X "*Number of subject lines displayed at once. XIf you'd like to set the height of subject window according to that of XEmacs window, set the value in gnus-Subject-mode-hook as follows: X X(setq gnus-Subject-mode-hook X '(lambda () X (setq gnus-subject-lines-height (/ (window-height) 5))))") X X(defvar gnus-author-copy-file (getenv "AUTHORCOPY") X "*File name saving copy of posted article in Unix mail format. XInitialized from the AUTHORCOPY environment variable. X XIf the first character of the name is `|', the article is piped out to Xthe named program. It is possible to save an article in MH folder by Xthe following: X X(setq gnus-author-copy-file \"|/usr/local/lib/mh/rcvstore +Article\")") X X(defvar gnus-use-long-file-name t X "*Do not use hierarchical file name (directory form of newsgroup), Xbut use newsgroup name itself for the name of an article to be saved Xor local KILL file if non-nil.") X X(defvar gnus-article-save-name (function gnus-article-save-name) X "*Function generating file name saving an article to. XThe function is called with 2 arguments, NEWSGROUP and HEADERS. XAccess macros to the headers are defined as nntp-header-FIELD, and Xfunctions are defined as gnus-header-FIELD.") X X(defvar gnus-article-default-saver (function gnus-Subject-save-in-rmail) X "*Function saving an article in your favorite format. XThe function must be interactively callable (in other words, it must Xbe a emacs command). X XGNUS provides following functions: X gnus-Subject-save-in-rmail (in Rmail format) X gnus-Subject-save-in-mail (in Unix mail format) X gnus-Subject-save-in-folder (in MH folder) X gnus-Subject-save-in-file (in plain file).") X X(defvar gnus-article-save-directory (getenv "SAVEDIR") X "*Directory name to save an article to (default to ~/News). XInitialized from the SAVEDIR environment variable.") X X(defvar gnus-article-mh-folder "+News" X "*MH folder name saving an article in by \\[gnus-Subject-save-in-folder].") X X(defvar gnus-kill-file-name "KILL" X "*File name of a KILL file.") X X(defvar gnus-default-distribution "local" X "*Use the value as distribution if no distribution is specified.") X X(defvar gnus-novice-user t X "*A little bit verbose in posting mode if non-nil. XAsk newsgroup name, subject, and distribution.") X X(defvar gnus-user-login-name (or (getenv "USER") (getenv "LOGNAME") (user-login-name)) X "*The login name of the user. XInitialized from the USER and LOGNAME environment variable if defined.") X X(defvar gnus-user-full-name (or (getenv "NAME") (user-full-name)) X "*The full name of the user. XInitialized from the NAME environment variable if defined.") X X(defvar gnus-show-all-headers nil X "*Show all headers of an article if non-nil.") X X(defvar gnus-save-all-headers nil X "*Save all headers of an article if non-nil.") X X(defvar gnus-auto-select-first t X "*Select first unread article automagically if non-nil. XIf you want to prevent auto selection of first unread article in some Xnewsgroups, set the variable to nil in gnus-Select-group-hook or Xgnus-Apply-kill-hook.") X X(defvar gnus-auto-select-next t X "*Select next newsgroup automagically if non-nil. XIf the value is t and the next newsgroup expected is empty, GNUS will Xexit Subject mode and go back to Group mode. XIf the value is not nil nor t, GNUS will select following unread Xnewsgroup. Especially, if the value is `quietly', next unread Xnewsgroup will be selected without any confirmations.") X X(defvar gnus-auto-select-same nil X "*Select next article with same subject automagically if non-nil.") X X(defvar gnus-break-pages t X "*Break pages of news article if non-nil. XPage delimiter is specified by variable `gnus-page-delimiter'. Message Xshow at end of pages is specified by variable `gnus-more-message'.") X X(defvar gnus-page-delimiter "^\^L" X "*Regexp describing line-beginnings that separate pages of news article.") X X(defvar gnus-more-message "*** More ***" X "*Message shown at end of pages in page break mode.") X X(defvar gnus-digest-show-summary t X "*Show summary of digest messages if non-nil.") X X(defvar gnus-optional-headers (function gnus-optional-lines-and-from) X "*Function generating optional string displayed in GNUS Subject mode buffer. XThe function is called with an article HEADER. The result must be a Xstring excluding `[' and `]'.") X X(defvar gnus-keep-subject-centered t X "*Always center the current subject in GNUS Subject mode window if non-nil.") X X(defvar gnus-Group-mode-hook nil X "*Hooks for GNUS Group mode.") X X(defvar gnus-Subject-mode-hook nil X "*Hooks for GNUS Subject mode.") X X(defvar gnus-Article-mode-hook nil X "*Hooks for GNUS Article mode.") X X(defvar gnus-Kill-file-mode-hook nil X "*Hooks for GNUS Kill file mode.") X X(defvar gnus-Startup-hook nil X "*Hooks called at startup time. XThis hook is called after NNTP server is selected. So, it is possible Xto change the behaver of GNUS according to the server.") X X(defvar gnus-Subject-prepare-hook nil X "*Hooks called after subject list is created. XIf you'd like to modify the buffer, you can use this hook.") X X(defvar gnus-Article-prepare-hook nil X "*Hooks called after an article is prepared for reading. XIf you'd like to run special decoding program like nkf, use this hook.") X X(defvar gnus-Select-group-hook nil X "*Hooks called when a newsgroup is selected. XIf you'd like to sort Subject mode buffer by posted date and then by Xsubject string, you can use the following hook: X X(setq gnus-Select-group-hook X '(lambda () X ;; First of all, sort by date. X (gnus-sort-headers X '(lambda (a b) X (gnus-date-lessp (nntp-header-date a) X (nntp-header-date b)))) X ;; Then sort by subject string ignoring `Re:'. X (gnus-sort-headers X '(lambda (a b) X (string-lessp (gnus-simplify-subject (nntp-header-subject a) 're) X (gnus-simplify-subject (nntp-header-subject b) 're) X ))))) X XIf you'd like to simplify subjects like the X`gnus-Subject-next-same-subject' command does, you can use the Xfollowing hook: X X(setq gnus-Select-group-hook X '(lambda () X (mapcar (function X (lambda (header) X (nntp-set-header-subject X header X (gnus-simplify-subject X (nntp-header-subject header) 're-only)))) X gnus-newsgroup-headers))) X XIn some newsgroups author name of an article is meaningless. It is Xpossible to prevent listing author name in GNUS Subject mode buffer as Xfollows: X X(setq gnus-Select-group-hook X '(lambda () X (cond ((string-match \"comp.sources.unix\" gnus-newsgroup-name) X (setq gnus-optional-headers X (function gnus-optional-lines))) X (t X (setq gnus-optional-headers X (function gnus-optional-lines-and-from))))))") X X(defvar gnus-Select-article-hook nil X "*Hooks called when an article is selected. XIf you'd like to run RMAIL on a digest article automagically, you can Xuse the following hook: X X(setq gnus-Select-article-hook X '(lambda () X (cond ((string-equal \"comp.sys.sun\" gnus-newsgroup-name) X (gnus-Subject-rmail-digest)) X ((and (string-equal \"comp.text\" gnus-newsgroup-name) X (string-match \"^TeXhax Digest\" X (nntp-header-subject gnus-current-headers))) X (gnus-Subject-rmail-digest) X ))))") X X(defvar gnus-Select-digest-hook nil X "*Hooks called when reading digest messages using Rmail. XThis hook can be used to modify incomplete digest articles as follows: X X(setq gnus-Select-digest-hook X '(lambda () X ;; Reply-To: is required by `undigestify-rmail-message'. X (or (mail-position-on-field \"Reply-to\" t) X (progn X (mail-position-on-field \"Reply-to\") X (insert (gnus-fetch-field \"From\"))))))") X X(defvar gnus-Rmail-digest-hook nil X "*Hooks called when reading digest messages using Rmail. XThis hook is intended to customize Rmail mode for reading digest articles.") X X(defvar gnus-Apply-kill-hook (function gnus-Kill-file-apply) X "*Hooks called when a newsgroup is selected and subject list is prepared. XThis hook is intended to apply a KILL file to selected newsgroup. XFunction `gnus-Kill-file-apply' is binded to this hook defaultly. X XSince general KILL file is too heavy to use only for a few newsgroups, XI recommend you to use much light hook function. For example, if you'd Xlike to apply kills to articles which contains a string `rmgroup' in Xsubject field in newsgroup `control', you can use the following hook: X X(setq gnus-Apply-kill-hook X '(lambda () X (cond ((string-match \"control\" gnus-newsgroup-name) X (gnus-kill \"Subject\" \"rmgroup\" \"d\")))))") X X(defvar gnus-Mark-article-hook X (function X (lambda () X (or (memq gnus-current-article gnus-newsgroup-marked) X (gnus-Subject-mark-as-read gnus-current-article)))) X "*Hooks called when an article is selected at first time. XThe hook is intended to mark an article as read (or unread) Xautomatically when it is selected. X XIf you'd like to mark as unread (-) instead, use the following hook: X X(setq gnus-Mark-article-hook X '(lambda () X (gnus-Subject-mark-as-unread gnus-current-article)))") X X(defvar gnus-Inews-article-hook nil X "*Hooks called before posting an article. XIf you'd like to run special encoding program, use this hook.") X X(defvar gnus-Exit-group-hook nil X "*Hooks called when exiting (not quitting) GNUS Subject mode. XIf your machine is so slow that exiting from Subject mode takes very Xlong time, set variable gnus-newsgroup-headers to nil. This inhibits Xmarking articles as read using cross-references.") X X(defvar gnus-Exit-gnus-hook nil X "*Hooks called when exiting GNUS.") X X(defvar gnus-Save-newsrc-hook nil X "*Hooks for saving the newsrc file. XThis hook is called before writing to .newsrc file.") X X;; Site dependent variables. You have to define these variables in X;; site-init.el, default.el or your .emacs. X X(defvar gnus-your-domain "stars.flab.Fujitsu.JUNET" X "*Your domain name without your host name. XIf environment variable `DOMAINNAME' is defined, it's instead used. XIf lisp function (system-name) returns full internet name, there is no Xneed to define the name.") X X(defvar gnus-your-organization "Fujitsu Laboratories Ltd., Kawasaki, Japan." X "*Your organization. XIf environment variable `ORGANIZATION' is defined, it's instead used.") X X(defvar gnus-use-generic-from nil X "*Don't insert local host name to From: field if non-nil.") X X;; Internal variables. X X(defconst gnus-version "GNUS 3.10" X "Version numbers of this version of GNUS.") X X(defvar gnus-ignored-headers X "^Path:\\|^Posting-Version:\\|^Article-I.D.:\\|^Expires:\\|^Date-Received:\\|^References:\\|^Control:\\|^Xref:\\|^Lines:\\|^Posted:\\|^Relay-Version:\\|^Message-ID:\\|^Nf-ID:\\|^Nf-From:\\|^Approved:\\|^Sender:" X "All random fields within the header of a message.") X X(defvar gnus-current-startup-file nil X "Startup file for current host.") X X;; Names of the following five variables should not be changed since X;; they are contained in quickly loadable .newsrc file. X X(defvar gnus-newsrc-options nil X "Options line in .newsrc file.") X X(defvar gnus-newsrc-options-n-yes nil X "Regexp representing subscribed newsgroups.") X X(defvar gnus-newsrc-options-n-no nil X "Regexp representing unsubscribed newsgroups.") X X(defvar gnus-newsrc-assoc nil X "Assoc list of read articles.") X X(defvar gnus-marked-assoc nil X "Assoc list of articles marked as unread.") X X(defvar gnus-unread-hashtb nil X "Hashtable of unread articles.") X X(defvar gnus-active-hashtb nil X "Hashtable of active articles.") X X(defvar gnus-octive-hashtb nil X "Hashtable of OLD active articles.") X X(defvar gnus-Group-buffer "*Newsgroup*") X(defvar gnus-Subject-buffer "*Subject*") X(defvar gnus-Article-buffer "*Article*") X(defvar gnus-Digest-buffer "GNUS Digest") X(defvar gnus-Digest-summary-buffer "GNUS Digest-summary") X X(defvar gnus-last-search nil X "Default regexp for article search command.") X X(defvar gnus-newsgroup-name nil) X(defvar gnus-newsgroup-begin nil) X(defvar gnus-newsgroup-end nil) X(defvar gnus-newsgroup-last-file nil) X X(defvar gnus-newsgroup-unreads nil X "List of unread articles in current newsgroup.") X X(defvar gnus-newsgroup-marked nil X "List of marked articles in current newsgroup.") X X(defvar gnus-newsgroup-headers nil X "List of article headers in current newsgroup.") X X(defvar gnus-current-article nil) X(defvar gnus-current-headers nil) X(defvar gnus-current-history nil) X(defvar gnus-have-all-headers nil) X(defvar gnus-last-article nil) X X(defvar gnus-Group-mode-map nil) X(defvar gnus-Subject-mode-map nil) X(defvar gnus-Article-mode-map nil) X(defvar gnus-Kill-file-mode-map nil) X X(defvar rmail-last-file (expand-file-name "~/XMBOX")) X(defvar rmail-last-rmail-file (expand-file-name "~/XNEWS")) X X(autoload 'rmail-output "rmailout" X "Append this message to Unix mail file named FILE-NAME." t) X(autoload 'news-mail-reply "rnewspost") X(autoload 'news-mail-other-window "rnewspost") X(autoload 'news-reply-mode "rnewspost") X(autoload 'mail-position-on-field "sendmail") X(autoload 'mh-find-path "mh-e") X(autoload 'mh-prompt-for-folder "mh-e") X X(put 'gnus-Group-mode 'mode-class 'special) X(put 'gnus-Subject-mode 'mode-class 'special) X(put 'gnus-Article-mode 'mode-class 'special) X X X;;(put 'eval-in-buffer-window 'lisp-indent-hook 1) X X(defmacro eval-in-buffer-window (buffer &rest forms) X "Pop to BUFFER, evaluate FORMS, and then returns to original window." X (` (let ((StartBufferWindow (selected-window))) X (unwind-protect X (progn X (pop-to-buffer (, buffer)) X (,@ forms)) X (select-window StartBufferWindow))))) X X(defmacro gnus-make-hashtable () X '(make-abbrev-table)) X X(defmacro gnus-gethash (string hashtable) X "Get hash value of STRING in HASHTABLE." X ;;(` (symbol-value (abbrev-symbol (, string) (, hashtable)))) X (` (abbrev-expansion (, string) (, hashtable)))) X X(defmacro gnus-sethash (string value hashtable) X "Set hash value. Arguments are STRING, VALUE, and HASHTABLE." X ;; We cannot use define-abbrev since it only accepts string as value. X (` (set (intern (, string) (, hashtable)) (, value)))) X X;; Note: Macros defined here are also defined in nntp.el. I don't like X;; to put them here, but many users got troubles with the old X;; definitions in nntp.elc. These codes are NNTP 3.7 version. X X(defmacro nntp-header-number (header) X "Return article number in HEADER." X (` (aref (, header) 0))) X X(defmacro nntp-set-header-number (header number) X "Set article number of HEADER to NUMBER." X (` (aset (, header) 0 (, number)))) X X(defmacro nntp-header-subject (header) X "Return subject string in HEADER." X (` (aref (, header) 1))) X X(defmacro nntp-set-header-subject (header subject) X "Set article subject of HEADER to SUBJECT." X (` (aset (, header) 1 (, subject)))) X X(defmacro nntp-header-from (header) X "Return author string in HEADER." X (` (aref (, header) 2))) X X(defmacro nntp-set-header-from (header from) X "Set article author of HEADER to FROM." X (` (aset (, header) 2 (, from)))) X X(defmacro nntp-header-xref (header) X "Return xref string in HEADER." X (` (aref (, header) 3))) X X(defmacro nntp-set-header-xref (header xref) X "Set article xref of HEADER to xref." X (` (aset (, header) 3 (, xref)))) X X(defmacro nntp-header-lines (header) X "Return lines in HEADER." X (` (aref (, header) 4))) X X(defmacro nntp-set-header-lines (header lines) X "Set article lines of HEADER to LINES." X (` (aset (, header) 4 (, lines)))) X X(defmacro nntp-header-date (header) X "Return date in HEADER." X (` (aref (, header) 5))) X X(defmacro nntp-set-header-date (header date) X "Set article date of HEADER to DATE." X (` (aset (, header) 5 (, date)))) X X(defmacro nntp-header-id (header) X "Return date in HEADER." X (` (aref (, header) 6))) X X(defmacro nntp-set-header-id (header id) X "Set article ID of HEADER to ID." X (` (aset (, header) 6 (, id)))) X X X;;; X;;; GNUS Group mode X;;; X X(if gnus-Group-mode-map X nil X (setq gnus-Group-mode-map (make-keymap)) X (suppress-keymap gnus-Group-mode-map) X (define-key gnus-Group-mode-map " " 'gnus-Group-read-group) X (define-key gnus-Group-mode-map "=" 'gnus-Group-select-group) X (define-key gnus-Group-mode-map "j" 'gnus-Group-jump-to-group) X (define-key gnus-Group-mode-map "n" 'gnus-Group-next-unread-group) X (define-key gnus-Group-mode-map "p" 'gnus-Group-prev-unread-group) X (define-key gnus-Group-mode-map "\177" 'gnus-Group-prev-unread-group) X (define-key gnus-Group-mode-map "N" 'gnus-Group-next-group) X (define-key gnus-Group-mode-map "P" 'gnus-Group-prev-group) X (define-key gnus-Group-mode-map "\C-n" 'gnus-Group-next-group) X (define-key gnus-Group-mode-map "\C-p" 'gnus-Group-prev-group) X (define-key gnus-Group-mode-map "/" 'isearch-forward) X (define-key gnus-Group-mode-map "<" 'beginning-of-buffer) X (define-key gnus-Group-mode-map ">" 'end-of-buffer) X (define-key gnus-Group-mode-map "u" 'gnus-Group-unsubscribe-current-group) X (define-key gnus-Group-mode-map "U" 'gnus-Group-unsubscribe-group) X (define-key gnus-Group-mode-map "c" 'gnus-Group-catch-up) X (define-key gnus-Group-mode-map "l" 'gnus-Group-list-groups) X (define-key gnus-Group-mode-map "L" 'gnus-Group-list-all-groups) X (define-key gnus-Group-mode-map "g" 'gnus-Group-get-new-news) X (define-key gnus-Group-mode-map "b" 'gnus-Group-check-bogus-groups) X (define-key gnus-Group-mode-map "a" 'gnus-Group-post-news) X (define-key gnus-Group-mode-map "K" 'gnus-Kill-file-edit-global) X (define-key gnus-Group-mode-map "V" 'gnus-version) X (define-key gnus-Group-mode-map "?" 'describe-mode) X (define-key gnus-Group-mode-map "x" 'gnus-Group-force-update) X (define-key gnus-Group-mode-map "s" 'gnus-Group-force-update) X (define-key gnus-Group-mode-map "q" 'gnus-Group-exit) X (define-key gnus-Group-mode-map "Q" 'gnus-Group-quit)) X X(defun gnus-Group-mode () X "Major mode for reading news using NNTP server. XAll normal editing commands are turned off. XInstead, these commands are available: X X\\[gnus-Group-read-group] Read news in this newsgroup. X\\[gnus-Group-select-group] Select this newsgroup. X\\[gnus-Group-jump-to-group] Move to specified newsgroup. X\\[gnus-Group-next-unread-group] Move to next unread newsgroup. X\\[gnus-Group-prev-unread-group] Move to previous unread newsgroup. X\\[gnus-Group-next-group] Move to next newsgroup. X\\[gnus-Group-prev-group] Move to previous newsgroup. X\\[isearch-forward] Do incremental search forward. X\\[beginning-of-buffer] Move point to beginning of this buffer. X\\[end-of-buffer] Move point to end of this buffer. X\\[gnus-Group-unsubscribe-current-group] Toggle this newsgroup unsubscribe from/to subscribe. X\\[gnus-Group-unsubscribe-group] Toggle newsgroup unsubscribe from/to subscribe. X\\[gnus-Group-catch-up] Mark all articles in this newsgroup as read. X\\[gnus-Group-list-groups] Revert this buffer. X\\[gnus-Group-list-all-groups] List all of newsgroups. X\\[gnus-Group-get-new-news] Get new news. X\\[gnus-Group-check-bogus-groups] Check bogus newsgroups. X\\[gnus-Group-post-news] Post an article to JUNET (USENET). X\\[gnus-Kill-file-edit-global] Edit global KILL file. X\\[gnus-version] Show version number of this GNUS. X\\[describe-mode] Describe this mode. X\\[gnus-Group-force-update] Save .newsrc file. X\\[gnus-Group-exit] Quit reading news. X\\[gnus-Group-quit] Quit reading news without saving .newsrc file. X XName of the host NNTP server is running is asked if no default host is Xdefined. It is also possible to choose some other host even when Xdefault host is defined by giving an argument to command `\\[gnus]'. X XIt is possible to read mails in MH folder or articles saved by GNUS by Xspecifying `:' followed by the directory name to NNTP server name. For Xexample, the name of the server is `:Mail', directory ~/Mail is Xtreated as news spool. File name of mails or articles must consist of Xnumbers. Otherwise, they are ignored. X XIf there exists a file named `~/.newsrc-SERVER', it is used as startup Xfile instead of standard one when talking to SERVER. It is possible Xto talk to many hosts by using different startup files for each. X XOption `-n' of options line in .newsrc file is recognized as same as Xstandard Bnews system. For example, if options line looks like a X`options -n !talk talk.rumors', newsgroups under `talk' hierarchy Xexcept for `talk.rumors' are ignored while checking new newsgroups. XThis is the only way for keeping .newsrc file small. X XIf there exists a file named `~/.signature-DISTRIBUTION', it is used Xas signature file instead of standard one when posting a news in XDISTRIBUTION. X XVariable `gnus-version', `nntp-version' and `nnspool-version' have Xversion number of this version of gnus.el, nntp.el and nnspool.el, Xrespectively. X XUser customizable variables: X gnus-nntp-server X Specifies host name NNTP server is running. If that value is a X string like a `:DIRECTORY', user's private DIRECTORY is used as X news spool. The variable is initialized from the NNTPSERVER X environment variable. X X [gnus-server-host is obsolete. It is renamed to gnus-nntp-server.] X X gnus-nntp-service X Specifies NNTP service name. The value is usually \"nntp\" or 119. X Nil forces GNUS to use local news spool if value of X `gnus-nntp-server' is local host name. X X [gnus-force-nntp is obsolete. Use gnus-nntp-service, instead.] X X gnus-startup-file X Specifies .newsrc file. If there is a file named `.newsrc-SERVER', X it's instead used when talking to SERVER. I recommend you to use X server specific file, if you'd like to talk to many servers. X Especially if you'd like to use your private directory as news X spool, the name of the file must be `.newsrc-:DIRECTORY'. X X gnus-author-copy-file X Specifies file name saving an article posted using GNUS to. If X the first character of the value is `|', contents of the article X will be piped out to a program specified by the rest of the value. X The variable is initialized from the AUTHORCOPY environment X variable. X X gnus-kill-file-name X Use specified file name as KILL file (default to `KILL'). X X gnus-novice-user X Non-nil means newsgroup, subject and distribution are asked X interactively when posting a new news. It is recommended to set it X to non-nil, if you are novice to network news. X XVarious hooks for customization: X gnus-Group-mode-hook X Entry to this mode calls the value with no arguments, if that X value is non-nil. This hook is called before connecting to NNTP X server. So, you can change or define NNTP server host in it. X X gnus-Startup-hook X Called with no arguments after NNTP server is selected. It is X possible to change the behaver of GNUS or initialize the variables X according to the server. X X gnus-Save-newsrc-hook X Called with no arguments when saving newsrc file if that value is X non-nil. X X gnus-Inews-article-hook X Called with no arguments when posting an article if that value is X non-nil. This hook is called just before posting an article, while X news-inews-hook is called before preparing article headers. If X you'd like to convert Kanji code of the article, this hook is recommended. X X gnus-Exit-gnus-hook X Called with no arguments when exiting GNUS, if that value is non-nil." X (interactive) X (kill-all-local-variables) X (if (boundp 'mode-line-modified) X (setq mode-line-modified "--- ") X (setq mode-line-format X (cons "--- " (cdr (default-value 'mode-line-format))))) X (setq major-mode 'gnus-Group-mode) X (setq mode-name "GNUS Newsgroup") X (setq mode-line-buffer-identification "GNUS: List of Newsgroups") X (setq mode-line-process nil) X (use-local-map gnus-Group-mode-map) X (buffer-flush-undo (current-buffer)) X (setq buffer-read-only t) ;Disable modification X (run-hooks 'gnus-Group-mode-hook)) X X(defun gnus (&optional confirm) X "Read network news. XIf optional argument CONFIRM is non-nil, ask host NNTP server is running." X (interactive "P") X (unwind-protect X (progn X (switch-to-buffer (get-buffer-create gnus-Group-buffer)) X (gnus-Group-mode) X (gnus-start-news-server confirm)) X (if (not (nntp-server-opened)) X (gnus-Group-quit) X ;; NNTP server is successfully open. X (setq mode-line-process (format " {%s}" gnus-nntp-server)) X (let ((buffer-read-only nil)) X (erase-buffer) X (gnus-Group-startup-message) X (sit-for 0)) X (run-hooks 'gnus-Startup-hook) X (gnus-setup-news-info) X (gnus-Group-list-groups nil)) X )) X X(defun gnus-Group-startup-message () X (insert "\n\n\n\n X GNUS Version 3.10 X X NNTP-based News Reader for GNU Emacs X X X If you have any trouble with this software, please let me X know. I will fix your problems in the next release. X X Comments, suggestions, and bug fixes are welcome. X X Masanobu UMEDA X umerin@flab.Fujitsu.JUNET X umerin%flab.Fujitsu.JUNET@uunet.UU.NET")) X X(defun gnus-Group-list-groups (show-all) X "List newsgroups in group selection buffer. XIf argument SHOW-ALL is non-nil, unsubscribed groups are also listed." X (interactive "P") X (gnus-Group-prepare show-all) X (if (zerop (buffer-size)) X (message "No news is good news") X ;; Adjust cursor point. X (goto-char (point-min)) X (search-forward ":" nil t) X )) X X(defun gnus-Group-prepare (&optional all) X "Prepare list of newsgroups in current buffer. XIf optional argument ALL is non-nil, unsubscribed groups are also listed." X (let ((buffer-read-only nil) X (newsrc gnus-newsrc-assoc) X (group-info nil) X (group-name nil) X (unread-count 0) X ;; This specifies format of Group display buffer. X (cntl "%s%s%5d: %s\n")) X (erase-buffer) X ;; List newsgroups. X (while newsrc X (setq group-info (car newsrc)) X (setq group-name (car group-info)) X (setq unread-count (nth 1 (gnus-gethash group-name gnus-unread-hashtb))) X (if (or all X (and (nth 1 group-info) ;Subscribed. X (> unread-count 0))) ;There are unread articles. X (insert X (format cntl X ;; Subscribed or not. X (if (nth 1 group-info) " " "U") X ;; Exists new news? X (if (and (> unread-count 0) X (>= 0 X (- unread-count X (length X (cdr (assoc group-name X gnus-marked-assoc)))))) X "*" " ") X ;; Number of unread articles. X unread-count X ;; Newsgroup name. X group-name)) X ) X (setq newsrc (cdr newsrc)) X ))) X X(defun gnus-Group-update-group (group &optional visible-only) X "Update newsgroup info of GROUP. XIf optional argument VISIBLE-ONLY is non-nil, non displayed group is ignored." X (let ((buffer-read-only nil) X (modified nil) X (visible nil) X (unread-count 0) X ;; This specifies format of Group display buffer. X (cntl "%s%s%5d: %s\n")) X (save-excursion X (set-buffer (get-buffer gnus-Group-buffer)) X ;; Search point to modify. X (goto-char (point-min)) X (if (re-search-forward (concat "^.+: " (regexp-quote group) "$") nil t) X ;; GROUP is listed in current buffer. X (progn X (setq visible t) X (beginning-of-line) X (kill-line 1) ;Delete old line. X )) X (if (or visible (not visible-only)) X (progn X (setq modified (point)) X (setq unread-count (nth 1 (gnus-gethash group gnus-unread-hashtb))) X (insert X (format cntl X ;; Subscribed or not. X (if (nth 1 (assoc group gnus-newsrc-assoc)) " " "U") X ;; Exists new news? X (if (and (> unread-count 0) X (>= 0 X (- unread-count X (length X (cdr (assoc group gnus-marked-assoc)))))) X "*" " ") X ;; Number of unread articles. X (nth 1 (gnus-gethash group gnus-unread-hashtb)) X ;; Newsgroup name. X group)) X )) X ) X ;; Move point of group display buffer to GROUP. X (if (not visible-only) X (let ((buffer (current-buffer))) X (set-buffer (get-buffer gnus-Group-buffer)) X (goto-char modified) X (set-buffer buffer))) X )) X X;; GNUS Group mode command X X(defun gnus-Group-group-name () X "Get newsgroup name around point." X (save-excursion X (beginning-of-line) X (if (looking-at ".[* \t]*[0-9]+:[ \t]+\\([^ \t\n]+\\)$") X (buffer-substring (match-beginning 1) (match-end 1)) X ))) X X(defun gnus-Group-read-group (all &optional no-article) X "Read news in this newsgroup. XIf argument ALL is non-nil, already read articles become readable. XIf optional argument NO-ARTICLE is non-nil, no article body is displayed." X (interactive "P") X (let ((group (gnus-Group-group-name))) ;Newsgroup name to read. X (if group X (gnus-Subject-read-group X group X (or all X ;;(not (nth 1 (assoc group gnus-newsrc-assoc))) ;Unsubscribed X (zerop X (nth 1 (gnus-gethash group gnus-unread-hashtb)))) ;No unread X no-article X )) X )) X X(defun gnus-Group-select-group (all) X "Select this newsgroup. XNo article is selected automatically. XIf argument ALL is non-nil, already read articles become readable." X (interactive "P") X (gnus-Group-read-group all t)) X X(defun gnus-Group-jump-to-group (group) X "Jump to newsgroup GROUP." X (interactive X (list (completing-read "Newsgroup: " gnus-newsrc-assoc nil 'require-match))) X (if (assoc group gnus-newsrc-assoc) X (progn X (goto-char (point-min)) X (or (re-search-forward (concat "^.+: " (regexp-quote group) "$") nil t) X ;; Add GROUP entry, then seach again. X (gnus-Group-update-group group)) X ;; Adjust cursor point. X (beginning-of-line) X (search-forward ":" nil t)) X )) X X(defun gnus-Group-search-forward (backward any-group) X "Search for newsgroup forward. XIf 1st argument BACKWARD is non-nil, search backward instead. XIf 2nd argument ANY-GROUP is non-nil, unsubscribed or empty group Xmay be selected." X (let ((func (if backward 're-search-backward 're-search-forward)) X (regexp X (format "^%s[ \t]*\\(%s\\):" X (if any-group ".." " [ \t]") X (if any-group "[0-9]+" "[1-9][0-9]*"))) X (found nil)) X (if backward X (beginning-of-line) X (end-of-line)) X (if (funcall func regexp nil t) X (setq found t)) X ;; Adjust cursor point. X (beginning-of-line) X (search-forward ":" nil t) X ;; Return T if found. X found X )) X X(defun gnus-Group-next-group (n) X "Go to next N'th newsgroup." X (interactive "p") X (while (and (> n 1) X (gnus-Group-search-forward nil t)) X (setq n (1- n))) X (or (gnus-Group-search-forward nil t) X (message "No more newsgroup"))) X X(defun gnus-Group-next-unread-group (n) X "Go to next N'th unread newsgroup." X (interactive "p") X (while (and (> n 1) X (gnus-Group-search-forward nil nil)) X (setq n (1- n))) X (or (gnus-Group-search-forward nil nil) X (message "No more unread newsgroup"))) X X(defun gnus-Group-prev-group (n) X "Go to previous N'th newsgroup." X (interactive "p") X (while (and (> n 1) X (gnus-Group-search-forward t t)) X (setq n (1- n))) X (or (gnus-Group-search-forward t t) X (message "No more newsgroup"))) X X(defun gnus-Group-prev-unread-group (n) X "Go to previous N'th unread newsgroup." X (interactive "p") X (while (and (> n 1) X (gnus-Group-search-forward t nil)) X (setq n (1- n))) X (or (gnus-Group-search-forward t nil) X (message "No more unread newsgroup"))) X X(defun gnus-Group-catch-up (no-confirm) X "Mark all articles in current newsgroup as read. XIf argument NO-CONFIRM is non-nil, do without confirmations. XCross references (Xref: field) of articles are ignored." X (interactive "P") X (let ((group (gnus-Group-group-name))) X (if (and group X (or no-confirm X (y-or-n-p "Do you really want to mark everything as read? "))) X (progn X (gnus-update-unread-articles group nil nil) X (gnus-Group-update-group group) X (gnus-Group-next-group 1)) X ))) X X(defun gnus-Group-unsubscribe-current-group () X "Toggle subscribe from/to unsubscribe current group." X (interactive) X (gnus-Group-unsubscribe-group (gnus-Group-group-name)) X (gnus-Group-next-group 1)) X X(defun gnus-Group-unsubscribe-group (group) X "Toggle subscribe from/to unsubscribe GROUP." X ;; BUGS: Completing read with gnus-active-hashtb is much better X ;; since it is possible to add new newsgroup which is ignored by X ;; options line in .newsrc file. This may be supported in 4.* X ;; version. X (interactive X (list (completing-read "Newsgroup: " gnus-newsrc-assoc nil 'require-match))) X (let ((newsrc (assoc group gnus-newsrc-assoc))) X (if newsrc X (progn X (setcar (nthcdr 1 newsrc) (not (nth 1 newsrc))) X (gnus-update-newsrc-buffer group) X (gnus-Group-update-group group) X ;; Adjust cursor point. X (beginning-of-line) X (search-forward ":" nil t) X ) X (ding) (message "No such newsgroup: %s" group)) X )) X X(defun gnus-Group-list-all-groups () X "List all of newsgroups in group selection buffer." X (interactive) X (gnus-Group-list-groups t)) X X(defun gnus-Group-get-new-news (all) X "Re-read active file. XIf argument ALL is non-nil, unsubscribed or empty group is also listed." X (interactive "P") X (gnus-setup-news-info) X (gnus-Group-list-groups all)) X X(defun gnus-Group-check-bogus-groups () X "Check bogus newsgroup." X (interactive) X (gnus-delete-bogus-newsgroup t) ;Require confirmation. X (gnus-Group-list-groups nil)) X X(defun gnus-Group-post-news () X "Post an article." X (interactive) X (if (get-buffer gnus-Subject-buffer) X (bury-buffer gnus-Subject-buffer)) X (if (get-buffer gnus-Article-buffer) X (bury-buffer gnus-Article-buffer)) X (gnus-post-news)) X X(defun gnus-Group-force-update () X "Update .newsrc file." X (interactive) X (gnus-save-newsrc-file)) X X(defun gnus-Group-exit () X "Quit reading news after updating .newsrc." X (interactive) X (if (or (zerop (buffer-size)) X (not (nntp-server-opened)) X (y-or-n-p "Are you sure you want to quit reading news? ")) X (progn X (gnus-save-newsrc-file) X (gnus-clear-system) X (nntp-close-server) X (run-hooks 'gnus-Exit-gnus-hook)) X )) X X(defun gnus-Group-quit () X "Quit reading news without updating .newsrc." X (interactive) X (if (or (zerop (buffer-size)) X (not (nntp-server-opened)) X (yes-or-no-p X (format "Quit reading news without saving %s? " X (file-name-nondirectory gnus-current-startup-file)))) X (progn X (gnus-clear-system) X (nntp-close-server) X (run-hooks 'gnus-Exit-gnus-hook)) X )) X X X;;; X;;; GNUS Subject mode X;;; X X(if gnus-Subject-mode-map X nil X (setq gnus-Subject-mode-map (make-keymap)) X (suppress-keymap gnus-Subject-mode-map) X (define-key gnus-Subject-mode-map " " 'gnus-Subject-next-page) X (define-key gnus-Subject-mode-map "\177" 'gnus-Subject-prev-page) X (define-key gnus-Subject-mode-map "\r" 'gnus-Subject-scroll-up) X (define-key gnus-Subject-mode-map "n" 'gnus-Subject-next-unread-article) X (define-key gnus-Subject-mode-map "p" 'gnus-Subject-prev-unread-article) X (define-key gnus-Subject-mode-map "N" 'gnus-Subject-next-article) X (define-key gnus-Subject-mode-map "P" 'gnus-Subject-prev-article) X (define-key gnus-Subject-mode-map "\e\C-n" 'gnus-Subject-next-same-subject) X (define-key gnus-Subject-mode-map "\e\C-p" 'gnus-Subject-prev-same-subject) X ;;(define-key gnus-Subject-mode-map "\e\C-n" 'gnus-Subject-next-unread-same-subject) X ;;(define-key gnus-Subject-mode-map "\e\C-p" 'gnus-Subject-prev-unread-same-subject) X (define-key gnus-Subject-mode-map "\C-c\C-n" 'gnus-Subject-next-digest) X (define-key gnus-Subject-mode-map "\C-c\C-p" 'gnus-Subject-prev-digest) X (define-key gnus-Subject-mode-map "\C-n" 'gnus-Subject-next-subject) X (define-key gnus-Subject-mode-map "\C-p" 'gnus-Subject-prev-subject) X (define-key gnus-Subject-mode-map "\en" 'gnus-Subject-next-unread-subject) X (define-key gnus-Subject-mode-map "\ep" 'gnus-Subject-prev-unread-subject) X ;;(define-key gnus-Subject-mode-map "\C-cn" 'gnus-Subject-next-group) X ;;(define-key gnus-Subject-mode-map "\C-cp" 'gnus-Subject-prev-group) X (define-key gnus-Subject-mode-map "." 'gnus-Subject-first-unread-article) X (define-key gnus-Subject-mode-map "/" 'isearch-forward) X (define-key gnus-Subject-mode-map "s" 'gnus-Subject-isearch-article) X (define-key gnus-Subject-mode-map "\es" 'gnus-Subject-search-article-forward) X (define-key gnus-Subject-mode-map "\eS" 'gnus-Subject-search-article-backward) X (define-key gnus-Subject-mode-map "<" 'gnus-Subject-beginning-of-article) X (define-key gnus-Subject-mode-map ">" 'gnus-Subject-end-of-article) X (define-key gnus-Subject-mode-map "j" 'gnus-Subject-goto-subject) X (define-key gnus-Subject-mode-map "J" 'gnus-Subject-goto-article) X (define-key gnus-Subject-mode-map "l" 'gnus-Subject-goto-last-article) X (define-key gnus-Subject-mode-map "^" 'gnus-Subject-refer-parent-article) X (define-key gnus-Subject-mode-map "\er" 'gnus-Subject-refer-article) X (define-key gnus-Subject-mode-map "u" 'gnus-Subject-mark-as-unread-forward) X (define-key gnus-Subject-mode-map "U" 'gnus-Subject-mark-as-unread-backward) X (define-key gnus-Subject-mode-map "d" 'gnus-Subject-mark-as-read-forward) X (define-key gnus-Subject-mode-map "D" 'gnus-Subject-mark-as-read-backward) X (define-key gnus-Subject-mode-map "\eu" 'gnus-Subject-clear-mark-forward) X (define-key gnus-Subject-mode-map "\eU" 'gnus-Subject-clear-mark-backward) X (define-key gnus-Subject-mode-map "k" 'gnus-Subject-kill-same-subject-and-select) X (define-key gnus-Subject-mode-map "\C-k" 'gnus-Subject-kill-same-subject) X (define-key gnus-Subject-mode-map "&" 'gnus-Subject-execute-command) X ;;(define-key gnus-Subject-mode-map "c" 'gnus-Subject-catch-up) X (define-key gnus-Subject-mode-map "c" 'gnus-Subject-catch-up-and-exit) X (define-key gnus-Subject-mode-map "\C-t" 'gnus-Subject-toggle-truncation) X (define-key gnus-Subject-mode-map "x" 'gnus-Subject-delete-marked-as-read) X (define-key gnus-Subject-mode-map "X" 'gnus-Subject-delete-marked) X (define-key gnus-Subject-mode-map "\C-c\C-sn" 'gnus-Subject-sort-by-number) X (define-key gnus-Subject-mode-map "\C-c\C-sa" 'gnus-Subject-sort-by-author) X (define-key gnus-Subject-mode-map "\C-c\C-ss" 'gnus-Subject-sort-by-subject) X (define-key gnus-Subject-mode-map "\C-c\C-sd" 'gnus-Subject-sort-by-date) X (define-key gnus-Subject-mode-map "\C-c\C-s\C-n" 'gnus-Subject-sort-by-number) X (define-key gnus-Subject-mode-map "\C-c\C-s\C-a" 'gnus-Subject-sort-by-author) X (define-key gnus-Subject-mode-map "\C-c\C-s\C-s" 'gnus-Subject-sort-by-subject) X (define-key gnus-Subject-mode-map "\C-c\C-s\C-d" 'gnus-Subject-sort-by-date) X (define-key gnus-Subject-mode-map "=" 'delete-other-windows) X (define-key gnus-Subject-mode-map "G" 'gnus-Subject-show-all-subjects) X (define-key gnus-Subject-mode-map "w" 'gnus-Subject-stop-page-breaking) X (define-key gnus-Subject-mode-map "\C-c\C-r" 'gnus-Subject-caesar-message) X (define-key gnus-Subject-mode-map "g" 'gnus-Subject-show-article) X (define-key gnus-Subject-mode-map "t" 'gnus-Subject-toggle-header) X (define-key gnus-Subject-mode-map "v" 'gnus-Subject-show-all-headers) X (define-key gnus-Subject-mode-map "\C-d" 'gnus-Subject-rmail-digest) X (define-key gnus-Subject-mode-map "a" 'gnus-Subject-post-news) X (define-key gnus-Subject-mode-map "f" 'gnus-Subject-post-reply) X (define-key gnus-Subject-mode-map "C" 'gnus-Subject-cancel) X (define-key gnus-Subject-mode-map "r" 'gnus-Subject-mail-reply) X (define-key gnus-Subject-mode-map "m" 'gnus-Subject-mail-other-window) X (define-key gnus-Subject-mode-map "o" 'gnus-Subject-save-article) X (define-key gnus-Subject-mode-map "\C-o" 'gnus-Subject-save-in-mail) X (define-key gnus-Subject-mode-map "|" 'gnus-Subject-pipe-output) X (define-key gnus-Subject-mode-map "K" 'gnus-Kill-file-edit-local) X (define-key gnus-Subject-mode-map "V" 'gnus-version) X (define-key gnus-Subject-mode-map "?" 'describe-mode) X (define-key gnus-Subject-mode-map "q" 'gnus-Subject-exit) X (define-key gnus-Subject-mode-map "Q" 'gnus-Subject-quit)) X X(defun gnus-Subject-mode () X "Major mode for reading news in this newsgroup. XAll normal editing commands are turned off. XInstead, these commands are available: X X\\[gnus-Subject-next-page] Scroll to next page of current article. X Next unread article's selected automatically at the end of the message. X\\[gnus-Subject-prev-page] Scroll to previous page of current article. X\\[gnus-Subject-scroll-up] Scroll up (or down) one line current article. X\\[gnus-Subject-next-unread-article] Move to next unread article. X\\[gnus-Subject-prev-unread-article] Move to previous unread article. X\\[gnus-Subject-next-article] Move to next article whether read or not. X\\[gnus-Subject-prev-article] Move to previous article whether read or not. X\\[gnus-Subject-next-same-subject] Move to next article which has same subject as current article. X\\[gnus-Subject-prev-same-subject] Move to previous article which has same subject as current article. X\\[gnus-Subject-next-unread-same-subject] Move to next unread article which has same subject as current article. X\\[gnus-Subject-prev-unread-same-subject] Move to previous unread article which has same subject as current article. X\\[gnus-Subject-next-digest] Scroll to next digested message of current article. X\\[gnus-Subject-prev-digest] Scroll to previous digested message of current article. X\\[gnus-Subject-next-subject] Move to next subject line. X\\[gnus-Subject-prev-subject] Move to previous subject line. X\\[gnus-Subject-next-unread-subject] Move to next unread article's subject. X\\[gnus-Subject-prev-unread-subject] Move to previous unread article's subject. X\\[gnus-Subject-next-group] Exit current newsgroup and select next unread newsgroup. X\\[gnus-Subject-prev-group] Exit current newsgroup and select previous unread newsgroup. X\\[gnus-Subject-first-unread-article] Jump to first unread article in current newsgroup. X\\[isearch-forward] Do incremental search forward on subjects. X\\[gnus-Subject-isearch-article] Do incremental search forward on current article. X\\[gnus-Subject-search-article-forward] Search for an article containing regexp forward. X\\[gnus-Subject-search-article-backward] Search for an article containing regexp backward. X\\[gnus-Subject-beginning-of-article] Move point to beginning of current article. X\\[gnus-Subject-end-of-article] Move point to end of current article. X\\[gnus-Subject-goto-subject] Jump to article specified by numeric article ID. X\\[gnus-Subject-goto-article] Jump to article specified by numeric article ID, then read it. X\\[gnus-Subject-goto-last-article] Jump to article you read last. X\\[gnus-Subject-refer-parent-article] Refer parent article of current article. X\\[gnus-Subject-refer-article] Refer article specified by message-id. X\\[gnus-Subject-mark-as-unread-forward] Mark current article as unread, and go forward. X\\[gnus-Subject-mark-as-unread-backward] Mark current article as unread, and go backward. X\\[gnus-Subject-mark-as-read-forward] Mark current article as read, and go forward. X\\[gnus-Subject-mark-as-read-backward] Mark current article as read, and go backward. X\\[gnus-Subject-clear-mark-forward] Clear current article's mark, and go forward. X\\[gnus-Subject-clear-mark-backward] Clear current article's mark, and go backward. SHAR_EOF echo "End of part 1, continue with part 2" echo "2" > s2_seq_.tmp exit 0 -- Masanobu UMEDA umerin@flab.flab.Fujitsu.JUNET umerin%flab.flab.Fujitsu.JUNET@uunet.uu.NET