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