Mercurial > hg > xemacs-beta
comparison lisp/vm/vm-save.el @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | 05472e90ae02 |
children | 0d2f883870bc |
comparison
equal
deleted
inserted
replaced
69:804d1389bcd6 | 70:131b0175ea99 |
---|---|
33 (condition-case error-data | 33 (condition-case error-data |
34 (catch 'match | 34 (catch 'match |
35 (let (header alist tuple-list) | 35 (let (header alist tuple-list) |
36 (setq alist auto-folder-alist) | 36 (setq alist auto-folder-alist) |
37 (while alist | 37 (while alist |
38 (setq header (vm-get-header-contents (car mp) (car (car alist)) | 38 (setq header (vm-get-header-contents (car mp) (car (car alist)))) |
39 ", ")) | |
40 (if (null header) | 39 (if (null header) |
41 () | 40 () |
42 (setq tuple-list (cdr (car alist))) | 41 (setq tuple-list (cdr (car alist))) |
43 (while tuple-list | 42 (while tuple-list |
44 (if (let ((case-fold-search vm-auto-folder-case-fold-search)) | 43 (if (let ((case-fold-search vm-auto-folder-case-fold-search)) |
96 The saved messages are flagged as `filed'." | 95 The saved messages are flagged as `filed'." |
97 (interactive "P") | 96 (interactive "P") |
98 (vm-select-folder-buffer) | 97 (vm-select-folder-buffer) |
99 (vm-check-for-killed-summary) | 98 (vm-check-for-killed-summary) |
100 (vm-error-if-folder-empty) | 99 (vm-error-if-folder-empty) |
101 (message "Archiving...") | 100 (vm-unsaved-message "Archiving...") |
102 (let ((auto-folder) | 101 (let ((auto-folder) |
103 (archived 0)) | 102 (archived 0)) |
104 (unwind-protect | 103 (unwind-protect |
105 ;; Need separate (let ...) so vm-message-pointer can | 104 ;; Need separate (let ...) so vm-message-pointer can |
106 ;; revert back in time for | 105 ;; revert back in time for |
130 (y-or-n-p | 129 (y-or-n-p |
131 (format "Save message %s in folder %s? " | 130 (format "Save message %s in folder %s? " |
132 (vm-number-of (car vm-message-pointer)) | 131 (vm-number-of (car vm-message-pointer)) |
133 auto-folder))) | 132 auto-folder))) |
134 (let ((vm-delete-after-saving vm-delete-after-archiving)) | 133 (let ((vm-delete-after-saving vm-delete-after-archiving)) |
135 (vm-save-message auto-folder) | 134 (if (not (string-equal auto-folder "/dev/null")) |
135 (vm-save-message auto-folder)) | |
136 (vm-increment archived) | 136 (vm-increment archived) |
137 (message "%d archived, still working..." archived))) | 137 (vm-unsaved-message "%d archived, still working..." |
138 archived))) | |
138 (setq done (eq vm-message-pointer stop-point) | 139 (setq done (eq vm-message-pointer stop-point) |
139 vm-message-pointer (cdr vm-message-pointer)))) | 140 vm-message-pointer (cdr vm-message-pointer)))) |
140 ;; fix mode line | 141 ;; fix mode line |
141 (intern (buffer-name) vm-buffers-needing-display-update) | 142 (intern (buffer-name) vm-buffers-needing-display-update) |
142 (vm-update-summary-and-mode-line)) | 143 (vm-update-summary-and-mode-line)) |
143 (if (zerop archived) | 144 (if (zerop archived) |
144 (message "No messages were archived") | 145 (message "No messages archived") |
145 (message "%d message%s archived" | 146 (message "%d message%s archived" |
146 archived (if (= 1 archived) "" "s"))))) | 147 archived (if (= 1 archived) "" "s"))))) |
147 | 148 |
148 (defun vm-save-message (folder &optional count) | 149 (defun vm-save-message (folder &optional count) |
149 "Save the current message to a mail folder. | 150 "Save the current message to a mail folder. |
430 (buffer-name file-buffer)) | 431 (buffer-name file-buffer)) |
431 (message "Message%s written to %s" (if (/= 1 count) "s" "") file))) | 432 (message "Message%s written to %s" (if (/= 1 count) "s" "") file))) |
432 (setq vm-last-written-file file))) | 433 (setq vm-last-written-file file))) |
433 | 434 |
434 (defun vm-pipe-message-to-command (command prefix-arg) | 435 (defun vm-pipe-message-to-command (command prefix-arg) |
435 "Runs a shell command with some or all of the contents of the | 436 "Run shell command with the some or all of the current message as input. |
436 current message as input. | 437 By default the entire message is used. |
437 By default, the entire message is used. | |
438 With one \\[universal-argument] the text portion of the message is used. | 438 With one \\[universal-argument] the text portion of the message is used. |
439 With two \\[universal-argument]'s the header portion of the message is used. | 439 With two \\[universal-argument]'s the header portion of the message is used. |
440 With three \\[universal-argument]'s the visible header portion of the message | 440 With three \\[universal-argument]'s the visible header portion of the message |
441 plus the text portion is used. | 441 plus the text portion is used. |
442 | 442 |
484 (narrow-to-region (vm-vheaders-of m) (vm-text-end-of m))) | 484 (narrow-to-region (vm-vheaders-of m) (vm-text-end-of m))) |
485 (t (narrow-to-region (point) (vm-text-end-of m)))) | 485 (t (narrow-to-region (point) (vm-text-end-of m)))) |
486 (let ((pop-up-windows (and pop-up-windows (eq vm-mutable-windows t)))) | 486 (let ((pop-up-windows (and pop-up-windows (eq vm-mutable-windows t)))) |
487 (call-process-region (point-min) (point-max) | 487 (call-process-region (point-min) (point-max) |
488 (or shell-file-name "sh") | 488 (or shell-file-name "sh") |
489 nil buffer nil shell-command-switch command))) | 489 nil buffer nil "-c" command))) |
490 (setq mlist (cdr mlist))) | 490 (setq mlist (cdr mlist))) |
491 (set-buffer buffer) | 491 (set-buffer buffer) |
492 (if (not (zerop (buffer-size))) | 492 (if (not (zerop (buffer-size))) |
493 (vm-display buffer t '(vm-pipe-message-to-command) | 493 (vm-display buffer t '(vm-pipe-message-to-command) |
494 '(vm-pipe-message-to-command)) | 494 '(vm-pipe-message-to-command)) |
495 (vm-display nil nil '(vm-pipe-message-to-command) | 495 (vm-display nil nil '(vm-pipe-message-to-command) |
496 '(vm-pipe-message-to-command))))) | 496 '(vm-pipe-message-to-command))))) |
497 | 497 |
498 (defun vm-print-message (&optional count) | 498 (defun vm-print-message () |
499 "Print the current message | 499 "Print the current message." |
500 Prefix arg N means print the current message and the next N - 1 messages. | 500 (interactive) |
501 Prefix arg -N means print the current message and the previous N - 1 messages. | 501 (vm-pipe-message-to-command |
502 | 502 (mapconcat (function identity) |
503 The variable `vm-print-command' controls what command is run to | 503 (nconc (list vm-print-command) vm-print-command-switches) |
504 print the message, and `vm-print-command-switches' is a list of switches | 504 " ") |
505 to pass to the command. | 505 '(64))) |
506 | 506 |
507 When invoked on marked messages (via vm-next-command-uses-marks), | |
508 each marked message is printed, one message per vm-print-command invocation. | |
509 | |
510 Output, if any, is displayed. The message is not altered." | |
511 (interactive "p") | |
512 (vm-follow-summary-cursor) | |
513 (vm-select-folder-buffer) | |
514 (vm-check-for-killed-summary) | |
515 (vm-error-if-folder-empty) | |
516 (or count (setq count 1)) | |
517 (let ((buffer (get-buffer-create "*Shell Command Output*")) | |
518 (command (mapconcat (function identity) | |
519 (nconc (list vm-print-command) | |
520 vm-print-command-switches) | |
521 " ")) | |
522 (m nil) | |
523 (pop-up-windows (and pop-up-windows (eq vm-mutable-windows t))) | |
524 (mlist (vm-select-marked-or-prefixed-messages count))) | |
525 (set-buffer buffer) | |
526 (erase-buffer) | |
527 (while mlist | |
528 (setq m (vm-real-message-of (car mlist))) | |
529 (set-buffer (vm-buffer-of m)) | |
530 (if (and vm-display-using-mime (vectorp (vm-mm-layout m))) | |
531 (let ((work-buffer nil)) | |
532 (unwind-protect | |
533 (progn | |
534 (setq work-buffer (generate-new-buffer "*vm-work*")) | |
535 (set-buffer work-buffer) | |
536 (vm-insert-region-from-buffer | |
537 (vm-buffer-of m) (vm-vheaders-of m) (vm-text-of m)) | |
538 (vm-decode-mime-encoded-words) | |
539 (goto-char (point-max)) | |
540 (let ((vm-auto-displayed-mime-content-types | |
541 '("text" "multipart")) | |
542 (vm-mime-internal-content-types | |
543 '("text" "multipart")) | |
544 (vm-mime-external-content-types-alist nil)) | |
545 (vm-decode-mime-layout (vm-mm-layout m))) | |
546 (let ((pop-up-windows (and pop-up-windows | |
547 (eq vm-mutable-windows t)))) | |
548 (call-process-region (point-min) (point-max) | |
549 (or shell-file-name "sh") | |
550 nil buffer nil | |
551 shell-command-switch command))) | |
552 (and work-buffer (kill-buffer work-buffer)))) | |
553 (save-restriction | |
554 (widen) | |
555 (narrow-to-region (vm-vheaders-of m) (vm-text-end-of m)) | |
556 (let ((pop-up-windows (and pop-up-windows | |
557 (eq vm-mutable-windows t)))) | |
558 (call-process-region (point-min) (point-max) | |
559 (or shell-file-name "sh") | |
560 nil buffer nil | |
561 shell-command-switch command)))) | |
562 (setq mlist (cdr mlist))) | |
563 (set-buffer buffer) | |
564 (if (not (zerop (buffer-size))) | |
565 (vm-display buffer t '(vm-pipe-message-to-command) | |
566 '(vm-pipe-message-to-command)) | |
567 (vm-display nil nil '(vm-pipe-message-to-command) | |
568 '(vm-pipe-message-to-command))))) |