comparison lisp/gnus/gnus-uu.el @ 56927:55fd4f77387a after-merge-gnus-5_10

Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523 Merge from emacs--gnus--5.10, gnus--rel--5.10 Patches applied: * miles@gnu.org--gnu-2004/emacs--gnus--5.10--base-0 tag of miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-464 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-1 Import from CVS branch gnus-5_10-branch * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-2 Merge from lorentey@elte.hu--2004/emacs--multi-tty--0, emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-3 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-4 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-18 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-19 Remove autoconf-generated files from archive * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-20 Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 04 Sep 2004 13:13:48 +0000
parents 695cf19ef79e
children 88db2adda4b7 cce1c0ee76ee
comparison
equal deleted inserted replaced
56926:f8e248e9a717 56927:55fd4f77387a
1 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus 1 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus
2 ;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2 ;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
3 ;; 2001 Free Software Foundation, Inc. 3 ;; 2001, 2002, 2003 Free Software Foundation, Inc.
4 4
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> 5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
6 ;; Created: 2 Oct 1993 6 ;; Created: 2 Oct 1993
7 ;; Keyword: news 7 ;; Keyword: news
8 8
297 '("^Date:" "^From:" "^To:" "^Cc:" "^Subject:" "^Message-ID:" "^Keywords:" 297 '("^Date:" "^From:" "^To:" "^Cc:" "^Subject:" "^Message-ID:" "^Keywords:"
298 "^Summary:" "^References:" "^Content-Type:" "^Content-Transfer-Encoding:" 298 "^Summary:" "^References:" "^Content-Type:" "^Content-Transfer-Encoding:"
299 "^MIME-Version:" "^Content-Disposition:" "^Content-Description:" 299 "^MIME-Version:" "^Content-Disposition:" "^Content-Description:"
300 "^Content-ID:") 300 "^Content-ID:")
301 "*List of regexps to match headers included in digested messages. 301 "*List of regexps to match headers included in digested messages.
302 The headers will be included in the sequence they are matched." 302 The headers will be included in the sequence they are matched. If nil
303 include all headers."
303 :group 'gnus-extract 304 :group 'gnus-extract
304 :type '(repeat regexp)) 305 :type '(repeat regexp))
305 306
306 (defcustom gnus-uu-save-separate-articles nil 307 (defcustom gnus-uu-save-separate-articles nil
307 "*Non-nil means that gnus-uu will save articles in separate files." 308 "*Non-nil means that gnus-uu will save articles in separate files."
319 320
320 ;; Internal variables 321 ;; Internal variables
321 322
322 (defvar gnus-uu-saved-article-name nil) 323 (defvar gnus-uu-saved-article-name nil)
323 324
324 (defvar gnus-uu-begin-string "^begin[ \t]+[0-7][0-7][0-7][ \t]+\\(.*\\)$") 325 (defvar gnus-uu-begin-string "^begin[ \t]+0?[0-7][0-7][0-7][ \t]+\\(.*\\)$")
325 (defvar gnus-uu-end-string "^end[ \t]*$") 326 (defvar gnus-uu-end-string "^end[ \t]*$")
326 327
327 (defvar gnus-uu-body-line "^M") 328 (defvar gnus-uu-body-line "^M")
328 (let ((i 61)) 329 (let ((i 61))
329 (while (> (setq i (1- i)) 0) 330 (while (> (setq i (1- i)) 0)
334 335
335 (defvar gnus-uu-shar-begin-string "^#! */bin/sh") 336 (defvar gnus-uu-shar-begin-string "^#! */bin/sh")
336 337
337 (defvar gnus-uu-shar-file-name nil) 338 (defvar gnus-uu-shar-file-name nil)
338 (defvar gnus-uu-shar-name-marker 339 (defvar gnus-uu-shar-name-marker
339 "begin [0-7][0-7][0-7][ \t]+\\(\\(\\w\\|\\.\\)*\\b\\)") 340 "begin 0?[0-7][0-7][0-7][ \t]+\\(\\(\\w\\|[.\\:]\\)*\\b\\)")
340 341
341 (defvar gnus-uu-postscript-begin-string "^%!PS-") 342 (defvar gnus-uu-postscript-begin-string "^%!PS-")
342 (defvar gnus-uu-postscript-end-string "^%%EOF$") 343 (defvar gnus-uu-postscript-end-string "^%%EOF$")
343 344
344 (defvar gnus-uu-file-name nil) 345 (defvar gnus-uu-file-name nil)
350 (defvar gnus-uu-output-buffer-name " *Gnus UU Output*") 351 (defvar gnus-uu-output-buffer-name " *Gnus UU Output*")
351 352
352 (defvar gnus-uu-default-dir gnus-article-save-directory) 353 (defvar gnus-uu-default-dir gnus-article-save-directory)
353 (defvar gnus-uu-digest-from-subject nil) 354 (defvar gnus-uu-digest-from-subject nil)
354 (defvar gnus-uu-digest-buffer nil) 355 (defvar gnus-uu-digest-buffer nil)
355
356 ;; Keymaps
357
358 (gnus-define-keys (gnus-uu-mark-map "P" gnus-summary-mark-map)
359 "p" gnus-summary-mark-as-processable
360 "u" gnus-summary-unmark-as-processable
361 "U" gnus-summary-unmark-all-processable
362 "v" gnus-uu-mark-over
363 "s" gnus-uu-mark-series
364 "r" gnus-uu-mark-region
365 "g" gnus-uu-unmark-region
366 "R" gnus-uu-mark-by-regexp
367 "G" gnus-uu-unmark-by-regexp
368 "t" gnus-uu-mark-thread
369 "T" gnus-uu-unmark-thread
370 "a" gnus-uu-mark-all
371 "b" gnus-uu-mark-buffer
372 "S" gnus-uu-mark-sparse
373 "k" gnus-summary-kill-process-mark
374 "y" gnus-summary-yank-process-mark
375 "w" gnus-summary-save-process-mark
376 "i" gnus-uu-invert-processable)
377
378 (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map)
379 ;;"x" gnus-uu-extract-any
380 "m" gnus-summary-save-parts
381 "u" gnus-uu-decode-uu
382 "U" gnus-uu-decode-uu-and-save
383 "s" gnus-uu-decode-unshar
384 "S" gnus-uu-decode-unshar-and-save
385 "o" gnus-uu-decode-save
386 "O" gnus-uu-decode-save
387 "b" gnus-uu-decode-binhex
388 "B" gnus-uu-decode-binhex
389 "p" gnus-uu-decode-postscript
390 "P" gnus-uu-decode-postscript-and-save)
391
392 (gnus-define-keys
393 (gnus-uu-extract-view-map "v" gnus-uu-extract-map)
394 "u" gnus-uu-decode-uu-view
395 "U" gnus-uu-decode-uu-and-save-view
396 "s" gnus-uu-decode-unshar-view
397 "S" gnus-uu-decode-unshar-and-save-view
398 "o" gnus-uu-decode-save-view
399 "O" gnus-uu-decode-save-view
400 "b" gnus-uu-decode-binhex-view
401 "B" gnus-uu-decode-binhex-view
402 "p" gnus-uu-decode-postscript-view
403 "P" gnus-uu-decode-postscript-and-save-view)
404
405 356
406 ;; Commands. 357 ;; Commands.
407 358
408 (defun gnus-uu-decode-uu (&optional n) 359 (defun gnus-uu-decode-uu (&optional n)
409 "Uudecodes the current article." 360 "Uudecodes the current article."
527 (mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets) 478 (mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets)
528 gnus-uu-digest-buffer subject from) 479 gnus-uu-digest-buffer subject from)
529 (if (and n (not (numberp n))) 480 (if (and n (not (numberp n)))
530 (setq message-forward-as-mime (not message-forward-as-mime) 481 (setq message-forward-as-mime (not message-forward-as-mime)
531 n nil)) 482 n nil))
532 (gnus-setup-message 'forward 483 (let ((gnus-article-reply (gnus-summary-work-articles n)))
533 (setq gnus-uu-digest-from-subject nil) 484 (gnus-setup-message 'forward
534 (setq gnus-uu-digest-buffer 485 (setq gnus-uu-digest-from-subject nil)
535 (gnus-get-buffer-create " *gnus-uu-forward*")) 486 (setq gnus-uu-digest-buffer
536 (gnus-uu-decode-save n file) 487 (gnus-get-buffer-create " *gnus-uu-forward*"))
537 (switch-to-buffer gnus-uu-digest-buffer) 488 (gnus-uu-decode-save n file)
538 (let ((fs gnus-uu-digest-from-subject)) 489 (switch-to-buffer gnus-uu-digest-buffer)
539 (when fs 490 (let ((fs gnus-uu-digest-from-subject))
540 (setq from (caar fs) 491 (when fs
541 subject (gnus-simplify-subject-fuzzy (cdar fs)) 492 (setq from (caar fs)
542 fs (cdr fs)) 493 subject (gnus-simplify-subject-fuzzy (cdar fs))
543 (while (and fs (or from subject)) 494 fs (cdr fs))
544 (when from 495 (while (and fs (or from subject))
545 (unless (string= from (caar fs)) 496 (when from
546 (setq from nil))) 497 (unless (string= from (caar fs))
547 (when subject 498 (setq from nil)))
548 (unless (string= (gnus-simplify-subject-fuzzy (cdar fs)) 499 (when subject
549 subject) 500 (unless (string= (gnus-simplify-subject-fuzzy (cdar fs))
550 (setq subject nil))) 501 subject)
551 (setq fs (cdr fs)))) 502 (setq subject nil)))
552 (unless subject 503 (setq fs (cdr fs))))
553 (setq subject "Digested Articles")) 504 (unless subject
554 (unless from 505 (setq subject "Digested Articles"))
555 (setq from 506 (unless from
556 (if (gnus-news-group-p gnus-newsgroup-name) 507 (setq from
557 gnus-newsgroup-name 508 (if (gnus-news-group-p gnus-newsgroup-name)
558 "Various")))) 509 gnus-newsgroup-name
559 (goto-char (point-min)) 510 "Various"))))
560 (when (re-search-forward "^Subject: ") 511 (goto-char (point-min))
561 (delete-region (point) (gnus-point-at-eol)) 512 (when (re-search-forward "^Subject: ")
562 (insert subject)) 513 (delete-region (point) (gnus-point-at-eol))
563 (goto-char (point-min)) 514 (insert subject))
564 (when (re-search-forward "^From:") 515 (goto-char (point-min))
565 (delete-region (point) (gnus-point-at-eol)) 516 (when (re-search-forward "^From:")
566 (insert " " from)) 517 (delete-region (point) (gnus-point-at-eol))
567 (let ((message-forward-decoded-p t)) 518 (insert " " from))
568 (message-forward post t))) 519 (let ((message-forward-decoded-p t))
520 (message-forward post t))))
569 (setq gnus-uu-digest-from-subject nil))) 521 (setq gnus-uu-digest-from-subject nil)))
570 522
571 (defun gnus-uu-digest-post-forward (&optional n) 523 (defun gnus-uu-digest-post-forward (&optional n)
572 "Digest and forward to a newsgroup." 524 "Digest and forward to a newsgroup."
573 (interactive "P") 525 (interactive "P")
574 (gnus-uu-digest-mail-forward n t)) 526 (gnus-uu-digest-mail-forward n t))
575 527
576 ;; Process marking. 528 ;; Process marking.
529
530 (defun gnus-message-process-mark (unmarkp new-marked)
531 (let ((old (- (length gnus-newsgroup-processable) (length new-marked))))
532 (message "%d mark%s %s%s"
533 (length new-marked)
534 (if (= (length new-marked) 1) "" "s")
535 (if unmarkp "removed" "added")
536 (cond
537 ((and (zerop old)
538 (not unmarkp))
539 "")
540 (unmarkp
541 (format ", %d remain marked"
542 (length gnus-newsgroup-processable)))
543 (t
544 (format ", %d already marked" old))))))
545
546 (defun gnus-new-processable (unmarkp articles)
547 (if unmarkp
548 (gnus-intersection gnus-newsgroup-processable articles)
549 (gnus-set-difference articles gnus-newsgroup-processable)))
577 550
578 (defun gnus-uu-mark-by-regexp (regexp &optional unmark) 551 (defun gnus-uu-mark-by-regexp (regexp &optional unmark)
579 "Set the process mark on articles whose subjects match REGEXP. 552 "Set the process mark on articles whose subjects match REGEXP.
580 When called interactively, prompt for REGEXP. 553 When called interactively, prompt for REGEXP.
581 Optional UNMARK non-nil means unmark instead of mark." 554 Optional UNMARK non-nil means unmark instead of mark."
582 (interactive "sMark (regexp): \nP") 555 (interactive "sMark (regexp): \nP")
583 (let ((articles (gnus-uu-find-articles-matching regexp))) 556 (save-excursion
584 (while articles 557 (let* ((articles (gnus-uu-find-articles-matching regexp))
585 (if unmark 558 (new-marked (gnus-new-processable unmark articles)))
586 (gnus-summary-remove-process-mark (pop articles)) 559 (while articles
587 (gnus-summary-set-process-mark (pop articles)))) 560 (if unmark
588 (message "")) 561 (gnus-summary-remove-process-mark (pop articles))
562 (gnus-summary-set-process-mark (pop articles))))
563 (gnus-message-process-mark unmark new-marked)))
589 (gnus-summary-position-point)) 564 (gnus-summary-position-point))
590 565
591 (defun gnus-uu-unmark-by-regexp (regexp) 566 (defun gnus-uu-unmark-by-regexp (regexp)
592 "Remove the process mark from articles whose subjects match REGEXP. 567 "Remove the process mark from articles whose subjects match REGEXP.
593 When called interactively, prompt for REGEXP." 568 When called interactively, prompt for REGEXP."
595 (gnus-uu-mark-by-regexp regexp t)) 570 (gnus-uu-mark-by-regexp regexp t))
596 571
597 (defun gnus-uu-mark-series () 572 (defun gnus-uu-mark-series ()
598 "Mark the current series with the process mark." 573 "Mark the current series with the process mark."
599 (interactive) 574 (interactive)
600 (let ((articles (gnus-uu-find-articles-matching))) 575 (let* ((articles (gnus-uu-find-articles-matching))
576 (l (length articles)))
601 (while articles 577 (while articles
602 (gnus-summary-set-process-mark (car articles)) 578 (gnus-summary-set-process-mark (car articles))
603 (setq articles (cdr articles))) 579 (setq articles (cdr articles)))
604 (message "")) 580 (message "Marked %d articles" l))
605 (gnus-summary-position-point)) 581 (gnus-summary-position-point))
606 582
607 (defun gnus-uu-mark-region (beg end &optional unmark) 583 (defun gnus-uu-mark-region (beg end &optional unmark)
608 "Set the process mark on all articles between point and mark." 584 "Set the process mark on all articles between point and mark."
609 (interactive "r") 585 (interactive "r")
860 (erase-buffer) 836 (erase-buffer)
861 (insert (format 837 (insert (format
862 "Date: %s\nFrom: %s\nSubject: %s Digest\n\n" 838 "Date: %s\nFrom: %s\nSubject: %s Digest\n\n"
863 (current-time-string) name name)) 839 (current-time-string) name name))
864 (when (and message-forward-as-mime gnus-uu-digest-buffer) 840 (when (and message-forward-as-mime gnus-uu-digest-buffer)
865 ;; The default part in multipart/digest is message/rfc822. 841 (insert "<#part type=message/rfc822>\nSubject: Topics\n\n"))
866 ;; Subject is a fake head.
867 (insert "<#part type=text/plain>\nSubject: Topics\n\n"))
868 (insert "Topics:\n"))) 842 (insert "Topics:\n")))
869 (when (not (eq in-state 'end)) 843 (when (not (eq in-state 'end))
870 (setq state (list 'middle)))) 844 (setq state (list 'middle))))
871 (save-excursion 845 (save-excursion
872 (set-buffer "*gnus-uu-body*") 846 (set-buffer "*gnus-uu-body*")
894 (delete-char 1) 868 (delete-char 1)
895 (insert "- ")))) 869 (insert "- "))))
896 (setq body (buffer-substring (1- (point)) (point-max))) 870 (setq body (buffer-substring (1- (point)) (point-max)))
897 (narrow-to-region (point-min) (point)) 871 (narrow-to-region (point-min) (point))
898 (if (not (setq headers gnus-uu-digest-headers)) 872 (if (not (setq headers gnus-uu-digest-headers))
899 (setq sorthead (buffer-substring (point-min) (point-max))) 873 (setq sorthead (buffer-string))
900 (while headers 874 (while headers
901 (setq headline (car headers)) 875 (setq headline (car headers))
902 (setq headers (cdr headers)) 876 (setq headers (cdr headers))
903 (goto-char (point-min)) 877 (goto-char (point-min))
904 (while (re-search-forward headline nil t) 878 (while (re-search-forward headline nil t)
1114 1088
1115 (goto-char 1) 1089 (goto-char 1)
1116 (while (re-search-forward "[ \t]+" nil t) 1090 (while (re-search-forward "[ \t]+" nil t)
1117 (replace-match "[ \t]+" t t)) 1091 (replace-match "[ \t]+" t t))
1118 1092
1119 (buffer-substring (point-min) (point-max)))) 1093 (buffer-string)))
1120 1094
1121 (defun gnus-uu-get-list-of-articles (n) 1095 (defun gnus-uu-get-list-of-articles (n)
1122 ;; If N is non-nil, the article numbers of the N next articles 1096 ;; If N is non-nil, the article numbers of the N next articles
1123 ;; will be returned. 1097 ;; will be returned.
1124 ;; If any articles have been marked as processable, they will be 1098 ;; If any articles have been marked as processable, they will be
1206 (while (re-search-forward "[A-Za-z]" nil t) 1180 (while (re-search-forward "[A-Za-z]" nil t)
1207 (replace-match "a" t t))) 1181 (replace-match "a" t t)))
1208 ;; Expand numbers. 1182 ;; Expand numbers.
1209 (goto-char (point-min)) 1183 (goto-char (point-min))
1210 (while (re-search-forward "[0-9]+" nil t) 1184 (while (re-search-forward "[0-9]+" nil t)
1211 (replace-match 1185 (ignore-errors
1212 (format "%06d" 1186 (replace-match
1213 (string-to-int (buffer-substring 1187 (format "%06d"
1214 (match-beginning 0) (match-end 0)))))) 1188 (string-to-int (buffer-substring
1215 (setq string (buffer-substring (point-min) (point-max))) 1189 (match-beginning 0) (match-end 0)))))))
1190 (setq string (buffer-substring 1 (point-max)))
1216 (setcar (car string-list) string) 1191 (setcar (car string-list) string)
1217 (setq string-list (cdr string-list)))) 1192 (setq string-list (cdr string-list))))
1218 out-list)) 1193 out-list))
1219 1194
1220 1195
1375 (memq 'middle process-state))) 1350 (memq 'middle process-state)))
1376 (progn 1351 (progn
1377 (setq process-state (list 'error)) 1352 (setq process-state (list 'error))
1378 (gnus-message 2 "No begin part at the beginning") 1353 (gnus-message 2 "No begin part at the beginning")
1379 (sleep-for 2)) 1354 (sleep-for 2))
1380 (setq state 'middle))) 1355 (setq state 'middle))))
1381 1356
1382 ;; When there are no result-files, then something must be wrong. 1357 ;; When there are no result-files, then something must be wrong.
1383 (if result-files 1358 (if result-files
1384 (message "") 1359 (message "")
1385 (cond 1360 (cond
1386 ((not has-been-begin) 1361 ((not has-been-begin)
1387 (gnus-message 2 "Wrong type file")) 1362 (gnus-message 2 "Wrong type file"))
1388 ((memq 'error process-state) 1363 ((memq 'error process-state)
1389 (gnus-message 2 "An error occurred during decoding")) 1364 (gnus-message 2 "An error occurred during decoding"))
1390 ((not (or (memq 'ok process-state) 1365 ((not (or (memq 'ok process-state)
1391 (memq 'end process-state))) 1366 (memq 'end process-state)))
1392 (gnus-message 2 "End of articles reached before end of file"))) 1367 (gnus-message 2 "End of articles reached before end of file")))
1393 ;; Make unsuccessfully decoded articles unread. 1368 ;; Make unsuccessfully decoded articles unread.
1394 (when gnus-uu-unmark-articles-not-decoded 1369 (when gnus-uu-unmark-articles-not-decoded
1395 (while article-series 1370 (while article-series
1396 (gnus-summary-tick-article (pop article-series) t))))) 1371 (gnus-summary-tick-article (pop article-series) t))))
1397 1372
1398 ;; The original article buffer is hosed, shoot it down. 1373 ;; The original article buffer is hosed, shoot it down.
1399 (gnus-kill-buffer gnus-original-article-buffer) 1374 (gnus-kill-buffer gnus-original-article-buffer)
1400 1375 (setq gnus-current-article nil)
1401 result-files)) 1376 result-files))
1402 1377
1403 (defun gnus-uu-grab-view (file) 1378 (defun gnus-uu-grab-view (file)
1404 "View FILE using the gnus-uu methods." 1379 "View FILE using the gnus-uu methods."
1405 (let ((action (gnus-uu-get-action file))) 1380 (let ((action (gnus-uu-get-action file)))
1461 (if (not (looking-at gnus-uu-begin-string)) 1436 (if (not (looking-at gnus-uu-begin-string))
1462 (setq state (list 'middle)) 1437 (setq state (list 'middle))
1463 ;; This is the beginning of a uuencoded article. 1438 ;; This is the beginning of a uuencoded article.
1464 ;; We replace certain characters that could make things messy. 1439 ;; We replace certain characters that could make things messy.
1465 (setq gnus-uu-file-name 1440 (setq gnus-uu-file-name
1466 (let ((nnheader-file-name-translation-alist 1441 (gnus-map-function
1467 '((?/ . ?,) (? . ?_) (?* . ?_) (?$ . ?_)))) 1442 mm-file-name-rewrite-functions
1468 (nnheader-translate-file-chars (match-string 1)))) 1443 (file-name-nondirectory (match-string 1))))
1469 (replace-match (concat "begin 644 " gnus-uu-file-name) t t) 1444 (replace-match (concat "begin 644 " gnus-uu-file-name) t t)
1470 1445
1471 ;; Remove any non gnus-uu-body-line right after start. 1446 ;; Remove any non gnus-uu-body-line right after start.
1472 (forward-line 1) 1447 (forward-line 1)
1473 (while (and (not (eobp)) 1448 (while (and (not (eobp))
1474 (not (looking-at gnus-uu-body-line))) 1449 (not (looking-at gnus-uu-body-line)))
1653 (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name)) 1628 (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
1654 (erase-buffer)) 1629 (erase-buffer))
1655 1630
1656 (gnus-message 5 "Unpacking: %s..." (gnus-uu-command action file-path)) 1631 (gnus-message 5 "Unpacking: %s..." (gnus-uu-command action file-path))
1657 1632
1658 (if (= 0 (call-process shell-file-name nil 1633 (if (eq 0 (call-process shell-file-name nil
1659 (gnus-get-buffer-create gnus-uu-output-buffer-name) 1634 (gnus-get-buffer-create gnus-uu-output-buffer-name)
1660 nil shell-command-switch command)) 1635 nil shell-command-switch command))
1661 (message "") 1636 (message "")
1662 (gnus-message 2 "Error during unpacking of archive") 1637 (gnus-message 2 "Error during unpacking of archive")
1663 (setq did-unpack nil)) 1638 (setq did-unpack nil))
1818 (while (setq file (pop files)) 1793 (while (setq file (pop files))
1819 (unless (member (file-name-nondirectory file) '("." "..")) 1794 (unless (member (file-name-nondirectory file) '("." ".."))
1820 (if (file-directory-p file) 1795 (if (file-directory-p file)
1821 (gnus-uu-delete-work-dir file) 1796 (gnus-uu-delete-work-dir file)
1822 (gnus-message 9 "Deleting file %s..." file) 1797 (gnus-message 9 "Deleting file %s..." file)
1823 (delete-file file)))) 1798 (condition-case err
1824 (delete-directory dir))) 1799 (delete-file file)
1825 (gnus-message 7 "")) 1800 (error (gnus-message 3 "Deleting file %s failed... %s" file err))))))
1801 (condition-case err
1802 (delete-directory dir)
1803 (error (gnus-message 3 "Deleting directory %s failed... %s" file err))))
1804 (gnus-message 7 "")))
1826 1805
1827 ;; Initializing 1806 ;; Initializing
1828 1807
1829 (add-hook 'gnus-exit-group-hook 'gnus-uu-clean-up) 1808 (add-hook 'gnus-exit-group-hook 'gnus-uu-clean-up)
1830 (add-hook 'gnus-exit-group-hook 'gnus-uu-delete-work-dir) 1809 (add-hook 'gnus-exit-group-hook 'gnus-uu-delete-work-dir)
1898 (gnus-summary-post-news) 1877 (gnus-summary-post-news)
1899 1878
1900 (let ((map (make-sparse-keymap))) 1879 (let ((map (make-sparse-keymap)))
1901 (set-keymap-parent map (current-local-map)) 1880 (set-keymap-parent map (current-local-map))
1902 (use-local-map map)) 1881 (use-local-map map))
1903 (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done) 1882 ;;(local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
1904 (local-set-key "\C-c\C-c" 'gnus-uu-post-news-inews) 1883 (local-set-key "\C-c\C-c" 'gnus-uu-post-news-inews)
1905 (local-set-key "\C-c\C-s" 'gnus-uu-post-news-inews) 1884 (local-set-key "\C-c\C-s" 'gnus-uu-post-news-inews)
1906 (local-set-key "\C-c\C-i" 'gnus-uu-post-insert-binary-in-article) 1885 (local-set-key "\C-c\C-i" 'gnus-uu-post-insert-binary-in-article)
1907 1886
1908 (when gnus-uu-post-include-before-composing 1887 (when gnus-uu-post-include-before-composing
1931 (gnus-uu-post-make-mime file-name "x-uue") 1910 (gnus-uu-post-make-mime file-name "x-uue")
1932 t)) 1911 t))
1933 1912
1934 ;; Encodes with base64 and adds MIME headers 1913 ;; Encodes with base64 and adds MIME headers
1935 (defun gnus-uu-post-encode-mime (path file-name) 1914 (defun gnus-uu-post-encode-mime (path file-name)
1936 (when (zerop (call-process shell-file-name nil t nil shell-command-switch 1915 (when (eq 0 (call-process shell-file-name nil t nil shell-command-switch
1937 (format "%s %s -o %s" "mmencode" path file-name))) 1916 (format "%s %s -o %s" "mmencode" path file-name)))
1938 (gnus-uu-post-make-mime file-name "base64") 1917 (gnus-uu-post-make-mime file-name "base64")
1939 t)) 1918 t))
1940 1919
1941 ;; Adds MIME headers. 1920 ;; Adds MIME headers.
1942 (defun gnus-uu-post-make-mime (file-name encoding) 1921 (defun gnus-uu-post-make-mime (file-name encoding)
1957 (widen))) 1936 (widen)))
1958 1937
1959 ;; Encodes a file PATH with COMMAND, leaving the result in the 1938 ;; Encodes a file PATH with COMMAND, leaving the result in the
1960 ;; current buffer. 1939 ;; current buffer.
1961 (defun gnus-uu-post-encode-file (command path file-name) 1940 (defun gnus-uu-post-encode-file (command path file-name)
1962 (= 0 (call-process shell-file-name nil t nil shell-command-switch 1941 (eq 0 (call-process shell-file-name nil t nil shell-command-switch
1963 (format "%s %s %s" command path file-name)))) 1942 (format "%s %s %s" command path file-name))))
1964 1943
1965 (defun gnus-uu-post-news-inews () 1944 (defun gnus-uu-post-news-inews ()
1966 "Posts the composed news article and encoded file. 1945 "Posts the composed news article and encoded file.
1967 If no file has been included, the user will be asked for a file." 1946 If no file has been included, the user will be asked for a file."
1968 (interactive) 1947 (interactive)