;; You should have received a copy of the GNU General Public License
;; along with mymail. If not, see <http://www.gnu.org/licenses/>.
+(add-to-list 'recentf-exclude "/tmp/mymail-vm-.*\.mbox")
+
+(defcustom mymail/default-search-request ""
+ "Default request to add to any search"
+ :type 'string)
+
(defun mymail/vm-visit-folder (param)
- (interactive (list (read-string "mymail-vm search: " nil 'mymail-vm-history)))
-
- (let ((args (mapconcat (lambda (x) (concat "-s " "\"" x "\""))
- (split-string param ",")
- " ")))
- (shell-command (concat "mymail " args " > /tmp/mymail.mbox"))
- )
- (vm-visit-folder "/tmp/mymail.mbox")
- )
+ "Read a comma-separated list of search requests for mymail,
+create a temporary mbox with the resulting mails, and open it in
+vm with `vm-visit-folder'.
+
+The string `mymail/default-search-request' is automatically
+concatenated to the provided request, except if the request is
+prefaced with \\."
+ (interactive
+ (list (read-string "mymail-vm: " nil 'mymail-vm-history)))
+
+ (let ((n 1)
+ (mbox-name nil)
+
+ (search-args
+
+ (apply 'nconc
+ (mapcar
+ (lambda (searche-request)
+ (if (not (string= searche-request ""))
+ (list "-s" searche-request)))
+ (if (string= (substring param 0 1) "\\")
+ (split-string (substring param 1 nil) ",")
+ (split-string (concat param "," mymail/default-search-request) ","))
+ )))
+
+ )
+
+ (while (get-file-buffer (setq mbox-name (format "/tmp/mymail-vm-%d.mbox" n)))
+ (setq n (+ n 1)))
+
+ (if (= (apply 'call-process
+ (nconc (list "mymail" nil nil nil
+ "--output" mbox-name
+ "--default-search" "p")
+ search-args))
+ 0)
+ (vm-visit-folder mbox-name t)
+ (message "mymail failed"))
+ ))