|
|
1.1 ! root 1: ''' $Header: rn.1,v 4.3.1.5 85/09/10 11:05:55 lwall Exp $ ! 2: ''' ! 3: ''' $Log: rn.1,v $ ! 4: ''' Revision 4.3.1.5 85/09/10 11:05:55 lwall ! 5: ''' Improved %m in in_char(). ! 6: ''' ! 7: ''' Revision 4.3.1.4 85/07/23 18:26:40 lwall ! 8: ''' Added MAILCALL. ! 9: ''' ! 10: ''' Revision 4.3.1.3 85/05/23 17:14:14 lwall ! 11: ''' Now allows 'r' and 'f' on null articles. ! 12: ''' ! 13: ''' Revision 4.3.1.2 85/05/13 09:27:53 lwall ! 14: ''' Added CUSTOMLINES option. ! 15: ''' ! 16: ''' Revision 4.3.1.1 85/05/10 11:38:22 lwall ! 17: ''' Branch for patches. ! 18: ''' ! 19: ''' Revision 4.3 85/05/01 11:48:26 lwall ! 20: ''' Baseline for release with 4.3bsd. ! 21: ''' ! 22: ''' ! 23: .de Sh ! 24: .br ! 25: .ne 5 ! 26: .PP ! 27: \fB\\$1\fR ! 28: .PP ! 29: .. ! 30: .de Sp ! 31: .if t .sp .5v ! 32: .if n .sp ! 33: .. ! 34: .de Ip ! 35: .br ! 36: .ie \\n.$>=3 .ne \\$3 ! 37: .el .ne 3 ! 38: .IP "\\$1" \\$2 ! 39: .. ! 40: ''' ! 41: ''' Set up \*(-- to give an unbreakable dash; ! 42: ''' string Tr holds user defined translation string. ! 43: ''' Bell System Logo is used as a dummy character. ! 44: ''' ! 45: .tr \(bs-|\(bv\*(Tr ! 46: .ie n \{\ ! 47: .ds -- \(bs- ! 48: .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch ! 49: .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch ! 50: .ds L" "" ! 51: .ds R" "" ! 52: .ds L' ' ! 53: .ds R' ' ! 54: 'br\} ! 55: .el\{\ ! 56: .ds -- \(em\| ! 57: .tr \*(Tr ! 58: .ds L" `` ! 59: .ds R" '' ! 60: .ds L' ` ! 61: .ds R' ' ! 62: 'br\} ! 63: .TH RN 1 LOCAL ! 64: .SH NAME ! 65: rn - new read news program ! 66: .SH SYNOPSIS ! 67: .B rn [options] [newsgroups] ! 68: .SH DESCRIPTION ! 69: .I Rn ! 70: is a replacement for the readnews(1) program that was written to be as ! 71: efficient as possible, particularly in human interaction. ! 72: .I Rn ! 73: attempts to minimize the amount of \*(L"dead\*(R" time spent reading ! 74: news\*(--it tries to get things done while the user is reading or deciding ! 75: whether to read, and attempts to get useful information onto the screen as ! 76: soon as possible, highlighting spots that the eye makes frequent reference ! 77: to, like subjects and previously read lines. ! 78: Whether or not it's faster, it SEEMS faster. ! 79: .PP ! 80: If no newsgroups are specified, all the newsgroups which have unread news ! 81: are displayed, and then the user is asked for each one whether he wants to ! 82: read it, in the order in which the newsgroups occur in the ! 83: .I .newsrc ! 84: file. ! 85: With a list of newsgroups, ! 86: .I rn ! 87: will start up in \*(L"add\*(R" mode, using the list as a set of patterns to ! 88: add new newsgroups and restrict which newsgroups are displayed. ! 89: See the discussion of the \*(L'a\*(R' command on the newsgroup selection ! 90: level. ! 91: .PP ! 92: .I Rn ! 93: operates on three levels: the newsgroup selection level, the article ! 94: selection level, and the paging level. ! 95: Each level has its own set of commands, and its own help menu. ! 96: At the paging level (the bottom level), ! 97: .I rn ! 98: behaves much like the ! 99: .IR more (1) ! 100: program. ! 101: At the article selection level, you may specify which article you want ! 102: next, or read them in the default order, which is either in order of ! 103: arrival on your system, or by subject threads. ! 104: At the newsgroup selection level (the top level), you may specify which ! 105: newsgroup you want next, or read them in the default order, which is the ! 106: order that the newsgroups occur in your ! 107: .I .newsrc ! 108: file. ! 109: (You will therefore want to rearrange your ! 110: .I .newsrc ! 111: file to put the most interesting newsgroups first. ! 112: This can be done with the \*(L'm\*(R' command on the Newsgroup Selection level. ! 113: WARNING: invoking readnews/vnews (the old user interface) in any way (including ! 114: as a news checker in your login sequence!) will cause your ! 115: .I .newsrc ! 116: to be disarranged again.) ! 117: .PP ! 118: On any level, at ANY prompt, an \*(L'h\*(R' may be typed for a list of ! 119: available commands. ! 120: This is probably the most important command to remember, so don't you ! 121: forget it. ! 122: Typing space to any question means to do the normal thing. ! 123: You will know what that is because ! 124: every prompt has a list of several plausible commands enclosed in ! 125: square brackets. ! 126: The first command in the list is the one which will be done if you type ! 127: a space. ! 128: (All input is done in cbreak mode, so carriage returns should not be typed ! 129: to terminate anything except certain multi-character commands. ! 130: Those commands will be obvious in the discussion below because they take an ! 131: argument.) ! 132: .PP ! 133: Upon startup, ! 134: .I rn ! 135: will do several things: ! 136: .Ip 1. 4 ! 137: It will look for your ! 138: .I .newsrc ! 139: file, which is your list of subscribed-to ! 140: newsgroups. ! 141: If ! 142: .I rn ! 143: doesn't find a ! 144: .IR .newsrc , ! 145: it will create one. ! 146: If it does find one, it will back it up under the name \*(L".oldnewsrc\*(R". ! 147: .Ip 2. 4 ! 148: It will input your ! 149: .I .newsrc ! 150: file, listing out the first several newsgroups ! 151: with unread news. ! 152: .Ip 3. 4 ! 153: It will perform certain consistency checks on your ! 154: .IR .newsrc . ! 155: If your ! 156: .I .newsrc ! 157: is out of date in any of several ways, ! 158: .I rn ! 159: will warn you and patch it up for you, but you may have to wait a little ! 160: longer for it to start up. ! 161: .Ip 4. 4 ! 162: .I Rn ! 163: will next check to see if any new newsgroups have been created, and give ! 164: you the opportunity to add them to your ! 165: .IR .newsrc . ! 166: .Ip 5. 4 ! 167: .I Rn ! 168: goes into the top prompt level\*(--the newsgroup selection level. ! 169: .Sh "Newsgroup Selection Level" ! 170: In this section the words \*(L"next\*(R" and \*(L"previous\*(R" refer to ! 171: the ordering of the newsgroups in your ! 172: .I .newsrc ! 173: file. ! 174: On the newsgroup selection level, the prompt looks like this: ! 175: .Sp ! 176: ******** 17 unread articles in net.blurfl\*(--read now? [ynq] ! 177: .Sp ! 178: and the following commands may be given at this level: ! 179: .Ip y,SP 8 ! 180: Do this newsgroup now. ! 181: .Ip .command 8 ! 182: Do this newsgroup now, but execute ! 183: .I command ! 184: before displaying anything. ! 185: The command will be interpreted as if given on the article selection level. ! 186: .Ip = 8 ! 187: Do this newsgroup now, but list subjects before displaying articles. ! 188: .Ip n 8 ! 189: Go to the next newsgroup with unread news. ! 190: .Ip N 8 ! 191: Go to the next newsgroup. ! 192: .Ip p 8 ! 193: Go to the previous newsgroup with unread news. ! 194: If there is none, stay at the current newsgroup. ! 195: .Ip P 8 ! 196: Go to the previous newsgroup. ! 197: .Ip \- 8 ! 198: Go to the previously displayed newsgroup (regardless of whether it is ! 199: before or after the current one in the list). ! 200: .Ip 1 8 ! 201: Go to the first newsgroup. ! 202: .Ip ^ 8 ! 203: Go to the first newsgroup with unread news. ! 204: .Ip $ 8 ! 205: Go to the end of the newsgroups list. ! 206: .Ip "g newsgroup" 8 ! 207: Go to ! 208: .IR newsgroup . ! 209: If it isn't currently subscribed to, you will be asked if you want to ! 210: subscribe. ! 211: .Ip "/pattern" 8 ! 212: Scan forward for a newsgroup matching ! 213: .IR pattern . ! 214: Patterns do globbing like filenames, i.e., use ? to match a single ! 215: character, * to match any sequence of characters, and [] to specify a list ! 216: of characters to match. ! 217: (\*(L"all\*(R" may be used as a synonym for \*(L"*\*(R".) ! 218: Unlike normal filename globbing, newsgroup searching is not anchored to ! 219: the front and back of the filename, i.e. \*(L"/jok\*(R" will find ! 220: net.jokes. ! 221: You may use ^ or $ to anchor the front or back of the search: ! 222: \*(L"/^test$\*(R" will find newsgroup test and nothing else ! 223: If you want to include newsgroups with 0 unread articles, append /r. ! 224: If the newsgroup is not found between the current newsgroup and the last ! 225: newsgroup, the search will wrap around to the beginning. ! 226: .Ip "?pattern" 8 ! 227: Same as /, but search backwards. ! 228: .Ip u 8 ! 229: Unsubscribe from current newsgroup. ! 230: .Ip "l string" 8 ! 231: List newsgroups not subscribed to which contain the string specified. ! 232: .Ip L 8 13v ! 233: Lists the current state of the ! 234: .IR .newsrc , ! 235: along with status information. ! 236: .Sp ! 237: .nf ! 238: \h'|0.5i'Status \h'|2i'Meaning ! 239: \h'|0.5i'<number> \h'|2i'Count of unread articles in newsgroup. ! 240: \h'|0.5i'READ \h'|2i'No unread articles in newsgroup. ! 241: \h'|0.5i'UNSUB \h'|2i'Unsubscribed newsgroup. ! 242: \h'|0.5i'BOGUS \h'|2i'Bogus newsgroup. ! 243: \h'|0.5i'JUNK \h'|2i'Ignored line in .newsrc ! 244: \h'|2i'(e.g. readnews \*(L"options\*(R" line). ! 245: .fi ! 246: .Sp ! 247: (A bogus newsgroup is one that is not in the list of active newsgroups ! 248: in the active file, which on most systems is /usr/lib/news/active.) ! 249: .Ip "m name" 8 ! 250: Move the named newsgroup somewhere else in the ! 251: .IR .newsrc . ! 252: If no name is given, the current newsgroup is moved. ! 253: There are a number of ways to specify where you want the newsgroup\*(--type ! 254: h for help when it asks where you want to put it. ! 255: .Ip c 8 ! 256: Catch up\*(--mark all unread articles in this newsgroup as read. ! 257: .Ip "o pattern" 8 ! 258: Only display those newsgroups whose name matches ! 259: .IR pattern . ! 260: Patterns are the same as for the \*(L'/\*(R' command. ! 261: Multiple patterns may be separated by spaces, just as on the ! 262: command line. ! 263: The restriction will remain in effect either until there are no articles ! 264: left in the restricted set of newsgroups, or another restriction command ! 265: is given. ! 266: Since ! 267: .I pattern ! 268: is optional, \*(L'o\*(R' by itself will remove the ! 269: restriction. ! 270: .Ip "a pattern" 8 ! 271: Add new newsgroups matching ! 272: .IR pattern . ! 273: Newsgroups which are already in your ! 274: .I .newsrc ! 275: file, whether subscribed to or ! 276: not, will not be listed. ! 277: If any new newsgroups are found, you will be asked for each one whether ! 278: you would like to add it. ! 279: After any new newsgroups have been added, the \*(L'a\*(R' command also ! 280: restricts the current set of newsgroups just like the \*(L'o\*(R' command ! 281: does. ! 282: .Ip & 8 ! 283: Print out the current status of command line switches and any newsgroup ! 284: restrictions. ! 285: .Ip "&switch {switch}" 8 ! 286: Set additional command line switches. ! 287: .Ip && 8 ! 288: Print out the current macro definitions. ! 289: .Ip "&&keys commands" 8 ! 290: Define additional macros. ! 291: .Ip !command 8 ! 292: Escape to a subshell. ! 293: One exclamation mark (!) leaves you in your own news directory. ! 294: A double exclamation mark (!!) leaves you in the spool ! 295: directory for news, which on most systems is /usr/spool/news. ! 296: The environment variable SHELL will be used if defined. ! 297: If ! 298: .I command ! 299: is null, an interactive shell is started. ! 300: .Ip q 8 ! 301: Quit. ! 302: .Ip x 8 ! 303: Quit, restoring .newsrc to its state at startup of ! 304: .IR rn . ! 305: The .newsrc you would have had if you had exited with \*(L'q\*(R' will be ! 306: called .newnewsrc, in case you didn't really want to type \*(L'x\*(R'. ! 307: .Ip ^K 8 ! 308: Edit the global KILL file. ! 309: This is a file which contains /pattern/j commands (one per line) to be ! 310: applied to every newsgroup as it is started up, that is, when it is ! 311: selected on the newsgroup selection level. ! 312: The purpose of a KILL file is to mark articles as read on the basis of some ! 313: set of patterns. ! 314: This saves considerable wear and tear on your \*(L'n\*(R' key. ! 315: There is also a local KILL file for each newsgroup. ! 316: Because of the overhead involved in searching for articles to kill, it is ! 317: better if possible to use a local KILL file. ! 318: Local KILL files are edited with a \*(L'^K\*(R' on the article selection level. ! 319: There are also automatic ways of adding search commands to the local KILL ! 320: file\*(--see the \*(L'K\*(R' command and the K search modifier on the ! 321: article selection level. ! 322: .Sp ! 323: If either of the environment variables VISUAL or EDITOR is set, the ! 324: specified editor will be invoked; otherwise a default editor (normally vi(1)) ! 325: is invoked on the KILL file. ! 326: .Sh "Article Selection Level" ! 327: On the article selection level, ! 328: .I rn ! 329: selects (by default) unread articles in numerical order (the order in which ! 330: articles have arrived at your site). ! 331: If you do a subject search (^N), the default order is modified to be ! 332: numerical order within each subject thread. ! 333: You may switch back and forth between numerical order and subject thread ! 334: order at will. ! 335: The ! 336: .B \-S ! 337: switch can be used to make subject search mode the default. ! 338: .Sp ! 339: On the article selection level you are ! 340: .I not ! 341: asked whether you want to read an article before the article is displayed; ! 342: rather, ! 343: .I rn ! 344: simply displays the first page (or portion of a page, at low baud rates) of the ! 345: article and asks if you want to continue. ! 346: The normal article selection prompt comes at the END of the article ! 347: (though article selection commands can be given from within the middle ! 348: of the article (the pager level) also). ! 349: The prompt at the end of an article looks like this: ! 350: .Sp ! 351: End of article 248 (of 257)\*(--what next? [npq] ! 352: .Sp ! 353: The following are the options at this point: ! 354: .Ip n,SP 8 ! 355: Scan forward for next unread article. ! 356: (Note: the \*(L'n\*(R' (next) command when typed at the end of an article ! 357: does not mark the article as read, since an article is automaticaly marked ! 358: as read after the last line of it is printed. ! 359: It is therefore possible to type a sequence such as \*(L'mn\*(R' and leave ! 360: the article marked as unread. ! 361: The fact that an article is marked as read by typing \*(L'n\*(R', ! 362: \&\*(L'N\*(R', \*(L'^N\*(R', \*(L's\*(R', or \*(L'S\*(R' within the MIDDLE of ! 363: the article is in fact a special case.) ! 364: .Ip N 8 ! 365: Go to the next article. ! 366: .Ip ^N 8 ! 367: Scan forward for the next article with the same subject, and make ^N default ! 368: (subject search mode). ! 369: .Ip p 8 ! 370: Scan backward for previous unread article. ! 371: If there is none, stay at the current article. ! 372: .Ip P 8 ! 373: Go to the previous article. ! 374: .Ip \- 8 ! 375: Go to the previously displayed article (regardless of whether that article ! 376: is before or after this article in the normal sequence). ! 377: .Ip ^P 8 ! 378: Scan backward for the previous article with the same subject, and make ! 379: ^N default (subject search mode). ! 380: .Ip ^R 8 ! 381: Restart the current article. ! 382: .Ip v 8 ! 383: Restart the current article verbosely, displaying the entire header. ! 384: .Ip ^L 8 ! 385: Refresh the screen. ! 386: .Ip ^X 8 ! 387: Restart the current article, and decrypt as a rot13 message. ! 388: .Ip X 8 ! 389: Refresh the screen, and decrypt as a rot13 message. ! 390: .Ip b 8 ! 391: Back up one page. ! 392: .Ip q 8 ! 393: Quit this newsgroup and go back to the newsgroup selection level. ! 394: .Ip ^ 8 ! 395: Go to the first unread article. ! 396: .Ip $ 8 ! 397: Go to the last article (actually, one past the last article). ! 398: .Ip "number" 8 ! 399: Go to the numbered article. ! 400: .Ip "range{,range} command{:command}" 8 ! 401: Apply a set of commands to a set of articles. ! 402: A range consists of either <article number> or ! 403: <article\ number>\-<article\ number>. ! 404: A dot \*(L'.\*(R' represents the current article, and a dollar ! 405: sign \*(L'$\*(R' represents the last article. ! 406: .Sp ! 407: Applicable commands include \*(L'm\*(R' (mark as unread), \*(L'M\*(R' ! 408: (delayed mark as unread), \*(L'j\*(R' (mark as read), \*(L"s dest\*(R" ! 409: (save to a destination), \*(L"!command\*(R" (shell escape), \*(L"=\*(R" ! 410: (print the subject) and \*(L"C\*(R" (cancel). ! 411: .Ip j 8 ! 412: Junk the current article\*(--mark it as read. ! 413: If this command is used from within an article, you are left at the end of ! 414: the article, unlike \*(L'n\*(R', which looks for the next article. ! 415: .Ip m 8 ! 416: Mark the current article as still unread. ! 417: (If you are in subject search mode you probably want to use M instead of m. ! 418: Otherwise the current article may be selected as the beginning of the next ! 419: subject thread.) ! 420: .Ip M 8 ! 421: Mark the current article as still unread, but not until the newsgroup ! 422: is exited. ! 423: Until then, the current article will be marked as read. ! 424: This is useful for returning to an article in another session, or in another ! 425: newsgroup. ! 426: .Ip /pattern 8 ! 427: Scan forward for article containing ! 428: .I pattern ! 429: in the subject. ! 430: See the section on Regular Expressions. ! 431: Together with the escape substitution facility described later, it becomes ! 432: easy to search for various attributes of the current article, such as ! 433: subject, article ID, author name, etc. ! 434: The previous pattern can be recalled with \*(L"<esc>/\*(R". ! 435: If ! 436: .I pattern ! 437: is omitted, the previous pattern is assumed. ! 438: .Ip /pattern/h 8 ! 439: Scan forward for article containing ! 440: .I pattern ! 441: in the header. ! 442: .Ip /pattern/a 8 ! 443: Scan forward for article containing ! 444: .I pattern ! 445: anywhere in article. ! 446: .Ip /pattern/r 8 ! 447: Scan read articles also. ! 448: .Ip /pattern/c 8 ! 449: Make search case sensitive. ! 450: Ordinarily upper and lower case are considered the same. ! 451: .Ip "/pattern/modifiers:command{:command}" 8 ! 452: Apply the commands listed to articles matching the search command (possibly ! 453: with h, a, or r modifiers). ! 454: Applicable commands include \*(L'm\*(R' (mark as unread), \*(L'M\*(R' ! 455: (delayed mark as unread), \*(L'j\*(R' (mark as read), \*(L"s dest\*(R" ! 456: (save to a destination), \*(L"!command\*(R" (shell escape), \*(L"=\*(R" ! 457: (print the subject) and \*(L"C\*(R" (cancel). ! 458: If the first command is \*(L'm\*(R' or \*(L'M\*(R', modifier r is assumed. ! 459: A K may be included in the modifiers (not the commands) to cause the ! 460: entire command (sans K) to be saved to the local KILL file, where it will ! 461: be applied to every article that shows up in the newsgroup. ! 462: .Sp ! 463: For example, to save all articles in a given newsgroup to the line printer ! 464: and mark them read, use \*(L"/^/\||\|lpr:j\*(R". ! 465: If you say \*(L"/^/K\||\|lpr:j\*(R", this will happen every time you enter the ! 466: newsgroup. ! 467: .Ip ?pattern 8 ! 468: Scan backward for article containing ! 469: .I pattern ! 470: in the subject. ! 471: May be modified as the forward search is: ?pattern?modifiers[:commands]. ! 472: It is likely that you will want an r modifier when scanning backward. ! 473: .Ip k 8 ! 474: Mark as read all articles with the same subject as the current article. ! 475: (Note: there is no single character command to temporarily mark as read (M ! 476: command) articles matching the current subject. ! 477: That can be done with \*(L"/<esc>s/M\*(R", however.) ! 478: .Ip K 8 ! 479: Do the same as the k command, but also add a line to the local KILL file for ! 480: this newsgroup to kill this subject every time the newsgroup is started up. ! 481: For a discussion of KILL files, see the \*(L'^K\*(R' command below. ! 482: See also the K modifier on searches above. ! 483: .Ip ^K 8 ! 484: Edit the local KILL file for this newsgroup. ! 485: Each line of the KILL file should be a command of the form /pattern/j. ! 486: (With the exception that ! 487: .I rn ! 488: will insert a line at the beginning of the form \*(L"THRU <number>\*(R", ! 489: which tells ! 490: .I rn ! 491: the maximum article number that the KILL file has been applied to. You ! 492: may delete the THRU line to force a rescan of current articles.) ! 493: You may also have reason to use the m, h, or a modifiers. ! 494: Be careful with the M modifier in a kill file\*(--there are more efficient ! 495: ways to never read an article. ! 496: You might have reason to use it if a particular series of articles is posted ! 497: to multiple newsgroups. ! 498: In this case, M would force you to view the article in a different newsgroup. ! 499: .Sp ! 500: To see only newgroup articles in the control newsgroup, for instance, you ! 501: might put ! 502: .Sp ! 503: /^/j ! 504: .br ! 505: /newgroup/m ! 506: .Sp ! 507: which kills all subjects not containing \*(L"newgroup\*(R". ! 508: You can add lines automatically via the K command and K search modifiers, ! 509: but editing is the only way to remove lines. ! 510: If either of the environment variables VISUAL or EDITOR is set, the ! 511: specified editor will be invoked; otherwise a default editor (normally vi) ! 512: is invoked on the KILL file. ! 513: .Sp ! 514: The KILL file may also contain switch setting lines beginning with \*(L'&\*(R'. ! 515: Additionally, any line beginning with \*(L'X\*(R' is executed on exit ! 516: from the newsgroup rather than on entrance. ! 517: This can be used to set switches back to a default value. ! 518: .Ip r 8 ! 519: Reply through net mail. ! 520: The environment variables MAILPOSTER and MAILHEADER may be used to modify ! 521: the mailing behavior of ! 522: .I rn ! 523: (see environment section). ! 524: If on a nonexistent article such as the "End of newsgroup" pseudo-article ! 525: (which you can get to with a \*(L'$\*(R' command), invokes the mailer to ! 526: nobody in particular. ! 527: .Ip R 8 ! 528: Reply, including the current article in the header file generated. ! 529: (See \*(L'F\*(R' command below). ! 530: The YOUSAID environment variable controls the format of the attribution line. ! 531: .Ip f 8 ! 532: Submit a followup article. ! 533: If on a nonexistent article such as the "End of newsgroup" pseudo-article ! 534: (which you can get to with a \*(L'$\*(R' command), posts an original ! 535: article (basenote). ! 536: .Ip F 8 ! 537: Submit a followup article, and include the old article, with lines prefixed ! 538: either by \*(L">\*(R" or by the argument to a ! 539: .B \-F ! 540: switch. ! 541: .I Rn ! 542: will attempt to provide an attribution line in front of the quoted article, ! 543: generated from the From: line of the article. ! 544: Unfortunately, the From: line doesn't always contain the right name; you ! 545: should double check it against the signature and change it if necessary, ! 546: or you may have to apologize for quoting the wrong person. ! 547: The environment variables NEWSPOSTER, NEWSHEADER and ATTRIBUTION may be ! 548: used to modify the posting behavior of ! 549: .I rn ! 550: (see environment section). ! 551: .Ip C 8 ! 552: Cancel the current article, but only if you are the contributor or superuser. ! 553: .Ip c 8 ! 554: Catch up in this newsgroup; i.e., mark all articles as read. ! 555: .Ip u 8 ! 556: Unsubscribe to this newsgroup. ! 557: .Ip "s destination" 8 ! 558: Save to a filename or pipe using sh. ! 559: If the first character of the destination is a vertical bar, the rest of ! 560: the command is considered a shell command to which the article is passed ! 561: through standard input. ! 562: The command is subject to filename expansion. ! 563: (See also the environment variable PIPESAVER.) ! 564: If the destination does not begin with a vertical bar, the rest of the ! 565: command is assumed to be a filename of some sort. ! 566: An initial tilde \*(L'~\*(R' will be translated to the name of the home ! 567: directory, and an initial environment variable substitution is also allowed. ! 568: If only a directory name is specified, the environment variable SAVENAME ! 569: is used to generate the actual name. ! 570: If only a filename is specified (i.e. no directory), the environment variable ! 571: SAVEDIR will be used to generate the actual directory. ! 572: If nothing is specified, then obviously both variables will be used. ! 573: Since the current directory for rn while doing a save command is your ! 574: private news directory, saying \*(L"s ./filename\*(R" will force the file ! 575: to your news directory. ! 576: Save commands are also run through % interpretation, so that you can ! 577: say \*(L"s %O/filename\*(R" to save to the directory you were in when you ran ! 578: .IR rn , ! 579: and \*(L"s %t\*(R" to save to a filename consisting of the Internet address ! 580: of the sender. ! 581: .Sp ! 582: After generating the full pathname of the file to save to, ! 583: .I rn ! 584: determines if the file exists already, and if so, appends to it. ! 585: .I Rn ! 586: will attempt to determine if an existing file is a mailbox or a normal file, ! 587: and save the article in the same format. ! 588: If the output file does not yet exist, ! 589: .I rn ! 590: will by default ask you which format you want, or you can make it skip the ! 591: question with either the ! 592: .B \-M ! 593: or ! 594: .B \-N ! 595: switch. ! 596: If the article is to be saved in mailbox format, the command to do so is ! 597: generated from the environment variable MBOXSAVER. ! 598: Otherwise, NORMSAVER is used. ! 599: .Ip "S destination" 8 ! 600: Save to a filename or pipe using a preferred shell, such as csh. ! 601: Which shell is used depends first on what you have the environment variable ! 602: SHELL set to, and in the absence of that, on what your news administrator ! 603: set for the preferred shell when he or she installed ! 604: .IR rn . ! 605: .Ip "| command" 8 ! 606: Shorthand for \*(L"s | command\*(R". ! 607: .Ip "w destination" 8 ! 608: The same as \*(L"s destination\*(R", but saves without the header. ! 609: .Ip "W destination" 8 ! 610: The same as \*(L"S destination\*(R", but saves without the header. ! 611: .Ip & 8 ! 612: Print out the current status of command line switches. ! 613: .Ip "&switch {switch}" 8 ! 614: Set additional command line switches. ! 615: .Ip && 8 ! 616: Print out current macro definitions. ! 617: .Ip "&&keys commands" 8 ! 618: Define an additional macro. ! 619: .Ip !command 8 ! 620: Escape to a subshell. ! 621: One exclamation mark (!) leaves you in your own news directory. ! 622: A double exclamation mark (!!) leaves you in the spool ! 623: directory of the current newsgroup. ! 624: The environment variable SHELL will be used if defined. ! 625: If ! 626: .I command ! 627: is null, an interactive shell is started. ! 628: .Sp ! 629: You can use escape key substitutions described later to get to many ! 630: run-time values. ! 631: The command is also run through % interpretation, in case it is being called ! 632: from a range or search command. ! 633: .Ip = 8 ! 634: List subjects of unread articles. ! 635: .Ip # 8 ! 636: Print last article number. ! 637: .Sh "Pager Level" ! 638: At the pager level (within an article), the prompt looks like this: ! 639: .Sp ! 640: \*(--MORE\*(--(17%) ! 641: .Sp ! 642: and a number of commands may be given: ! 643: .Ip SP 8 ! 644: Display next page. ! 645: .Ip x 8 ! 646: Display next page and decrypt as a rot13 message. ! 647: .Ip d,^D 8 ! 648: Display half a page more. ! 649: .Ip CR 8 ! 650: Display one more line. ! 651: .Ip q 8 ! 652: Go to the end of the current article (don't mark it either read or unread). ! 653: Leaves you at the \*(L"What next?\*(R" prompt. ! 654: .Ip j 8 ! 655: Junk the current article. ! 656: Mark it read and go to the end of the article. ! 657: .Ip ^L 8 ! 658: Refresh the screen. ! 659: .Ip X 8 ! 660: Refresh the screen and decrypt as a rot13 message. ! 661: .Ip b,^B 8 ! 662: Back up one page. ! 663: .Ip gpattern 8 ! 664: Goto (search forward for) ! 665: .I pattern ! 666: within current article. ! 667: Note that there is no space between the command and the pattern. ! 668: If the pattern is found, the page containing the pattern will be displayed. ! 669: Where on the page the line matching the pattern goes depends on the value ! 670: of the ! 671: .B \-g ! 672: switch. ! 673: By default the matched line goes at the top of the screen. ! 674: .Ip G 8 ! 675: Search for g pattern again. ! 676: .Ip ^G 8 ! 677: This is a special version of the \*(L'g\*(R' command that is for skipping ! 678: articles in a digest. ! 679: It is equivalent to setting \*(L"\-g4\*(R" and then executing the command ! 680: \*(L"g^Subject:\*(R". ! 681: .Ip TAB 8 ! 682: This is another special version of the \*(L'g\*(R' command that is for ! 683: skipping inclusions of older articles. ! 684: It is equivalent to setting \*(L"\-g4\*(R" and then executing the command ! 685: \*(L"g^[^c]\*(R", where \fIc\fR is the first character of the last line ! 686: on the screen. ! 687: It searches for the first line that doesn't begin with the same character ! 688: as the last line on the screen. ! 689: .Ip !command 8 ! 690: Escape to a subshell. ! 691: .PP ! 692: The following commands skip the rest of the current article, then behave just ! 693: as if typed to the \*(L"What next?\*(R" prompt at the end of the article. ! 694: See the documentation at the article selection level for these commands. ! 695: .Sp ! 696: # $ & / = ? c C f F k K ^K m M r R ^R u v Y ^ ! 697: .br ! 698: number ! 699: .br ! 700: range{,range} command{:command} ! 701: .Sp ! 702: The following commands also skip to the end of the article, but have the ! 703: additional effect of marking the current article as read: ! 704: .Sp ! 705: n N ^N s S | w W ! 706: .Sp ! 707: .Sh "Miscellaneous facts about commands" ! 708: An \*(L'n\*(R' typed at either the \*(L"Last newsgroup\*(R" prompt or a ! 709: \*(L"Last article\*(R" prompt will cycle back to the top of the newsgroup ! 710: or article list, whereas a \*(L'q\*(R' will quit the level. ! 711: (Note that \*(L'n\*(R' does not mean \*(L"no\*(R", but rather ! 712: \*(L"next\*(R".) ! 713: A space will of course do whatever is shown as the ! 714: default, which will vary depending on whether rn thinks you have more ! 715: articles or newsgroups to read. ! 716: .PP ! 717: The \*(L'b\*(R' (backup page) command may be repeated until the beginning of ! 718: the article is reached. ! 719: If ! 720: .I rn ! 721: is suspended (via a ^Z), then when the job is resumed, a refresh (^L) will ! 722: automatically be done (Berkeley-type systems only). ! 723: If you type a command such as \*(L'!\*(R' or \*(L's\*(R' which takes you ! 724: from the middle of the article to the end, you can always get back into the ! 725: middle by typing \*(L'^L\*(R'. ! 726: .PP ! 727: In multi-character commands such as \*(L'!\*(R', \*(L's\*(R', \*(L'/\*(R', ! 728: etc, you can interpolate various run-time values by typing escape and a ! 729: character. ! 730: To find out what you can interpolate, type escape and \*(L'h\*(R', or check ! 731: out the single character % substitutions for environment variables in the ! 732: Interpretation and Interpolation section, which are the same. ! 733: Additionally, typing a double escape will cause any % substitutions in the ! 734: string already typed in to be expanded. ! 735: .Sh "Options" ! 736: .I Rn ! 737: has a nice set of options to allow you to tailor the interaction ! 738: to your liking. ! 739: (You might like to know that the author swears by \*(L"\-e \-m \-S \-/\*(R".) ! 740: These options may be set on the command line, via the RNINIT ! 741: environment variable, via a file pointed to by the RNINIT variable, or ! 742: from within rn via the & command. ! 743: Options may generally be unset by saying \*(L"+switch\*(R". ! 744: Options include: ! 745: .TP 5 ! 746: .B \-c ! 747: checks for news without reading news. ! 748: If a list of newsgroups is given on the command line, only those newsgroups ! 749: will be checked; otherwise all subscribed-to newsgroups are checked. ! 750: Whenever the ! 751: .B \-c ! 752: switch is specified, a non-zero exit status from ! 753: .I rn ! 754: means that there is unread news in one of the checked newsgroups. ! 755: The ! 756: .B \-c ! 757: switch does not disable the printing of newsgroups with unread news; ! 758: this is controlled by the ! 759: .B \-s ! 760: switch. ! 761: (The ! 762: .B \-c ! 763: switch is not meaningful when given via the & command.) ! 764: .TP 5 ! 765: .B \-C<number> ! 766: tells ! 767: .I rn ! 768: how often to checkpoint the ! 769: .IR .newsrc , ! 770: in articles read. ! 771: Actually, this number says when to start thinking about doing a checkpoint ! 772: if the situation is right. ! 773: If a reasonable checkpointing situation doesn't arise within 10 more ! 774: articles, the ! 775: .I .newsrc ! 776: is checkpointed willy-nilly. ! 777: .TP 5 ! 778: .B \-d<directory name> ! 779: sets the default save directory to something other than ~/News. ! 780: The directory name will be globbed (via csh) if necessary (and if possible). ! 781: Articles saved by ! 782: .I rn ! 783: may be placed in the save directory or in a subdirectory thereof depending ! 784: on the command that you give and the state of the environment variables ! 785: SAVEDIR and SAVENAME. ! 786: Any KILL files (see the K command in the Article Selection section) ! 787: also reside in this directory and its subdirectories, by default. ! 788: In addition, shell escapes leave you in this directory. ! 789: .TP 5 ! 790: .B \-D<flags> ! 791: enables debugging output. ! 792: See common.h for flag values. ! 793: Warning: normally ! 794: .I rn ! 795: attempts to restore your ! 796: .I .newsrc ! 797: when an unexpected signal or internal error occurs. ! 798: This is disabled when any debugging flags are set. ! 799: .TP 5 ! 800: .B \-e ! 801: causes each page within an article to be started at the top of the screen, ! 802: not just the first page. ! 803: (It is similar to the ! 804: .B \-c ! 805: switch of ! 806: .IR more (1).) ! 807: You never have to read scrolling text with this switch. ! 808: This is helpful especially at certain baud rates because you can start reading ! 809: the top of the next page without waiting for the whole page to be printed. ! 810: It works nicely in conjuction with the ! 811: .B \-m ! 812: switch, especially if you use half-intensity for your highlight mode. ! 813: See also the ! 814: .B \-L ! 815: switch. ! 816: .TP 5 ! 817: .B \-E<name>=<val> ! 818: sets the environment variable <name> to the value specified. ! 819: Within ! 820: .IR rn , ! 821: \*(L"&\-ESAVENAME=%t\*(R" is similar to \*(L"setenv SAVENAME '%t'\*(R" in ! 822: .IR csh , ! 823: or \*(L"SAVENAME='%t'; export SAVENAME\*(R" in ! 824: .IR sh . ! 825: Any environment variables set with ! 826: .B \-E ! 827: will be inherited by subprocesses of ! 828: .IR rn . ! 829: .TP 5 ! 830: .B \-F<string> ! 831: sets the prefix string for the \*(L'F\*(R' followup command to use in ! 832: prefixing each line of the quoted article. ! 833: For example, \*(L"\-F<tab>\*(R" inserts a tab on the front of each line ! 834: (which will cause long lines to wrap around, unfortunately), ! 835: \*(L"\-F>>>>\*(R" inserts \*(L">>>>\*(R" on every line, and ! 836: \*(L"\-F\*(R" by itself causes nothing to be inserted, in case you want to ! 837: reformat the text, for instance. ! 838: The initial default prefix is \*(L">\*(R". ! 839: .TP 5 ! 840: .B \-g<line> ! 841: tells ! 842: .I rn ! 843: which line of the screen you want searched-for strings to show up on when ! 844: you search with the \*(L'g\*(R' command within an article. ! 845: The lines are numbered starting with 1. ! 846: The initial default is \*(L"\-g1\*(R", meaning the first line of the screen. ! 847: Setting the line to less than 1 or more than the number of lines on the screen ! 848: will set it to the last line of the screen. ! 849: .TP 5 ! 850: .B \-h<string> ! 851: hides (disables the printing of) all header lines beginning with ! 852: .I string. ! 853: For instance, \-hexp will disable the printing of the \*(L"Expires:\*(R" line. ! 854: Case is insignificant. ! 855: If <string> is null, all header lines except Subject are hidden, and you ! 856: may then use ! 857: .B +h ! 858: to select those lines you want to see. ! 859: You may wish to use the baud-rate switch modifier below to hide more lines ! 860: at lower baud rates. ! 861: .TP 5 ! 862: .B \-H<string> ! 863: works just like ! 864: .B \-h ! 865: except that instead of setting the hiding flag for a header line, it sets ! 866: the magic flag for that header line. ! 867: Certain header lines have magic behavior that can be controlled this way. ! 868: At present, the following actions are caused by the flag for the particular ! 869: line: ! 870: the Newsgroups line will only print when there are multiple newsgroups, ! 871: the Subject line will be underlined, and the Expires line will always be ! 872: suppressed if there is nothing on it. ! 873: In fact, all of these actions are the default, and you must use ! 874: .B +H ! 875: to undo them. ! 876: .TP 5 ! 877: .B \-i=<number> ! 878: specifies how long (in lines) to consider the initial page of an ! 879: article\*(--normally this is determined automatically depending on baud rate. ! 880: (Note that an entire article header will always be printed regardless of the ! 881: specified initial page length. ! 882: If you are working at low baud rate and wish to reduce the size of the ! 883: headers, you may hide certain header lines with the ! 884: .B \(bsh ! 885: switch.) ! 886: .TP 5 ! 887: .B \-l ! 888: disables the clearing of the screen at the beginning of each ! 889: article, in case you have a bizarre terminal. ! 890: .TP 5 ! 891: .B \-L ! 892: tells ! 893: .I rn ! 894: to leave information on the screen as long as possible by not blanking ! 895: the screen between pages, and by using clear to end-of-line. ! 896: (The ! 897: .IR more (1) ! 898: program does this.) ! 899: This feature works only if you have the requisite termcap ! 900: capabilities. ! 901: The switch has no effect unless the ! 902: .B \-e ! 903: switch is set. ! 904: .TP 5 ! 905: .B \-m=<mode> ! 906: enables the marking of the last line of the previous page ! 907: printed, to help the user see where to continue reading. ! 908: This is most helpful when less than a full page is going to be displayed. ! 909: It may also be used in conjunction with the ! 910: .B \-e ! 911: switch, in which case the page is erased, and the first line (which is ! 912: the last line of the previous page) is highlighted. ! 913: If ! 914: .B \-m=s ! 915: is specified, the standout mode will be used, but if ! 916: .B \-m=u ! 917: is specified, underlining will be used. ! 918: If neither ! 919: .B =s ! 920: or ! 921: .B =u ! 922: is specified, standout is the default. ! 923: Use ! 924: .B +m ! 925: to disable highlighting. ! 926: .TP 5 ! 927: .B \-M ! 928: forces mailbox format in creating new save files. ! 929: Ordinarily you are asked which format you want. ! 930: .TP 5 ! 931: .B \-N ! 932: forces normal (non-mailbox) format in creating new save files. ! 933: Ordinarily you are asked which format you want. ! 934: .TP 5 ! 935: .B \-r ! 936: causes ! 937: .I rn ! 938: to restart in the last newsgroup read during a previous session with ! 939: .I rn. ! 940: It is equivalent to starting up normally and then getting to the newsgroup ! 941: with a g command. ! 942: .TP 5 ! 943: .B \-s ! 944: with no argument suppresses the initial listing of newsgroups with unread ! 945: news, whether ! 946: .B \-c ! 947: is specified or not. ! 948: Thus ! 949: .B \-c ! 950: and ! 951: .B \-s ! 952: can be used together to test \*(L"silently\*(R" the status of news from ! 953: within your ! 954: .I .login ! 955: file. ! 956: If ! 957: .B \-s ! 958: is followed by a number, the initial listing is suppressed after that many ! 959: lines have been listed. ! 960: Presuming that you have your ! 961: .I .newsrc ! 962: sorted into order of interest, ! 963: .B \-s5 ! 964: will tell you the 5 most interesting newsgroups that have unread news. ! 965: This is also a nice feature to use in your ! 966: .I .login ! 967: file, since it not only tells you whether there is unread news, but also how ! 968: important the unread news is, without having to wade through the entire ! 969: list of unread newsgroups. ! 970: If no ! 971: .B \-s ! 972: switch is given ! 973: .B \-s5 ! 974: is assumed, so just putting \*(L"rn \-c\*(R" ! 975: into your ! 976: \&.login file is fine. ! 977: .TP 5 ! 978: .B \-S<number> ! 979: causes ! 980: .I rn ! 981: to enter subject search mode (^N) automatically whenever a newsgroup is ! 982: started up with <number> unread articles or more. ! 983: Additionally, it causes any \*(L'n\*(R' typed while in subject search mode ! 984: to be interpreted as \*(L'^N\*(R' instead. ! 985: (To get back out of subject search mode, the best command is probably ! 986: \&\*(L'^\*(R'.) ! 987: If <number> is omitted, 3 is assumed. ! 988: .TP 5 ! 989: .B \-t ! 990: puts ! 991: .I rn ! 992: into terse mode. ! 993: This is more cryptic but useful for low baud rates. ! 994: (Note that your system administrator may have compiled ! 995: .I rn ! 996: with either verbose or terse messages only to save memory.) ! 997: You may wish to use the baud-rate switch modifier below to enable terse mode ! 998: only at lower baud rates. ! 999: .TP 5 ! 1000: .B \-T ! 1001: allows you to type ahead of rn. ! 1002: Ordinarily rn will eat typeahead to prevent your autorepeating space bar from ! 1003: doing a very frustrating thing when you accidentally hold it down. ! 1004: If you don't have a repeating space bar, or you are working at low baud ! 1005: rate, you can set this switch to prevent this behavior. ! 1006: You may wish to use the baud-rate switch modifier below to disable typeahead ! 1007: only at lower baud rates. ! 1008: .TP 5 ! 1009: .B \-v ! 1010: sets verification mode for commands. ! 1011: When set, the command being executed is displayed to give some feedback that ! 1012: the key has actually been typed. ! 1013: Useful when the system is heavily loaded and you give a command that takes ! 1014: a while to start up. ! 1015: .TP 5 ! 1016: .B \-/ ! 1017: sets SAVEDIR to \*(L"%p/%c\*(R" and SAVENAME to \*(L"%a\*(R", which means ! 1018: that by default articles are saved in a subdirectory of your private news ! 1019: directory corresponding to the name of the the current newsgroup, with the ! 1020: filename being the article number. ! 1021: .B +/ ! 1022: sets SAVEDIR to \*(L"%p\*(R" and SAVENAME to \*(L"%^C\*(R", which by ! 1023: default saves articles directly to your private news directory, with the ! 1024: filename being the name of the current newsgroup, first letter capitalized. ! 1025: (Either ! 1026: .B +/ ! 1027: or ! 1028: .B \-/ ! 1029: may be default on your system, depending on the feelings of your news ! 1030: administrator when he, she or it installed ! 1031: .IR rn .) ! 1032: You may, of course, explicitly set SAVEDIR and SAVENAME to other values\*(--see ! 1033: discussion in the environment section. ! 1034: .PP ! 1035: Any switch may be selectively applied according to the current baud-rate. ! 1036: Simply prefix the switch with +speed to apply the switch at that speed or ! 1037: greater, and \%\-speed to apply the switch at that speed or less. ! 1038: Examples: \%\-1200\-hposted suppresses the Posted line at 1200 baud or less; ! 1039: \%+9600\-m enables marking at 9600 baud or more. ! 1040: You can apply the modifier recursively to itself also: \%+300\-1200\-t sets ! 1041: terse mode from 300 to 1200 baud. ! 1042: .PP ! 1043: Similarly, switches may be selected based on terminal type: ! 1044: .Sp ! 1045: \-=vt100+T set +T on vt100 ! 1046: .br ! 1047: \-=tvi920\-ETERM=mytvi get a special termcap entry ! 1048: .br ! 1049: \-=tvi920\-ERNMACRO=%./.rnmac.tvi ! 1050: .br ! 1051: set up special keymappings ! 1052: .br ! 1053: +=paper\-v set verify mode if not hardcopy ! 1054: .PP ! 1055: Some switch arguments, such as environment variable values, may require ! 1056: spaces in them. ! 1057: Such spaces should be quoted via ", ', or \e in the conventional fashion, ! 1058: even when passed via RNINIT or the & command. ! 1059: .Sh "Regular Expressions" ! 1060: The patterns used in article searching are regular expressions such as ! 1061: those used by ! 1062: .IR ed (1). ! 1063: In addition, \ew matches an alphanumeric character and \eW a nonalphanumeric. ! 1064: Word boundaries may be matched by \eb, and non-boundaries by \eB. ! 1065: The bracketing construct \e(\ ...\ \e) may also be used, and \edigit matches ! 1066: the digit'th substring, where digit can range from 1 to 9. ! 1067: \e0 matches whatever the last bracket match matched. ! 1068: Up to 10 alternatives may given in a pattern, separated by \e|, with the ! 1069: caveat that \e(\ ...\ \e|\ ...\ \e) is illegal. ! 1070: .Sh "Interpretation and Interpolation" ! 1071: Many of the strings that ! 1072: .I rn ! 1073: handles are subject to interpretations of several types. ! 1074: Under filename expansion, an initial \*(L"~/\*(R" is translated to the name ! 1075: of your home directory, and \*(L"~name\*(R" is translated to the login ! 1076: directory for the user specified. ! 1077: Filename expansion will also expand an initial environment variable, and ! 1078: also does the backslash, uparrow and percent expansion mentioned below. ! 1079: .PP ! 1080: All interpreted strings go through backslash, uparrow and percent ! 1081: interpretation. ! 1082: The backslash escapes are the normal ones (such as \en, \et, \ennn, etc.). ! 1083: The uparrow escapes indicate control codes in the normal fashion. ! 1084: Backslashes or uparrows to be passed through should be escaped with backslash. ! 1085: The special percent escapes are similar to printf percent escapes. ! 1086: These cause the substitution of various run-time values into the string. ! 1087: The following are currently recognized: ! 1088: .Ip %a 8 ! 1089: Current article number. ! 1090: .Ip %A 8 ! 1091: Full name of current article (%P/%c/%a). ! 1092: (On a Eunice system with the LINKART option, %P/%c/%a returns the name of ! 1093: the article in the current newsgroup, while %A returns the real name of ! 1094: the article, which may be different if the current article was posted to ! 1095: multiple newsgroups.) ! 1096: .Ip %b 8 ! 1097: Destination of last save command, often a mailbox. ! 1098: .Ip %B 8 ! 1099: The byte offset to the beginning of the part of the article to be saved, ! 1100: set by the save command. ! 1101: The \*(L's\*(R' and \*(L'S\*(R' commands set it to 0, and the \*(L'w\*(R' ! 1102: and \*(L'W\*(R' commands set it to the byte offset of the body of the article. ! 1103: .Ip %c 8 ! 1104: Current newsgroup, directory form. ! 1105: .Ip %C 8 ! 1106: Current newsgroup, dot form. ! 1107: .Ip %d 8 ! 1108: Full name of newsgroup directory (%P/%c). ! 1109: .Ip %D 8 ! 1110: \*(L"Distribution:\*(R" line from the current article. ! 1111: .Ip %f 8 ! 1112: \*(L"From:\*(R" line from the current article, or the \*(L"Reply-To:\*(R" ! 1113: line if there is one. ! 1114: This differs from %t in that comments (such as the full name) are not ! 1115: stripped out with %f. ! 1116: .Ip %F 8 ! 1117: \*(L"Newsgroups:\*(R" line for a new article, constructed from ! 1118: \*(L"Newsgroups:\*(R" and \*(L"Followup-To:\*(R" lines of current article. ! 1119: .Ip %h 8 ! 1120: Name of the header file to pass to the mail or news poster, ! 1121: containing all the information that the poster program needs in the ! 1122: form of a message header. ! 1123: It may also contain a copy of the current article. ! 1124: The format of the header file is controlled by the MAILHEADER and NEWSHEADER ! 1125: environment variables. ! 1126: .Ip %H 8 ! 1127: Host name (your machine's name). ! 1128: .Ip %i 8 ! 1129: \*(L"Message-I.D.:\*(R" line from the current article, with <> guaranteed. ! 1130: .Ip %I 8 ! 1131: The reference indication mark (see the ! 1132: .B \-F ! 1133: switch.) ! 1134: .Ip %l 8 ! 1135: The news administrator's login name, if any. ! 1136: .Ip %L 8 ! 1137: Login name (yours). ! 1138: .Ip %m 8 ! 1139: The current mode of rn, for use in conditional macros. ! 1140: .Sp ! 1141: .nf ! 1142: i Initializing. ! 1143: n Newsgroup selection level. ! 1144: a Article selection level (What next?). ! 1145: p Pager level (MORE prompt). ! 1146: A Add this newsgroup? ! 1147: C Catchup confirmation. ! 1148: D Delete bogus newsgroups? ! 1149: M Use mailbox format? ! 1150: R Resubscribe to this newsgroup? ! 1151: .fi ! 1152: .Sp ! 1153: Note that yes/no questions are all upper-case modes. ! 1154: If, for example, you wanted to disallow defaults on all yes/no questions, ! 1155: you could define the following macro: ! 1156: .Sp ! 1157: .nf ! 1158: \e040 %(%m=[A-Z]?h: ) ! 1159: .fi ! 1160: .Ip %M 8 ! 1161: The number of articles marked to return via the \*(L'M\*(R' command. ! 1162: If the same article is Marked multiple times, \*(L"%M\*(R" counts it ! 1163: multiple times in the current implementation. ! 1164: .Ip %n 8 ! 1165: \*(L"Newsgroups:\*(R" line from the current article. ! 1166: .Ip %N 8 ! 1167: Full name (yours). ! 1168: .Ip %o 8 ! 1169: Organization (yours). ! 1170: .Ip %O 8 ! 1171: Original working directory (where you ran rn from). ! 1172: .Ip %p 8 ! 1173: Your private news directory, normally ~/News. ! 1174: .Ip %P 8 ! 1175: Public news spool directory, normally /usr/spool/news. ! 1176: .Ip %r 8 ! 1177: Last reference on references line of current article (parent article id). ! 1178: .Ip %R 8 ! 1179: References list for a new article, constructed from the references and article ! 1180: ID of the current article. ! 1181: .Ip %s 8 ! 1182: Subject, with all Re's and (nf)'s stripped off. ! 1183: .Ip %S 8 ! 1184: Subject, with one \*(L"Re:\*(R" stripped off. ! 1185: .Ip %t 8 ! 1186: \*(L"To:\*(R" line derived from the \*(L"From:\*(R" and \*(L"Reply-To:\*(R" ! 1187: lines of the current article. ! 1188: This always returns an Internet format address. ! 1189: .Ip %T 8 ! 1190: \*(L"To:\*(R" line derived from the \*(L"Path:\*(R" line of the ! 1191: current article to produce a uucp path. ! 1192: .Ip %u 8 ! 1193: The number of unread articles in the current newsgroup. ! 1194: .Ip %U 8 ! 1195: The number of unread articles in the current newsgroup, not counting the ! 1196: current article. ! 1197: .Ip %x 8 ! 1198: The news library directory. ! 1199: .Ip %X 8 ! 1200: The rn library directory. ! 1201: .Ip %z 8 ! 1202: The length of the current article in bytes. ! 1203: .Ip %~ 8 ! 1204: Your home directory. ! 1205: .Ip %. 8 ! 1206: The directory containing your dot files, which is your home directory unless ! 1207: the environment variable DOTDIR is defined when rn is invoked. ! 1208: .Ip %$ 8 ! 1209: Current process number. ! 1210: .Ip %/ 8 ! 1211: Last search string. ! 1212: .Ip %% 8 ! 1213: A percent sign. ! 1214: .Ip "%{name} or %{name\-default}" 8 ! 1215: The environment variable \*(L"name\*(R". ! 1216: .Ip %[name] 8 ! 1217: The value of header line \*(L"Name:\*(R" from the current article. ! 1218: The \*(L"Name:\ \*(R" is not included. ! 1219: For example \*(L"%D\*(R" and \*(L"%[distribution]\*(R" are equivalent. ! 1220: The name must be spelled out in full. ! 1221: .Ip %`command` 8 ! 1222: Inserts the output of the command, with any embedded newlines translated ! 1223: to space. ! 1224: .Ip %""prompt"" 8 ! 1225: Prints prompt on the terminal, then inputs one string, and inserts it. ! 1226: .Ip "%(test_text=pattern?then_text:else_text)" 8 ! 1227: If ! 1228: .I test_text ! 1229: matches ! 1230: .IR pattern , ! 1231: has the value ! 1232: .IR then_text , ! 1233: otherwise ! 1234: .IR else_text . ! 1235: The \*(L":else_text\*(R" is optional, and if absent, interpolates the null string. ! 1236: The = may be replaced with != to negate the test. ! 1237: To quote any of the metacharacters ! 1238: (\*(L'=\*(R', \*(L'?\*(R', \*(L':\*(R', or \*(L')\*(R'), ! 1239: precede with a backslash. ! 1240: .Ip %digit 8 ! 1241: The digits 1 through 9 interpolate the string matched by the nth bracket ! 1242: in the last pattern match that had brackets. ! 1243: If the last pattern had alternatives, you may not know the number of the ! 1244: bracket you want\*(--%0 will give you the last bracket matched. ! 1245: .PP ! 1246: Modifiers: to capitalize the first letter, insert \*(L'^\*(R': ! 1247: \*(L"%^C\*(R" produces something like \*(L"Net.jokes\*(R". ! 1248: Inserting \*(L'_\*(R' causes the first letter following the last ! 1249: \&\*(L'/\*(R' to be capitalized: \*(L"%_c\*(R" produces \*(L"net/Jokes\*(R". ! 1250: .SH ENVIRONMENT ! 1251: The following environment variables are paid attention to by ! 1252: .IR rn . ! 1253: In general the default values assumed for these variables by ! 1254: .I rn ! 1255: are reasonable, so if you are using ! 1256: .I rn ! 1257: for the first time, you can safely ignore this section. ! 1258: Note that the defaults below may not correspond precisely to the defaults ! 1259: on your system. ! 1260: To find the actual defaults you would need to look in config.h and common.h ! 1261: in the rn source directory, and the file INIT in the rn library. ! 1262: .PP ! 1263: Those variables marked (%) are subject to % interpolation, and those marked ! 1264: (~) are subject to both % interpolation and ~ interpretation. ! 1265: .Ip "ATTRIBUTION (%)" 8 ! 1266: Gives the format of the attribution line in front of the quoted article ! 1267: included by an F command. ! 1268: .Sp ! 1269: Default: In article %i %f writes: ! 1270: .Ip "CANCEL (~)" 8 ! 1271: The shell command used to cancel an article. ! 1272: .Sp ! 1273: Default: inews \-h < %h ! 1274: .Ip "CANCELHEADER (%)" 8 13v ! 1275: The format of the file to pass to the CANCEL command in order to cancel ! 1276: an article. ! 1277: .Sp ! 1278: Default: ! 1279: .br ! 1280: Newsgroups: %n ! 1281: .br ! 1282: Subject: cmsg cancel %i ! 1283: .br ! 1284: References: %R ! 1285: .br ! 1286: Reply-To: %L@%H.UUCP (%N) ! 1287: .br ! 1288: Distribution: %D ! 1289: .br ! 1290: Organization: %o ! 1291: .sp 1 ! 1292: %i cancelled from rn. ! 1293: .Ip DOTDIR 8 ! 1294: Where to find your dot files, if they aren't in your home directory. ! 1295: Can be interpolated using \*(L"%.\*(R". ! 1296: .Sp ! 1297: Default: $HOME ! 1298: .Ip "EDITOR (~)" 8 ! 1299: The name of your editor, if VISUAL is undefined. ! 1300: .Sp ! 1301: Default: whatever your news administrator compiled in, usually vi. ! 1302: .Ip "FIRSTLINE (%)" 8 ! 1303: Controls the format of the line displayed at the top of an article. ! 1304: Warning: this may go away. ! 1305: .Sp ! 1306: Default: Article %a %(%U%M!=^00$?(%U more%(%M!=^0$? + %M Marked to return)\e) )in %C:, more or less. ! 1307: .Ip HIDELINE 8 ! 1308: If defined, contains a regular expression which matches article lines to ! 1309: be hidden, in order, for instance, to suppress quoted material. ! 1310: A recommended string for this purpose is \*(L"^>...\*(R", which \fIdoesn't\fR ! 1311: hide lines with only \*(L'>\*(R', to give some indication that quoted ! 1312: material is being skipped. ! 1313: If you want to hide more than one pattern, you can use \*(L"\||\|\*(R" to ! 1314: separate the alternatives. ! 1315: You can view the hidden lines by restarting the article with the \*(L'v\*(R' ! 1316: command. ! 1317: .Sp ! 1318: There is some overhead involved in matching each line of the article against ! 1319: a regular expression. ! 1320: You might wish to use a baud-rate modifier to enable this feature only at ! 1321: low baud rates. ! 1322: .Sp ! 1323: Default: undefined ! 1324: .Ip HOME 8 ! 1325: Your home directory. ! 1326: Affects ~ interpretation, and the location of your ! 1327: dot files if DOTDIR is not defined. ! 1328: .Sp ! 1329: Default: $LOGDIR ! 1330: .Ip "KILLGLOBAL (~)" 8 ! 1331: Where to find the KILL file to apply to every newsgroup. ! 1332: See the \*(L'^K\*(R' command at the newsgroup selection level. ! 1333: .Sp ! 1334: Default: %p/KILL ! 1335: .Ip "KILLLOCAL (~)" 8 ! 1336: Where to find the KILL file for the current newsgroup. ! 1337: See the commands \*(L'K\*(R' and \*(L'^K\*(R' at the article selection level, ! 1338: and the search modifier \*(L'K\*(R'. ! 1339: .Sp ! 1340: Default: %p/%c/KILL ! 1341: .Ip LOGDIR 8 ! 1342: Your home directory if HOME is undefined. ! 1343: Affects ~ interpretation, and the location of your ! 1344: dot files if DOTDIR is not defined. ! 1345: .Sp ! 1346: Default: none. ! 1347: .Sp ! 1348: Explanation: you must have either $HOME or $LOGDIR. ! 1349: .Ip LOGNAME 8 ! 1350: Your login name, if USER is undefined. ! 1351: May be interpolated using \*(L"%L\*(R". ! 1352: .Sp ! 1353: Default: value of getlogin(). ! 1354: .Ip "MAILCALL (~)" 8 ! 1355: What to say when there is new mail. ! 1356: .Sp ! 1357: Default: (Mail) ! 1358: .Ip "MAILFILE (~)" 8 ! 1359: Where to check for mail. ! 1360: .Sp ! 1361: Default: /usr/spool/mail/%L ! 1362: .Ip "MAILHEADER (%)" 8 ! 1363: The format of the header file for replies. ! 1364: See also MAILPOSTER. ! 1365: .Sp ! 1366: Default: ! 1367: .Sp ! 1368: To: %T ! 1369: .br ! 1370: Subject: %(%i=^$?:Re: %S ! 1371: .br ! 1372: Newsgroups: %n ! 1373: .br ! 1374: In-Reply-To: %i) ! 1375: .br ! 1376: %(%[references]!=^$?References\\: %[references] ! 1377: .br ! 1378: )Organization: %o ! 1379: .br ! 1380: Cc: ! 1381: .br ! 1382: Bcc: \en\en ! 1383: .Ip "MAILPOSTER (~)" 8 ! 1384: The shell command to be used by the reply commands (r and R) ! 1385: in order to allow you to enter and deliver the response. ! 1386: .I Rn ! 1387: will not itself call upon an editor for replies\*(--this ! 1388: is a function of the program called by ! 1389: .IR rn . ! 1390: See also MAILHEADER. ! 1391: .Sp ! 1392: Default: Rnmail \-h %h ! 1393: .Ip "MBOXSAVER (~)" 8 ! 1394: The shell command to save an article in mailbox format. ! 1395: .Sp ! 1396: Default: %X/mbox.saver %A %P %c %a %B %C "%b" \e ! 1397: .br ! 1398: "From: %T %`date`" ! 1399: .Sp ! 1400: Explanation: the first seven arguments are the same as for NORMSAVER. ! 1401: The eighth argument to the shell script is the new From: line ! 1402: for the article, including the posting date, ! 1403: derived either directly from the Posted: line, or not-so-directly from ! 1404: the Date: line. ! 1405: Header munging at its finest. ! 1406: .Ip NAME 8 ! 1407: Your full name. ! 1408: May be interpolated using \*(L"%N\*(R". ! 1409: .Sp ! 1410: Default: name from /etc/passwd, or ~/.fullname. ! 1411: .Ip "NEWSHEADER (%)" 8 16v ! 1412: The format of the header file for followups. ! 1413: See also NEWSPOSTER. ! 1414: .Sp ! 1415: Default: ! 1416: .Sp ! 1417: Newsgroups: %(%F=^$?%C:%F) ! 1418: .br ! 1419: Subject: %(%S=^$?%"\n\nSubject: ":Re: %S) ! 1420: .br ! 1421: Summary: ! 1422: .br ! 1423: Expires: ! 1424: .br ! 1425: %(%R=^$?:References: %R ! 1426: .br ! 1427: )Sender: ! 1428: .br ! 1429: Reply-To: %L@%H.UUCP (%N) ! 1430: .br ! 1431: Followup-To: ! 1432: .br ! 1433: Distribution: %(%i=^$?%"\nDistribution: ":%D) ! 1434: .br ! 1435: Organization: %o ! 1436: .br ! 1437: Keywords: \en\en ! 1438: .Ip "NEWSPOSTER (~)" 8 ! 1439: The shell command to be used by the followup commands (f and F) ! 1440: in order to allow you to enter and post a followup news article. ! 1441: .I Rn ! 1442: will not itself call upon an editor for followups\*(--this ! 1443: is a function of the program called by ! 1444: .IR rn . ! 1445: See also NEWSHEADER. ! 1446: .Sp ! 1447: Default: Pnews \-h %h ! 1448: .Ip "NORMSAVER (~)" 8 ! 1449: The shell command to save an article in the normal (non-mailbox) format. ! 1450: .Sp ! 1451: Default: %X/norm.saver %A %P %c %a %B %C "%b" ! 1452: .Ip ORGANIZATION 8 ! 1453: Either the name of your organization, or the name of a file containing the ! 1454: name of your organization. ! 1455: May be interpolated using \*(L"%o\*(R". ! 1456: .Sp ! 1457: Default: whatever your news administrator compiled in. ! 1458: .Ip PAGESTOP 8 ! 1459: If defined, contains a regular expression which matches article lines to ! 1460: be treated as form-feeds. ! 1461: There are at least two things you might want to do with this. ! 1462: To cause page breaks between articles in a digest, you might define it ! 1463: as \*(L"^--------\*(R". ! 1464: To force a page break before a signature, you could define it ! 1465: as \*(L"^-- $\*(R". ! 1466: (Then, when you see \*(L"--\*(R" at the bottom of the page, you can skip ! 1467: the signature if you so desire by typing \*(L'n\*(R' instead of space.) ! 1468: To do both, you could use \*(L"^--\*(R". ! 1469: If you want to break on more than one pattern, you can use \*(L"\||\|\*(R" to ! 1470: separate the alternatives. ! 1471: .Sp ! 1472: There is some overhead involved in matching each line of the article against ! 1473: a regular expression. ! 1474: You might wish to use a baud-rate modifier to enable this feature only at ! 1475: low baud rates. ! 1476: .Sp ! 1477: Default: undefined ! 1478: .Ip "PIPESAVER (%)" 8 ! 1479: The shell command to execute in order to accomplish a save to a pipe ! 1480: (\*(L"s\ |\ command\*(R" or \*(L"w\ |\ command\*(R"). ! 1481: The command typed by the user is substituted in as %b. ! 1482: .Sp ! 1483: Default: %(%B=^0$?<%A:tail +%Bc %A |) %b ! 1484: .Sp ! 1485: Explanation: if %B is 0, the command is \*(L"<%A %b\*(R", otherwise ! 1486: the command is \*(L"tail +%Bc %A | %b\*(R". ! 1487: .Ip RNINIT 8 ! 1488: Default values for switches may be passed to ! 1489: .I rn ! 1490: by placing them in RNINIT. ! 1491: Any switch that is set in RNINIT may be overruled ! 1492: on the command line, or via the \*(L'&\*(R' command from within ! 1493: .IR rn . ! 1494: Binary-valued switches that are set with \*(L"\-switch\*(R" may be unset ! 1495: using \*(L"+switch\*(R". ! 1496: .Sp ! 1497: If RNINIT begins with a \*(L'/\*(R' it is assumed to be the name of a file ! 1498: containing switches. ! 1499: If you want to set many environment variables but don't want to keep ! 1500: them all in your environment, or if the use of any of these variables ! 1501: conflicts with other programs, you can use this feature along with the ! 1502: .B \-E ! 1503: switch to set the environment variables upon startup. ! 1504: .Sp ! 1505: Default: \*(L" \*(R". ! 1506: .Ip "RNMACRO (~)" 8 ! 1507: The name of the file containing macros and key mappings. ! 1508: See the MACROS section. ! 1509: .Sp ! 1510: Default: %./.rnmac ! 1511: .Ip "SAVEDIR (~)" 8 ! 1512: The name of the directory to save to, if the save command does not specify ! 1513: a directory name. ! 1514: .Sp ! 1515: Default: ! 1516: .br ! 1517: If ! 1518: .B \-/ ! 1519: is set: %p/%c ! 1520: .br ! 1521: If ! 1522: .B +/ ! 1523: is set: %p ! 1524: .Ip "SAVENAME (%)" 8 ! 1525: The name of the file to save to, if the save command contains only a ! 1526: directory name. ! 1527: .Sp ! 1528: Default: ! 1529: .br ! 1530: If ! 1531: .B \-/ ! 1532: is set: %a ! 1533: .br ! 1534: If ! 1535: .B +/ ! 1536: is set: %^C ! 1537: .Ip SHELL 8 ! 1538: The name of your preferred shell. ! 1539: It will be used by the \*(L'!\*(R', \*(L'S\*(R' and \*(L'W\*(R' commands. ! 1540: .Sp ! 1541: Default: whatever your news administrator compiled in. ! 1542: .Ip "SUBJLINE (%)" 8 ! 1543: Controls the format of the lines displayed by the \*(L'=\*(R' command at ! 1544: the article selection level. ! 1545: .Sp ! 1546: Default: %s ! 1547: .Ip TERM 8 ! 1548: Determines which termcap entry to use, unless TERMCAP contains the entry. ! 1549: .Ip TERMCAP 8 ! 1550: Holds either the name of your termcap file, or a termcap entry. ! 1551: .Sp ! 1552: Default: /etc/termcap, normally. ! 1553: .Ip USER 8 ! 1554: Your login name. ! 1555: May be interpolated using \*(L"%L\*(R". ! 1556: .Sp ! 1557: Default: $LOGNAME ! 1558: .Ip "VISUAL (~)" 8 ! 1559: The name of your editor. ! 1560: .Sp ! 1561: Default: $EDITOR ! 1562: .Ip "YOUSAID (%)" 8 ! 1563: Gives the format of the attribution line in front of the quoted article ! 1564: included by an R command. ! 1565: .Sp ! 1566: Default: In article %i you write: ! 1567: .SH MACROS ! 1568: When ! 1569: .I rn ! 1570: starts up, it looks for a file containing macro definitions (see environment ! 1571: variable RNMACRO). ! 1572: Any sequence of commands may be bound to any sequence of keys, so you ! 1573: could remap your entire keyboard if you desire. ! 1574: Blank lines or lines beginning with # in the macro file are considered ! 1575: comments; otherwise ! 1576: .I rn ! 1577: looks for two fields separated by white space. ! 1578: The first field gives the sequence of keystrokes that trigger the macro, ! 1579: and the second field gives the sequence of commands to execute. ! 1580: Both fields are subject to % interpolation, which will also translate ! 1581: backslash and uparrow sequences. ! 1582: (The keystroke field is interpreted at startup time, but the command field ! 1583: is interpreted at macro execution time so that you may refer to % values ! 1584: in a macro.) ! 1585: For example, if you want to reverse the roles of carriage return and ! 1586: space in rn ! 1587: .Sp ! 1588: ^J \e040 ! 1589: .br ! 1590: ^M \e040 ! 1591: .br ! 1592: \e040 ^J ! 1593: .Sp ! 1594: will do just that. ! 1595: By default, all characters in the command field are interpreted as the ! 1596: canonical ! 1597: .I rn ! 1598: characters, i.e. no macro expansion is done. ! 1599: Otherwise the above pair of macros would cause an infinite loop. ! 1600: To force macro expansion in the command field, enclose the ! 1601: macro call with ^( ... ^) thusly: ! 1602: .Sp ! 1603: @s |mysavescript ! 1604: .br ! 1605: @w w^(@s^) ! 1606: .Sp ! 1607: You can use the %() conditional construct to construct macros that work ! 1608: differently under different circumstances. ! 1609: In particular, the current mode (%m) of ! 1610: .I rn ! 1611: could be used to make a command that only works at a particular level. ! 1612: For example, ! 1613: .Sp ! 1614: ^[[O %(%m=p?\e040) ! 1615: .Sp ! 1616: will only allow the macro to work at the pager level. ! 1617: .Sp ! 1618: %(%{TERM}=vt100?^[[O) /^J ! 1619: .Sp ! 1620: will do the binding only if the terminal type is vt100, ! 1621: though if you have many of these it would be better to have separate ! 1622: files for each terminal. ! 1623: .Sp ! 1624: If you want to bind a macro to a function key that puts a common garbage character ! 1625: after the sequence (such as the carriage return on the end of Televideo 920 ! 1626: function sequences), DO NOT put the carriage return ! 1627: into all the sequences or you will waste a CONSIDERABLE amount of internal ! 1628: storage. ! 1629: Instead of \*(L"^AF^M\*(R", put \*(L"^AF+1\*(R", which indicates to ! 1630: .I rn ! 1631: that it should gobble up one character after the F. ! 1632: .SH AUTHOR ! 1633: Larry Wall <[email protected]> ! 1634: .br ! 1635: Regular expression routines are borrowed from emacs, by James Gosling. ! 1636: .SH FILES ! 1637: .Ip "%./.newsrc" 1.25i ! 1638: status of your news reading ! 1639: .Ip "%./.oldnewsrc" 1.25i ! 1640: backup copy of your ! 1641: .I .newsrc ! 1642: from start of session ! 1643: .Ip "%./.rnlock" 1.25i ! 1644: lock file so you don't screw up your ! 1645: .I .newsrc ! 1646: .Ip "%./.rnlast" 1.25i ! 1647: info from last run of rn ! 1648: .Ip "%./.rnsoft" 1.25i ! 1649: soft pointers into /usr/lib/active to speed startup, synchronous with ! 1650: .I .newsrc ! 1651: .Ip "%./.rnhead" 1.25i ! 1652: temporary header file to pass to a mailer or news poster ! 1653: .Ip "%./.rnmac" 1.25i ! 1654: macro and keymap definitions ! 1655: .Ip "%p" 1.25i ! 1656: your news save directory, usually ~/News ! 1657: .Ip "%x/active" 1.25i ! 1658: the list of active newsgroups, usually /usr/lib/news/active ! 1659: .Ip "%P" 1.25i ! 1660: the public news spool directory, usually /usr/spool/news ! 1661: .Ip "%X/INIT" 1.25i ! 1662: system-wide default switches ! 1663: .SH SEE ALSO ! 1664: newsrc(5), more(1), readnews(1), Pnews(1), Rnmail(1) ! 1665: .SH DIAGNOSTICS ! 1666: Generally self-documenting, as they say. ! 1667: .SH BUGS ! 1668: The ! 1669: .B \-h ! 1670: switch can only hide header lines that ! 1671: .I rn ! 1672: knows about. ! 1673: .PP ! 1674: The \*(L'\-\*(R' command doesn't cross newsgroup boundaries, and only undoes ! 1675: the last article selection. ! 1676: .PP ! 1677: If you edit your ! 1678: .I .newsrc ! 1679: while ! 1680: .I rn ! 1681: is running, ! 1682: .I rn ! 1683: will happily wipe out your changes when it decides to ! 1684: write out the ! 1685: .I .newsrc ! 1686: file. ! 1687: .PP ! 1688: .I Rn ! 1689: doesn't do certain things (like ordering articles on posting date) that ! 1690: the author feels should be handled by inews. ! 1691: .PP ! 1692: Marking of duplicate articles as read in cross-referenced newsgroups will ! 1693: not work unless the Xref patch is installed in inews. ! 1694: .PP ! 1695: If you get carried away with % or escape substitutions, you can overflow ! 1696: buffers. ! 1697: .PP ! 1698: There should be no fixed limit on the number of newsgroups. ! 1699: .PP ! 1700: Some of the more esoteric features may be missing on machines with limited ! 1701: address space.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.