;; Copyright (c) 2013 Francois Fleuret ;; Written by Francois Fleuret ;; ;; This file is part of mymail. ;; ;; mymail is free software: you can redistribute it and/or modify it ;; under the terms of the GNU General Public License version 3 as ;; published by the Free Software Foundation. ;; ;; mymail is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with mymail. If not, see . ;; You may want to add ;; ;; (add-to-list 'recentf-exclude "/tmp/mymail-vm-.*\.mbox") ;; ;; to your .emacs ;; ;; I also use ;; ;; (define-key vm-summary-mode-map "\\" 'mymail/vm-visit-folder) ;; ;; So that pressing "\" in the summary start a search with mymail (defgroup mymail () "Command to visit a folder built on-the-fly with mymail" :version "0.9.10") (defcustom mymail/default-additional-search-requests "" "Comma-separated list of search requests to add to any search" :type 'string :group 'mymail) (defcustom mymail/default-search-request nil "Default request to use in place of the empty search" :type 'string :group 'mymail) (defun mymail/vm-visit-folder (param) "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'. If the request string is empty, use `mymail/default-search-request' instead. The string `mymail/default-additional-search-requests' is automatically concatenated to the provided request, except if the request is prefaced with `\\'." (interactive (list (read-string "mymail-vm: " nil 'mymail-vm-history))) (if (string= param "") (if mymail/default-search-request (setq param mymail/default-search-request) (error "mymail error: empty search"))) (let ((n 1) (mbox-name nil) (search-args (apply 'nconc (mapcar (lambda (searche-request) (if (not (string= searche-request "")) (list "--search" searche-request))) (if (string= (substring param 0 1) "\\") (split-string (substring param 1 nil) ",") (split-string (concat param "," mymail/default-additional-search-requests) ",")) ))) ) (while (get-file-buffer (setq mbox-name (format "/tmp/mymail-vm-%d.mbox" n))) (setq n (+ n 1))) ;; (message (prin1-to-string ;; (nconc (list "mymail" ;; "--output" mbox-name ;; "--default-search" "p" ;; "--nb-mails-max" "500") ;; search-args)) ;; ) (if (= (apply 'call-process (nconc (list "mymail" nil '(nil "/tmp/mymail.err") nil "--output" mbox-name "--default-search" "p" "--nb-mails-max" "500") search-args)) 0) (vm-visit-folder mbox-name t) ;; (message "mymail failed. See /tmp/mymail.err")) (message (with-temp-buffer (insert-file-contents "/tmp/mymail.err") (replace-string "\n" " ") (buffer-string))) ) ))