diff lisp/vm/vm-mark.el @ 20:859a2309aef8 r19-15b93

Import from CVS: tag r19-15b93
author cvs
date Mon, 13 Aug 2007 08:50:05 +0200
parents 376386a54a3c
children 441bb1e64a06
line wrap: on
line diff
--- a/lisp/vm/vm-mark.el	Mon Aug 13 08:49:44 2007 +0200
+++ b/lisp/vm/vm-mark.el	Mon Aug 13 08:50:05 2007 +0200
@@ -98,6 +98,61 @@
 	      '(vm-unmark-message marking-message))
   (vm-update-summary-and-mode-line))
 
+(defun vm-mark-summary-region ()
+  "Mark all messages with summary lines contained in the region."
+  (interactive)
+  (vm-select-folder-buffer)
+  (vm-check-for-killed-summary)
+  (vm-error-if-folder-empty)
+  (if (null vm-summary-buffer)
+      (error "No summary."))
+  (set-buffer vm-summary-buffer)
+  (if (not (mark))
+      (error "The region is not active now"))
+  (vm-mark-or-unmark-summary-region t)
+  (vm-display nil nil '(vm-mark-summary-region)
+	      '(vm-mark-summary-region marking-message))
+  (vm-update-summary-and-mode-line))
+
+(defun vm-unmark-summary-region ()
+  "Remove marks from messages with summary lines contained in the region."
+  (interactive)
+  (vm-select-folder-buffer)
+  (vm-check-for-killed-summary)
+  (vm-error-if-folder-empty)
+  (if (null vm-summary-buffer)
+      (error "No summary."))
+  (set-buffer vm-summary-buffer)
+  (if (not (mark))
+      (error "The region is not active now"))
+  (vm-mark-or-unmark-summary-region nil)
+  (vm-display nil nil '(vm-unmark-summary-region)
+	      '(vm-unmark-summary-region marking-message))
+  (vm-update-summary-and-mode-line))
+
+(defun vm-mark-or-unmark-summary-region (markit)
+  ;; The folder buffers copy of vm-message-list has already been
+  ;; propagated to the summary buffer.
+  (let ((mp vm-message-list)
+	(beg (point))
+	(end (mark))
+	tmp m)
+    (if (> beg end)
+	(setq tmp beg beg end end tmp))
+    (while mp
+      (setq m (car mp))
+      (if (not (eq (not markit) (not (vm-mark-of m))))
+	  (if (or (and (>  (vm-su-end-of m) beg)
+		       (<  (vm-su-end-of m) end))
+		  (and (>= (vm-su-start-of m) beg)
+		       (<  (vm-su-start-of m) end))
+		  (and (>= beg (vm-su-start-of m))
+		       (<  beg (vm-su-end-of m))))
+	      (progn
+		(vm-set-mark-of m markit)
+		(vm-mark-for-summary-update m t))))
+      (setq mp (cdr mp)))))
+
 (defun vm-mark-or-unmark-messages-with-selector (val selector arg)
   (let ((mlist vm-message-list)
 	(virtual (eq major-mode 'vm-virtual-mode))