|
|
1.1 ! root 1: Date: 25 Apr 1983 10:29-PDT (Monday) ! 2: From: Jim Rees <jim@uw-beaver> ! 3: Subject: rnews.ml ! 4: Message-Id: <83/04/25 1029.783@uw-beaver> ! 5: ! 6: Emacs Readnews Distribution ! 7: ! 8: This is an mlisp package, rnews.ml, for reading the news in Gosling ! 9: Emacs. It is similar to rmail.ml, and in fact depends on some of the ! 10: functions in rmail.ml. Our rmail.ml is modified, but I think this will ! 11: also work with the unmodified rmail.ml. ! 12: ! 13: This version is for use with news 2.10. There is a different version for ! 14: use with news 2.9. ! 15: ! 16: To install rnews, install rnews.ml in your emacs/maclib directory. In your ! 17: profile, put an autoload for rnews.ml: ! 18: ! 19: (autoload "rnews" "rnews.ml") ! 20: ! 21: Then enter emacs and do ESC-X-rnews. ! 22: ! 23: The rnews directory is kept in your ~/Messages directory, so if you ! 24: don't use rmail you might have to make this directory before you can ! 25: use rnews. ! 26: ! 27: There is an info page, written by grkermit!chris. To install it, change to ! 28: your Emacs databases directory and run "dbadd info emacs:rnews" with the ! 29: info page as standard input. To be complete you should change all the info ! 30: nodes pointing to rnews, for example "up", "previous", and "next", but it ! 31: will work if you don't change them. ! 32: ! 33: If you have any suggestions or criticisms, or want your name added to the ! 34: distribution list for new releases and updates, send mail to ! 35: emacs-rnews-request at uw-beaver via uucp or Arpanet. You can send mail to ! 36: the list by mailing to emacs-rnews at uw-beaver. ! 37: ! 38: Here are the info page and rnews.ml: ! 39: ! 40: File: emacs Node: rnews Up: Packages ! 41: ! 42: Unix Emacs readnews facility. ! 43: ! 44: "rnews" is used for reading news. Executing it places your news ! 45: directory into a window and enters a special command interpretation loop. ! 46: The commands that it understands are: ! 47: ! 48: p move to the previous article. ! 49: n move to the next article. ! 50: f move forward in the current article. ! 51: b and <backspace> ! 52: move backward in the current article. ! 53: d delete the current article. (the one indicated by '>') ! 54: u undelete the current article. ! 55: D delete the article at the cursor. ! 56: U undelete the article at the cursor. ! 57: r reply to the current article. ! 58: m enter smail, to send mail. ! 59: a append the current article to a file. ! 60: F Post a followup to the current article. ! 61: P Post an article. ! 62: q quit out of Rnews, saving undeleted articles. ! 63: ? display the info page for rnews ! 64: < go to the first article ! 65: > go to the last article ! 66: s asks for a number, skips down that number of articles ! 67: g asks for a number, goes to the article that many lines from the top ! 68: ` decrypts a net.jokes "rot 13" article ! 69: H show the entire article header, including "junk" lines ! 70: ^X-U unsubscribe to the current group ! 71: : execute an emacs extended command ! 72: <space> and <return> ! 73: make the article at the cursor be the current article ! 74: ! 75: When in Post mode: ! 76: ! 77: ^Xd positions you in the Distribution: field of the message, ! 78: creating it if necessary. ! 79: ! 80: ! 81: While in rnews, the current article is indicated with an ">" on the left ! 82: margin. You can move the cursor around with C-N, C-P, C-V, arrow keys, ! 83: searches etc. If you move the cursor, and want to see an article far from ! 84: the current article, <space> or <return> makes the article at the cursor ! 85: current. ! 86: ! 87: If you provide an argument to the rnews command (usually with ^U) you will ! 88: be put into rnews, but the directory will not be updated to include new ! 89: articles. This is much faster and is useful, for example, if you just want ! 90: to post a new article or re-read an old one. ! 91: ! 92: ------------------------------ Rnews.ml---------------------------------- ! 93: (if (! (is-bound rmail-default-log)) ! 94: (load "rmail.ml")) ! 95: (message "Loading the news system, please wait...") ! 96: (sit-for 0) ! 97: ! 98: ; Unix Emacs readnews facility. ! 99: ! 100: ; "rnews" is used for reading news. Executing it places your news ! 101: ; directory into a window and enters a special command interpretation loop. ! 102: ; The commands that it understands are: ! 103: ; p move to the previous message. ! 104: ; n move to the next message. ! 105: ; f move forward in the current message. ! 106: ; b move backward in the current message. ! 107: ; d delete the current message. ! 108: ; u undelete the last deleted message. ! 109: ; D delete the article at the cursor. ! 110: ; U undelete the article at the cursor. ! 111: ; r reply to the current message. ! 112: ; m enter smail, to send mail. ! 113: ; a append the current message to a file. ! 114: ; F Post a followup to the current message. ! 115: ; P Post a message. ! 116: ; q quit out of RMail, appending all undeleted messages to mbox. ! 117: ; ? display the info page for rnews ! 118: ; < go to the first article ! 119: ; > go to the last article ! 120: ; s asks for a number, skips down that number of articles ! 121: ; g asks for a number, goes to the article that many lines from the top ! 122: ; ` decrypts a net.jokes "rot 13" article ! 123: ; H show the entire article header, including "junk" lines ! 124: ; ^X-U unsubscribe to the current group ! 125: ; : execute an emacs extended command ! 126: ; <space> and <return> ! 127: ; make the article at the cursor be the current article ! 128: ! 129: ; When in Post mode, ! 130: ; ^Xd positions you in the Distribution: field of the message, ! 131: ; creating it if necessary. ! 132: ! 133: ; If you want replies sent back along the path by which they arrived, ! 134: ; change the 1 in (setq internet-replies 1) to 0. You will need to do ! 135: ; this if your mail program doesn't do automatic uucp routing. ! 136: ! 137: ; "smail" is used for sending mail. It places you in a buffer for ! 138: ; constructing the message and locally defines a few commands: ! 139: ; ^X^S send the mail -- if all went well the window will disappear, ! 140: ; otherwise a message indicating which addresses failed will appear ! 141: ; at the bottom of the acreen. Unfortunatly, the way the mailers on ! 142: ; Unix work, the message will have been sent to those addresses which ! 143: ; succeded and not to the others, so you have to delete some ! 144: ; addresses and fix up the others before you resend the message. ! 145: ; ^Xt positions you in the To: field of the message. ! 146: ; ^Xc positions you in the Cc: field of the message, creating it if it ! 147: ; doesn't already exist. ! 148: ; The abbrev facility is used for mail address expansion, ! 149: ; the file /usr/local/lib/emacs/RMailAbbrevs should contain ! 150: ; abbrev definitions to expand login names to their ! 151: ; proper mail address. This gets used at CMU since we have ! 152: ; 7 VAXen, 4 10's and countless 11's; remembering where a ! 153: ; person usually logs in is nearly impossible. ! 154: ; ^Xs positions you in the Subject: field of the message. ! 155: ; ^Xa positions you to the end of the body of the message, ready to ! 156: ; append more text. ! 157: ! 158: (defun ! 159: (rnews nbx internet-replies ! 160: this-from this-id this-length ! 161: ! 162: (setq internet-replies 1) ! 163: (setq nbx (concat (getenv "HOME") "/Messages/Newsbox")) ! 164: (message "Please wait while I read the news...") ! 165: (sit-for 0) ! 166: (save-window-excursion ! 167: (pop-to-buffer "rnews-directory") ! 168: (setq mode-line-format ! 169: (concat " News from message file " ! 170: (substr nbx 1 -1) ! 171: " %M %[%p%]")) ! 172: (setq mode-string "RNews") ! 173: (erase-buffer) ! 174: (set-mark) ! 175: (if (! prefix-argument-provided) ! 176: (filter-region (concat "readnews -e >> " nbx))) ! 177: (read-file nbx) ! 178: (end-of-file) ! 179: (setq case-fold-search 0) ! 180: (if (error-occured (re-search-reverse "^[>N ]")) ! 181: (beginning-of-file) ! 182: (next-line) ! 183: ) ! 184: (error-occured ! 185: (re-replace-string "^" "N ")) ! 186: (setq case-fold-search 1) ! 187: (save-excursion ! 188: (temp-use-buffer "Full Header") ! 189: (setq needs-checkpointing 0) ! 190: ) ! 191: (rnews-position) ! 192: (rnews-mark) ! 193: (sit-for 0) ! 194: (message "Type ^C to exit rnews; ? for help") ! 195: (recursive-edit) ! 196: (pop-to-buffer "rnews-directory") ! 197: (rnews-erase-messages) ! 198: (if buffer-is-modified (write-current-file)) ! 199: (temp-use-buffer "current-message") ! 200: (setq buffer-is-modified 0) ! 201: ) ! 202: (novalue) ! 203: ) ! 204: ) ! 205: ! 206: (defun ! 207: (rnews-position ! 208: (beginning-of-line) ! 209: (if (! (looking-at "^>")) ! 210: (progn ! 211: (beginning-of-file) ! 212: (if (error-occured (re-search-forward "^>")) ! 213: (if (error-occured (re-search-forward "^N")) ! 214: (progn ! 215: (end-of-file) ! 216: (previous-line) ! 217: ) ! 218: ) ! 219: ) ! 220: (beginning-of-line) ! 221: ) ! 222: ) ! 223: ) ! 224: ) ! 225: ! 226: (defun ! 227: (rnews-pickup rnews-file ! 228: (beginning-of-line) ! 229: (save-excursion ! 230: (provide-prefix-argument 2 (forward-character)) ! 231: (set-mark) ! 232: (search-forward " ") ! 233: (backward-character) ! 234: (copy-region-to-buffer "Scratch Stuff") ! 235: (temp-use-buffer "Scratch Stuff") ! 236: (setq needs-checkpointing 0) ! 237: (beginning-of-file) ! 238: (set-mark) ! 239: (error-occured ! 240: (replace-string "." "/")) ! 241: (end-of-line) ! 242: (setq rnews-file (region-to-string)) ! 243: (pop-to-buffer "current-message") ! 244: (setq needs-checkpointing 0) ! 245: (setq this-from "") ! 246: (setq this-length "") ! 247: (setq this-id "") ! 248: (if (error-occured ! 249: (read-file (concat "/usr/spool/news/" rnews-file))) ! 250: (progn ! 251: (erase-buffer) ! 252: (setq mode-line-format ! 253: (concat "Expired article " rnews-file))) ! 254: (progn ! 255: (setq case-fold-search 1) ! 256: (beginning-of-file) ! 257: (if (error-occured (search-forward "\n\n")) ! 258: (message "Garbled header") ! 259: (rnews-fix-header)) ! 260: (set-rnews-mode-line-format)) ! 261: ) ! 262: ) ! 263: ) ! 264: ! 265: (rnews-fix-header ! 266: (set-mark) ! 267: (beginning-of-file) ! 268: (copy-region-to-buffer "Full Header") ! 269: (narrow-region) ! 270: (convert-head "Posted:" "Date:") ! 271: (convert-head "Title:" "Subject:") ! 272: (convert-head "Article-I.D.:" "Message-ID:") ! 273: (error-occured ! 274: (re-search-forward "^From:[ \t]") ! 275: (end-of-line) ! 276: (set-mark) ! 277: (re-search-reverse "[!:@]") ! 278: (re-search-reverse "[!: ]") ! 279: (forward-character) ! 280: (setq this-from (region-to-string)) ! 281: (beginning-of-file) ! 282: ) ! 283: (error-occured ! 284: (re-search-forward "^Lines:[ \t]*\\(.*\\)") ! 285: (region-around-match 1) ! 286: (setq this-length (region-to-string)) ! 287: (beginning-of-file) ! 288: (re-replace-string "^Lines:.*\n" "") ! 289: (beginning-of-file) ! 290: ) ! 291: (error-occured ! 292: (re-search-forward "^Message-ID:[ \t]*\\(.*\\)") ! 293: (region-around-match 1) ! 294: (setq this-id (region-to-string)) ! 295: (beginning-of-file) ! 296: (re-replace-string "^Message-ID:.*\n" "") ! 297: (beginning-of-file) ! 298: ) ! 299: (error-occured (re-replace-string "^.*-version:.*\n" "")) ! 300: (error-occured (re-replace-string "^Path:.*\n" "")) ! 301: (error-occured (re-replace-string "^Sender:.*\n" "")) ! 302: (error-occured (re-replace-string "^.*received:.*\n" "")) ! 303: (widen-region) ! 304: (if (= (length this-length) 0) ! 305: ; The constant 38 comes from the average ! 306: ; line length of 356 articles in net.* ! 307: (setq this-length (concat "~" (/ (buffer-size) 38)))) ! 308: ) ! 309: ! 310: (convert-head re1 re2 ! 311: (setq re1 (concat "^" (arg 1))) ! 312: (setq re2 (concat "^" (arg 2))) ! 313: (if (error-occured (re-search-forward re2)) ! 314: (error-occured (re-replace-string re1 (arg 2))) ! 315: (beginning-of-file)) ! 316: (error-occured (re-replace-string (concat re1 ".*\n") "")) ! 317: ) ! 318: ! 319: (rnews-show-full-header ! 320: (save-window-excursion ! 321: (temp-use-buffer "current-message") ! 322: (beginning-of-file) ! 323: (set-mark) ! 324: (error-occured ! 325: (search-forward "\n\n") ! 326: (erase-region) ! 327: (yank-buffer "Full Header") ! 328: ) ! 329: ) ! 330: ) ! 331: ! 332: (rnews-next-page ! 333: (save-excursion ! 334: (pop-to-buffer "current-message") ! 335: (next-page) ! 336: (set-rnews-mode-line-format) ! 337: ) ! 338: ) ! 339: ! 340: (rnews-previous-page ! 341: (save-excursion ! 342: (pop-to-buffer "current-message") ! 343: (previous-page) ! 344: (set-rnews-mode-line-format) ! 345: ) ! 346: ) ! 347: ! 348: (set-rnews-mode-line-format from ! 349: (save-excursion ! 350: (temp-use-buffer "Scratch Stuff") ! 351: (erase-buffer) ! 352: (insert-string this-from) ! 353: (set-mark) ! 354: (beginning-of-line) ! 355: (error-occured (replace-string "%" "%%")) ! 356: (setq from (region-to-string)) ! 357: (use-old-buffer "current-message") ! 358: (end-of-file) ! 359: (setq mode-line-format ! 360: (concat ! 361: "From: " from ! 362: (if (!= (length this-length) 0) ! 363: (concat " Lines: " this-length) ! 364: "") ! 365: " %[%p%]" ! 366: (if (dot-is-visible) ! 367: "" ! 368: " --More--") ! 369: ))) ! 370: ) ! 371: ) ! 372: ! 373: (defun ! 374: (rnews-erase-messages ! 375: (save-excursion ! 376: (pop-to-buffer "rnews-directory") ! 377: (beginning-of-file) ! 378: (error-occured ! 379: (while 1 ! 380: (re-search-forward "^.D") ! 381: (beginning-of-line) ! 382: (set-mark) ! 383: (end-of-line) ! 384: (forward-character) ! 385: (erase-region) ! 386: ) ! 387: ) ! 388: ) ! 389: ) ! 390: ) ! 391: ! 392: (defun ! 393: (rnews-com ! 394: (argc) ! 395: (rnews) ! 396: (exit-emacs) ! 397: ) ! 398: ! 399: (rnews-next-message ! 400: (rnews-position) ! 401: (delete-next-character) ! 402: (insert-character ' ') ! 403: (beginning-of-line) ! 404: (next-line) ! 405: (if (eobp) (progn (previous-line) ! 406: (message "You're at the last message already"))) ! 407: (delete-next-character) ! 408: (insert-character '>') ! 409: (rnews-pickup) ! 410: ) ! 411: ! 412: (rnews-previous-message ! 413: (rnews-position) ! 414: (delete-next-character) ! 415: (insert-character ' ') ! 416: (previous-line) ! 417: (beginning-of-line) ! 418: (delete-next-character) ! 419: (insert-character '>') ! 420: (rnews-pickup) ! 421: ) ! 422: ! 423: (rnews-delete-message ! 424: (rnews-position) ! 425: (forward-character) ! 426: (delete-next-character) ! 427: (insert-character 'D') ! 428: (beginning-of-line) ! 429: ) ! 430: ! 431: (rnews-undelete-message ! 432: (rnews-position) ! 433: (forward-character) ! 434: (delete-next-character) ! 435: (insert-character ' ') ! 436: (beginning-of-line) ! 437: ) ! 438: ! 439: (rnews-delete-message-at-cursor ! 440: (beginning-of-line) ! 441: (forward-character) ! 442: (delete-next-character) ! 443: (insert-character 'D') ! 444: (beginning-of-line) ! 445: ) ! 446: ! 447: (rnews-undelete-message-at-cursor ! 448: (beginning-of-line) ! 449: (forward-character) ! 450: (delete-next-character) ! 451: (insert-character ' ') ! 452: (beginning-of-line) ! 453: ) ! 454: ! 455: (rnews-goto-message n ! 456: (setq n (get-tty-string "Goto message number: ")) ! 457: (rnews-unmark) ! 458: (beginning-of-file) ! 459: (provide-prefix-argument n (next-line)) ! 460: (rnews-mark) ! 461: ) ! 462: ) ! 463: ! 464: (defun ! 465: (rnews-help ! 466: (&info "emacs" "rnews"))) ! 467: ! 468: (defun ! 469: (rnews-reply subject dest excess refs ! 470: (setq subject "") ! 471: (setq dest "") ! 472: (setq excess "") ! 473: (save-window-excursion ! 474: (pop-to-buffer "current-message") ! 475: (setq case-fold-search 1) ! 476: (beginning-of-file) ! 477: (search-forward "\n\n") ! 478: (set-mark) ! 479: (beginning-of-file) ! 480: (narrow-region) ! 481: (error-occured ! 482: (re-search-forward "^Subject:[ \t]*\\(.*\\)") ! 483: (region-around-match 1) ! 484: (setq subject (region-to-string)) ! 485: (if (!= (substr subject 1 3) "Re:") ! 486: (setq subject (concat "Re: " subject)) ! 487: ) ! 488: ) ! 489: (save-excursion ! 490: (temp-use-buffer "Full Header") ! 491: (beginning-of-file) ! 492: (if internet-replies ! 493: (if (error-occured (re-search-forward ! 494: "^Reply-To:[ \t]*\\(.*\\)")) ! 495: (setq dest this-from) ! 496: (progn ! 497: (region-around-match 1) ! 498: (setq dest (region-to-string))) ! 499: ) ! 500: (progn ! 501: (if (error-occured (re-search-forward ! 502: "^Path:[ \t]*[^ \t!]*!\\(.*\\)")) ! 503: (re-search-forward ! 504: "^From:[ \t]*[^ \t!]*!\\(.*\\)")) ! 505: (region-around-match 1) ! 506: (setq dest (region-to-string)))) ! 507: ) ! 508: (beginning-of-file) ! 509: (error-occured edest ! 510: (save-excursion ! 511: (temp-use-buffer "Scratch Stuff") ! 512: (setq needs-checkpointing 0) ! 513: (erase-buffer) ! 514: (insert-string dest) ! 515: (set-mark) ! 516: (beginning-of-file) ! 517: (if (! (error-occured ! 518: (re-search-forward " (\\(.*\\))"))) ! 519: (progn ! 520: (region-around-match 1) ! 521: (setq dest (region-to-string)) ! 522: (beginning-of-file) ! 523: (insert-string (concat dest " <")) ! 524: (re-replace-string " *(.*" ">") ! 525: (end-of-line) ! 526: (set-mark) ! 527: (beginning-of-line) ! 528: (setq dest (region-to-string)) ! 529: ) ! 530: ) ! 531: (error-occured ! 532: (re-replace-string ! 533: " *at *[^,\n]*\\| *@ *[^,\n]*\\| *([^)\n]*)\\| *<[^>\n]*>" ! 534: "")) ! 535: (error-occured ! 536: (re-replace-string ".*!" "")) ! 537: (setq edest (region-to-string)) ! 538: ) ! 539: (error-occured ! 540: (re-search-forward "^Date:[ \t]*\\(.*\\)") ! 541: (region-around-match 1) ! 542: ) ! 543: (setq excess (concat ! 544: "In-Reply-To: " ! 545: edest "'s message of " ! 546: (region-to-string) ! 547: "\n")) ! 548: (beginning-of-file) ! 549: (if (error-occured ! 550: (re-search-forward "^References:[ \t]*\\(.*\\)") ! 551: (region-around-match 1) ! 552: (setq refs (concat (region-to-string) " " this-id))) ! 553: (setq refs this-id)) ! 554: ) ! 555: (widen-region) ! 556: (pop-to-buffer "send-mail") ! 557: (setq needs-checkpointing 0) ! 558: (setq case-fold-search 1) ! 559: (erase-buffer) ! 560: (insert-string subject) ! 561: (newline) ! 562: (insert-string dest) ! 563: (newline) ! 564: (insert-string excess) ! 565: (insert-string (concat "References: " refs "\n")) ! 566: (do-mail-setup) ! 567: ) ! 568: (rnews-position) ! 569: (if (looking-at "^>") ! 570: (progn ! 571: (forward-character) ! 572: (delete-next-character) ! 573: (insert-character 'A') ! 574: (beginning-of-line))) ! 575: ) ! 576: ) ! 577: ! 578: (defun ! 579: (rnews-followup newsgroups subject refs ! 580: (setq newsgroups "") ! 581: (setq subject "") ! 582: (setq refs "") ! 583: (save-window-excursion ! 584: (pop-to-buffer "current-message") ! 585: (beginning-of-file) ! 586: (search-forward "\n\n") ! 587: (set-mark) ! 588: (beginning-of-file) ! 589: (narrow-region) ! 590: (error-occured ! 591: (re-search-forward "^Newsgroups:[ \t]*\\(.*\\)") ! 592: (region-around-match 1) ! 593: (setq newsgroups (region-to-string)) ! 594: ) ! 595: (save-excursion ! 596: (temp-use-buffer "Scratch Stuff") ! 597: (setq needs-checkpointing 0) ! 598: (erase-buffer) ! 599: (insert-string newsgroups) ! 600: (beginning-of-file) ! 601: (error-occured ! 602: (replace-string "general" "followup")) ! 603: (set-mark) ! 604: (end-of-file) ! 605: (setq newsgroups (region-to-string)) ! 606: ) ! 607: (beginning-of-file) ! 608: (error-occured ! 609: (re-search-forward "^Subject:[ \t]*\\(.*\\)") ! 610: (region-around-match 1) ! 611: (setq subject (region-to-string)) ! 612: (if (!= (substr subject 1 3) "Re:") ! 613: (setq subject (concat "Re: " subject)) ! 614: ) ! 615: ) ! 616: (beginning-of-file) ! 617: (if (error-occured ! 618: (re-search-forward "^References:[ \t]*\\(.*\\)") ! 619: (region-around-match 1) ! 620: (setq refs (concat (region-to-string) " " this-id))) ! 621: (setq refs this-id)) ! 622: (beginning-of-file) ! 623: (widen-region) ! 624: (pop-to-buffer "send-mail") ! 625: (setq needs-checkpointing 0) ! 626: (setq case-fold-search 1) ! 627: (erase-buffer) ! 628: (insert-string (concat "Newsgroups: " newsgroups)) ! 629: (newline) ! 630: (insert-string (concat "Subject: " subject)) ! 631: (newline) ! 632: (insert-string (concat "References: " refs)) ! 633: (newline) ! 634: (newline) ! 635: (rnews-do-post) ! 636: ) ! 637: (rnews-position) ! 638: (if (looking-at "^>") ! 639: (progn ! 640: (forward-character) ! 641: (delete-next-character) ! 642: (insert-character 'F') ! 643: (beginning-of-line))) ! 644: ) ! 645: ! 646: (rnews-post ! 647: (save-window-excursion ! 648: (pop-to-buffer "send-mail") ! 649: (setq needs-checkpointing 0) ! 650: (setq case-fold-search 1) ! 651: (erase-buffer) ! 652: (insert-string "Newsgroups: \nSubject: \n\n") ! 653: (beginning-of-file) ! 654: (end-of-line) ! 655: (rnews-do-post) ! 656: ) ! 657: ) ! 658: ! 659: (rnews-do-post rnews-do-send ! 660: (setq rnews-do-send 1) ! 661: (setq right-margin 72) ! 662: (local-bind-to-key "exit-emacs" "\^X\^S") ! 663: (local-bind-to-key "exit-emacs" "\^X\^F") ! 664: (local-bind-to-key "rnews-abort-send" "\^X\^A") ! 665: (local-bind-to-key "justify-paragraph" "\ej") ! 666: (local-bind-to-key "rnews-post-goto-dist" "\^Xd") ! 667: (while (= rnews-do-send 1) ! 668: (progn ! 669: (recursive-edit) ! 670: (if (= rnews-do-send 1) ! 671: (rnews-call-inews)))) ! 672: ) ! 673: ! 674: (rnews-post-goto-dist ; Move to the "Distribution:" field ! 675: (beginning-of-file) ! 676: (if (error-occured (re-search-forward "^Distribution:.*")) ! 677: (progn (re-search-forward "\n\n\\|^Subject:.*\n.") ! 678: (backward-character) ! 679: (backward-character) ! 680: (insert-string "\nDistribution: "))) ! 681: ) ! 682: ! 683: (rnews-call-inews inews-errors ! 684: (save-excursion ! 685: (beginning-of-file) ! 686: (set-mark) ! 687: (end-of-file) ! 688: (copy-region-to-buffer "Delivery-errors") ! 689: ) ! 690: (message "Sending...") ! 691: (sit-for 0) ! 692: (save-window-excursion ! 693: (temp-use-buffer "Delivery-errors") ! 694: (setq needs-checkpointing 0) ! 695: (beginning-of-file) ! 696: (set-mark) ! 697: (end-of-file) ! 698: (filter-region "inews -h") ! 699: (beginning-of-file) ! 700: (set-mark) ! 701: (error-occured (re-replace-string "\n\n* *" "; ")) ! 702: (end-of-line) ! 703: (setq inews-errors (region-to-string)) ! 704: (if (= (length inews-errors) 0) ! 705: (progn ! 706: (setq rnews-do-send 0) ! 707: (message "Posted") ! 708: ) ! 709: (message inews-errors) ! 710: ) ! 711: ) ! 712: ) ! 713: ! 714: (rnews-abort-send ! 715: (if (!= "y" (substr (get-tty-string ! 716: "Do you really want to abort the message? ") ! 717: 1 1)) ! 718: (error-message "Turkey!")) ! 719: (setq rnews-do-send 0) ! 720: (exit-emacs) ! 721: ) ! 722: ) ! 723: ! 724: (defun ! 725: (rnews-unmark ! 726: (error-occured ! 727: (rnews-position) ! 728: (delete-next-character) ! 729: (insert-character ' ') ! 730: (beginning-of-line))) ! 731: ! 732: (rnews-mark ! 733: (beginning-of-line) ! 734: (if (error-occured ! 735: (if (eobp) ! 736: (re-search-reverse "^.") ! 737: (progn ! 738: (re-search-forward "^.") ! 739: (beginning-of-line))) ! 740: ) ! 741: (message "No messages") ! 742: (progn ! 743: (delete-next-character) ! 744: (insert-character '>') ! 745: (rnews-pickup)) ! 746: ) ! 747: ) ! 748: ! 749: (rnews-first-message ! 750: (rnews-unmark) ! 751: (beginning-of-file) ! 752: (rnews-mark) ! 753: ) ! 754: ! 755: (rnews-last-message ! 756: (rnews-unmark) ! 757: (end-of-file) ! 758: (rnews-mark) ! 759: ) ! 760: ! 761: (rnews-skip n ! 762: (setq n (get-tty-string "Skip messages: ")) ! 763: (rnews-unmark) ! 764: (provide-prefix-argument n (next-line)) ! 765: (rnews-mark) ! 766: ) ! 767: ! 768: (rnews-this-message save-dot ! 769: (setq save-dot (dot)) ! 770: (rnews-unmark) ! 771: (goto-character save-dot) ! 772: (rnews-mark) ! 773: ) ! 774: ! 775: (rnews-decrypt-joke ! 776: (save-window-excursion ! 777: (temp-use-buffer "current-message") ! 778: (beginning-of-file) ! 779: (search-forward "\n\n") ! 780: (set-mark) ! 781: (end-of-file) ! 782: (filter-region "tr a-zA-Z n-za-mN-ZA-M") ! 783: ) ! 784: ) ! 785: ! 786: (rnews-unsubscribe group newsrc ! 787: (beginning-of-line) ! 788: (save-excursion ! 789: (provide-prefix-argument 2 (forward-character)) ! 790: (set-mark) ! 791: (search-forward " ") ! 792: (search-reverse "/") ! 793: (setq group (region-to-string)) ! 794: (temp-use-buffer ".newsrc") ! 795: (if (error-occured (setq newsrc (getenv "NEWSRC"))) ! 796: (setq newsrc (concat (getenv "HOME") "/.newsrc"))) ! 797: (read-file newsrc) ! 798: (if (error-occured (search-forward (concat group ":"))) ! 799: (message "Already unsubscribed") ! 800: (progn ! 801: (delete-previous-character) ! 802: (insert-character '!') ! 803: (write-current-file) ! 804: (message (concat "Unsubscribed from " group)))) ! 805: ) ! 806: ) ! 807: ) ! 808: ! 809: (save-excursion i ! 810: (temp-use-buffer "rnews-directory") ! 811: (setq i ' ') ! 812: (while (< i 128) ! 813: (local-bind-to-key "illegal-operation" i) ! 814: (setq i (+ i 1))) ! 815: (local-bind-to-key "rnews-next-page" 'f') ! 816: (local-bind-to-key "rnews-previous-page" 'b') ! 817: (local-bind-to-key "rnews-previous-page" '^H') ! 818: (local-bind-to-key "rnews-next-message" 'n') ! 819: (local-bind-to-key "rnews-previous-message" 'p') ! 820: (local-bind-to-key "rnews-delete-message" 'd') ! 821: (local-bind-to-key "rnews-undelete-message" 'u') ! 822: (local-bind-to-key "rnews-delete-message-at-cursor" 'D') ! 823: (local-bind-to-key "rnews-undelete-message-at-cursor" 'U') ! 824: (local-bind-to-key "rnews-help" '?') ! 825: (local-bind-to-key "exit-emacs" 'q') ! 826: (local-bind-to-key "rnews-reply" 'r') ! 827: (local-bind-to-key "rnews-followup" 'F') ! 828: (local-bind-to-key "rnews-post" 'P') ! 829: (local-bind-to-key "smail" 'm') ! 830: (local-bind-to-key "rnews-goto-message" 'g') ! 831: (local-bind-to-key "rnews-first-message" '<') ! 832: (local-bind-to-key "rnews-last-message" '>') ! 833: (local-bind-to-key "rnews-skip" 's') ! 834: (local-bind-to-key "rmail-append" 'a') ! 835: (local-bind-to-key "rmail-shell" '!') ! 836: (local-bind-to-key "execute-extended-command" ':') ! 837: (local-bind-to-key "rnews-this-message" ' ') ! 838: (local-bind-to-key "rnews-this-message" '\r') ! 839: (local-bind-to-key "rnews-decrypt-joke" '`') ! 840: (local-bind-to-key "rnews-show-full-header" 'H') ! 841: (local-bind-to-key "rnews-unsubscribe" "\^Xu") ! 842: )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.