comparison lisp/gnus/gnus-art.el @ 42:8b8b7f3559a2 r19-15b104

Import from CVS: tag r19-15b104
author cvs
date Mon, 13 Aug 2007 08:54:51 +0200
parents c53a95d3c46d
children
comparison
equal deleted inserted replaced
41:5d6df4963a99 42:8b8b7f3559a2
321 LAST-FILE." 321 LAST-FILE."
322 :group 'gnus-article-saving 322 :group 'gnus-article-saving
323 :type 'function) 323 :type 'function)
324 324
325 (defcustom gnus-split-methods 325 (defcustom gnus-split-methods
326 '((gnus-article-archive-name)) 326 '((gnus-article-archive-name)
327 (gnus-article-nndoc-name))
327 "Variable used to suggest where articles are to be saved. 328 "Variable used to suggest where articles are to be saved.
328 For instance, if you would like to save articles related to Gnus in 329 For instance, if you would like to save articles related to Gnus in
329 the file \"gnus-stuff\", and articles related to VM in \"vm-stuff\", 330 the file \"gnus-stuff\", and articles related to VM in \"vm-stuff\",
330 you could set this variable to something like: 331 you could set this variable to something like:
331 332
1391 (when (eq gnus-prompt-before-saving t) 1392 (when (eq gnus-prompt-before-saving t)
1392 num))) ; Magic 1393 num))) ; Magic
1393 (set-buffer gnus-summary-buffer) 1394 (set-buffer gnus-summary-buffer)
1394 (funcall gnus-default-article-saver filename))))) 1395 (funcall gnus-default-article-saver filename)))))
1395 1396
1396 (defun gnus-read-save-file-name (prompt default-name &optional filename) 1397 (defun gnus-read-save-file-name (prompt &optional filename
1397 (cond 1398 function group headers variable)
1398 ((eq filename 'default) 1399 (let ((default-name (funcall function group headers
1399 default-name) 1400 (symbol-value variable)))
1400 (filename filename) 1401 result)
1401 (t 1402 (setq
1402 (let* ((split-name (gnus-get-split-value gnus-split-methods)) 1403 result
1403 (prompt 1404 (cond
1404 (format prompt (if (and gnus-number-of-articles-to-be-saved 1405 ((eq filename 'default)
1405 (> gnus-number-of-articles-to-be-saved 1)) 1406 default-name)
1406 (format "these %d articles" 1407 (filename filename)
1407 gnus-number-of-articles-to-be-saved) 1408 (t
1408 "this article"))) 1409 (let* ((split-name (gnus-get-split-value gnus-split-methods))
1409 (file 1410 (prompt
1410 ;; Let the split methods have their say. 1411 (format prompt
1411 (cond 1412 (if (and gnus-number-of-articles-to-be-saved
1412 ;; No split name was found. 1413 (> gnus-number-of-articles-to-be-saved 1))
1413 ((null split-name) 1414 (format "these %d articles"
1414 (read-file-name 1415 gnus-number-of-articles-to-be-saved)
1415 (concat prompt " (default " 1416 "this article")))
1416 (file-name-nondirectory default-name) ") ") 1417 (file
1417 (file-name-directory default-name) 1418 ;; Let the split methods have their say.
1418 default-name)) 1419 (cond
1419 ;; A single split name was found 1420 ;; No split name was found.
1420 ((= 1 (length split-name)) 1421 ((null split-name)
1421 (let* ((name (car split-name)) 1422 (read-file-name
1422 (dir (cond ((file-directory-p name) 1423 (concat prompt " (default "
1423 (file-name-as-directory name)) 1424 (file-name-nondirectory default-name) ") ")
1424 ((file-exists-p name) name) 1425 (file-name-directory default-name)
1425 (t gnus-article-save-directory)))) 1426 default-name))
1426 (read-file-name 1427 ;; A single group name is returned.
1427 (concat prompt " (default " name ") ") 1428 ((stringp split-name)
1428 dir name))) 1429 (setq default-name
1429 ;; A list of splits was found. 1430 (funcall function split-name headers
1430 (t 1431 (symbol-value variable)))
1431 (setq split-name (nreverse split-name)) 1432 (read-file-name
1432 (let (result) 1433 (concat prompt " (default "
1433 (let ((file-name-history (nconc split-name file-name-history))) 1434 (file-name-nondirectory default-name) ") ")
1434 (setq result 1435 (file-name-directory default-name)
1435 (expand-file-name 1436 default-name))
1436 (read-file-name 1437 ;; A single split name was found
1437 (concat prompt " (`M-p' for defaults) ") 1438 ((= 1 (length split-name))
1438 gnus-article-save-directory 1439 (let* ((name (car split-name))
1439 (car split-name)) 1440 (dir (cond ((file-directory-p name)
1440 gnus-article-save-directory))) 1441 (file-name-as-directory name))
1441 (car (push result file-name-history))))))) 1442 ((file-exists-p name) name)
1442 ;; Create the directory. 1443 (t gnus-article-save-directory))))
1443 (gnus-make-directory (file-name-directory file)) 1444 (read-file-name
1444 ;; If we have read a directory, we append the default file name. 1445 (concat prompt " (default " name ") ")
1445 (when (file-directory-p file) 1446 dir name)))
1446 (setq file (concat (file-name-as-directory file) 1447 ;; A list of splits was found.
1447 (file-name-nondirectory default-name)))) 1448 (t
1448 ;; Possibly translate some characters. 1449 (setq split-name (nreverse split-name))
1449 (nnheader-translate-file-chars file))))) 1450 (let (result)
1451 (let ((file-name-history
1452 (nconc split-name file-name-history)))
1453 (setq result
1454 (expand-file-name
1455 (read-file-name
1456 (concat prompt " (`M-p' for defaults) ")
1457 gnus-article-save-directory
1458 (car split-name))
1459 gnus-article-save-directory)))
1460 (car (push result file-name-history)))))))
1461 ;; Create the directory.
1462 (gnus-make-directory (file-name-directory file))
1463 ;; If we have read a directory, we append the default file name.
1464 (when (file-directory-p file)
1465 (setq file (concat (file-name-as-directory file)
1466 (file-name-nondirectory default-name))))
1467 ;; Possibly translate some characters.
1468 (nnheader-translate-file-chars file)))))
1469 (gnus-make-directory (file-name-directory result))
1470 (set variable result)))
1450 1471
1451 (defun gnus-article-archive-name (group) 1472 (defun gnus-article-archive-name (group)
1452 "Return the first instance of an \"Archive-name\" in the current buffer." 1473 "Return the first instance of an \"Archive-name\" in the current buffer."
1453 (let ((case-fold-search t)) 1474 (let ((case-fold-search t))
1454 (when (re-search-forward "archive-name: *\\([^ \n\t]+\\)[ \t]*$" nil t) 1475 (when (re-search-forward "archive-name: *\\([^ \n\t]+\\)[ \t]*$" nil t)
1455 (nnheader-concat gnus-article-save-directory 1476 (nnheader-concat gnus-article-save-directory
1456 (match-string 1))))) 1477 (match-string 1)))))
1457 1478
1479 (defun gnus-article-nndoc-name (group)
1480 "If GROUP is an nndoc group, return the name of the parent group."
1481 (when (eq (car (gnus-find-method-for-group group)) 'nndoc)
1482 (gnus-group-get-parameter group 'save-article-group)))
1483
1458 (defun gnus-summary-save-in-rmail (&optional filename) 1484 (defun gnus-summary-save-in-rmail (&optional filename)
1459 "Append this article to Rmail file. 1485 "Append this article to Rmail file.
1460 Optional argument FILENAME specifies file name. 1486 Optional argument FILENAME specifies file name.
1461 Directory to save to is default to `gnus-article-save-directory'." 1487 Directory to save to is default to `gnus-article-save-directory'."
1462 (interactive) 1488 (interactive)
1463 (gnus-set-global-variables) 1489 (gnus-set-global-variables)
1464 (let ((default-name 1490 (setq filename (gnus-read-save-file-name
1465 (funcall gnus-rmail-save-name gnus-newsgroup-name 1491 "Save %s in rmail file:" filename
1466 gnus-current-headers gnus-newsgroup-last-rmail))) 1492 gnus-rmail-save-name gnus-newsgroup-name
1467 (setq filename (gnus-read-save-file-name 1493 gnus-current-headers 'gnus-newsgroup-last-rmail))
1468 "Save %s in rmail file:" default-name filename)) 1494 (gnus-eval-in-buffer-window gnus-save-article-buffer
1469 (gnus-make-directory (file-name-directory filename)) 1495 (save-excursion
1470 (gnus-eval-in-buffer-window gnus-save-article-buffer 1496 (save-restriction
1471 (save-excursion 1497 (widen)
1472 (save-restriction 1498 (gnus-output-to-rmail filename)))))
1473 (widen)
1474 (gnus-output-to-rmail filename))))
1475 ;; Remember the directory name to save articles
1476 (setq gnus-newsgroup-last-rmail filename)))
1477 1499
1478 (defun gnus-summary-save-in-mail (&optional filename) 1500 (defun gnus-summary-save-in-mail (&optional filename)
1479 "Append this article to Unix mail file. 1501 "Append this article to Unix mail file.
1480 Optional argument FILENAME specifies file name. 1502 Optional argument FILENAME specifies file name.
1481 Directory to save to is default to `gnus-article-save-directory'." 1503 Directory to save to is default to `gnus-article-save-directory'."
1482 (interactive) 1504 (interactive)
1483 (gnus-set-global-variables) 1505 (gnus-set-global-variables)
1484 (let ((default-name 1506 (setq filename (gnus-read-save-file-name
1485 (funcall gnus-mail-save-name gnus-newsgroup-name 1507 "Save %s in Unix mail file:" filename
1486 gnus-current-headers gnus-newsgroup-last-mail))) 1508 gnus-mail-save-name gnus-newsgroup-name
1487 (setq filename (gnus-read-save-file-name 1509 gnus-current-headers 'gnus-newsgroup-last-mail))
1488 "Save %s in Unix mail file:" default-name filename)) 1510 (gnus-eval-in-buffer-window gnus-save-article-buffer
1489 (setq filename 1511 (save-excursion
1490 (expand-file-name filename 1512 (save-restriction
1491 (and default-name 1513 (widen)
1492 (file-name-directory default-name)))) 1514 (if (and (file-readable-p filename)
1493 (gnus-make-directory (file-name-directory filename)) 1515 (mail-file-babyl-p filename))
1494 (gnus-eval-in-buffer-window gnus-save-article-buffer 1516 (gnus-output-to-rmail filename t)
1495 (save-excursion 1517 (gnus-output-to-mail filename))))))
1496 (save-restriction
1497 (widen)
1498 (if (and (file-readable-p filename)
1499 (mail-file-babyl-p filename))
1500 (gnus-output-to-rmail filename t)
1501 (gnus-output-to-mail filename)))))
1502 ;; Remember the directory name to save articles.
1503 (setq gnus-newsgroup-last-mail filename)))
1504 1518
1505 (defun gnus-summary-save-in-file (&optional filename overwrite) 1519 (defun gnus-summary-save-in-file (&optional filename overwrite)
1506 "Append this article to file. 1520 "Append this article to file.
1507 Optional argument FILENAME specifies file name. 1521 Optional argument FILENAME specifies file name.
1508 Directory to save to is default to `gnus-article-save-directory'." 1522 Directory to save to is default to `gnus-article-save-directory'."
1509 (interactive) 1523 (interactive)
1510 (gnus-set-global-variables) 1524 (gnus-set-global-variables)
1511 (let ((default-name 1525 (setq filename (gnus-read-save-file-name
1512 (funcall gnus-file-save-name gnus-newsgroup-name 1526 "Save %s in file:" filename
1513 gnus-current-headers gnus-newsgroup-last-file))) 1527 gnus-file-save-name gnus-newsgroup-name
1514 (setq filename (gnus-read-save-file-name 1528 gnus-current-headers 'gnus-newsgroup-last-file))
1515 "Save %s in file:" default-name filename)) 1529 (gnus-eval-in-buffer-window gnus-save-article-buffer
1516 (gnus-make-directory (file-name-directory filename)) 1530 (save-excursion
1517 (gnus-eval-in-buffer-window gnus-save-article-buffer 1531 (save-restriction
1518 (save-excursion 1532 (widen)
1519 (save-restriction 1533 (when (and overwrite
1520 (widen) 1534 (file-exists-p filename))
1521 (when (and overwrite 1535 (delete-file filename))
1522 (file-exists-p filename)) 1536 (gnus-output-to-file filename)))))
1523 (delete-file filename))
1524 (gnus-output-to-file filename))))
1525 ;; Remember the directory name to save articles.
1526 (setq gnus-newsgroup-last-file filename)))
1527 1537
1528 (defun gnus-summary-write-to-file (&optional filename) 1538 (defun gnus-summary-write-to-file (&optional filename)
1529 "Write this article to a file. 1539 "Write this article to a file.
1530 Optional argument FILENAME specifies file name. 1540 Optional argument FILENAME specifies file name.
1531 The directory to save in defaults to `gnus-article-save-directory'." 1541 The directory to save in defaults to `gnus-article-save-directory'."
1536 "Append this article body to a file. 1546 "Append this article body to a file.
1537 Optional argument FILENAME specifies file name. 1547 Optional argument FILENAME specifies file name.
1538 The directory to save in defaults to `gnus-article-save-directory'." 1548 The directory to save in defaults to `gnus-article-save-directory'."
1539 (interactive) 1549 (interactive)
1540 (gnus-set-global-variables) 1550 (gnus-set-global-variables)
1541 (let ((default-name 1551 (setq filename (gnus-read-save-file-name
1542 (funcall gnus-file-save-name gnus-newsgroup-name 1552 "Save %s body in file:" filename
1543 gnus-current-headers gnus-newsgroup-last-file))) 1553 gnus-file-save-name gnus-newsgroup-name
1544 (setq filename (gnus-read-save-file-name 1554 gnus-current-headers 'gnus-newsgroup-last-file))
1545 "Save %s body in file:" default-name filename)) 1555 (gnus-eval-in-buffer-window gnus-save-article-buffer
1546 (gnus-make-directory (file-name-directory filename)) 1556 (save-excursion
1547 (gnus-eval-in-buffer-window gnus-save-article-buffer 1557 (save-restriction
1548 (save-excursion 1558 (widen)
1549 (save-restriction 1559 (goto-char (point-min))
1550 (widen) 1560 (when (search-forward "\n\n" nil t)
1551 (goto-char (point-min)) 1561 (narrow-to-region (point) (point-max)))
1552 (when (search-forward "\n\n" nil t) 1562 (gnus-output-to-file filename)))))
1553 (narrow-to-region (point) (point-max)))
1554 (gnus-output-to-file filename))))
1555 ;; Remember the directory name to save articles.
1556 (setq gnus-newsgroup-last-file filename)))
1557 1563
1558 (defun gnus-summary-save-in-pipe (&optional command) 1564 (defun gnus-summary-save-in-pipe (&optional command)
1559 "Pipe this article to subprocess." 1565 "Pipe this article to subprocess."
1560 (interactive) 1566 (interactive)
1561 (gnus-set-global-variables) 1567 (gnus-set-global-variables)