Convert consecutive FSF copyright years to ranges.
[bpt/emacs.git] / lisp / org / org-mhe.el
index 39fe6ae..ce01daa 100644 (file)
@@ -1,18 +1,19 @@
 ;;; org-mhe.el --- Support for links to MH-E messages from within Org-mode
 
-;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2011
+;;   Free Software Foundation, Inc.
 
 ;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 7.4
 ;;
 ;; This file is part of GNU Emacs.
 ;;
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,9 +21,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;;; Commentary:
@@ -73,6 +72,7 @@ supported by MH-E."
 (defvar mh-show-folder-buffer)
 (defvar mh-index-folder)
 (defvar mh-searcher)
+(defvar mh-search-regexp-builder)
 
 ;; Install the link type
 (org-add-link-type "mhe" 'org-mhe-open)
@@ -83,13 +83,22 @@ supported by MH-E."
   "Store a link to an MH-E folder or message."
   (when (or (equal major-mode 'mh-folder-mode)
            (equal major-mode 'mh-show-mode))
-    (let ((from (org-mhe-get-header "From:"))
-         (to (org-mhe-get-header "To:"))
-         (message-id (org-mhe-get-header "Message-Id:"))
-         (subject (org-mhe-get-header "Subject:"))
-         link desc)
+    (let* ((from (org-mhe-get-header "From:"))
+          (to (org-mhe-get-header "To:"))
+          (message-id (org-mhe-get-header "Message-Id:"))
+          (subject (org-mhe-get-header "Subject:"))
+          (date (org-mhe-get-header "Date:"))
+          (date-ts (and date (format-time-string
+                              (org-time-stamp-format t) (date-to-time date))))
+          (date-ts-ia (and date (format-time-string
+                                 (org-time-stamp-format t t)
+                                 (date-to-time date))))
+          link desc)
       (org-store-link-props :type "mh" :from from :to to
                            :subject subject :message-id message-id)
+      (when date
+       (org-add-link-props :date date :date-timestamp date-ts
+                           :date-timestamp-inactive date-ts-ia))
       (setq desc (org-email-link-description))
       (setq link (org-make-link "mhe:" (org-mhe-get-message-real-folder) "#"
                                (org-remove-angle-brackets message-id)))
@@ -111,20 +120,20 @@ supported by MH-E."
 So if you use sequences, it will now work."
   (save-excursion
     (let* ((folder
-            (if (equal major-mode 'mh-folder-mode)
-                mh-current-folder
-              ;; Refer to the show buffer
-              mh-show-folder-buffer))
-           (end-index
-            (if (boundp 'mh-index-folder)
-                (min (length mh-index-folder) (length folder))))
-           )
+           (if (equal major-mode 'mh-folder-mode)
+               mh-current-folder
+             ;; Refer to the show buffer
+             mh-show-folder-buffer))
+          (end-index
+           (if (boundp 'mh-index-folder)
+               (min (length mh-index-folder) (length folder))))
+          )
       ;; a simple test on mh-index-data does not work, because
       ;; mh-index-data is always nil in a show buffer.
       (if (and (boundp 'mh-index-folder)
-               (string= mh-index-folder (substring folder 0 end-index)))
-          (if (equal major-mode 'mh-show-mode)
-              (save-window-excursion
+              (string= mh-index-folder (substring folder 0 end-index)))
+         (if (equal major-mode 'mh-show-mode)
+             (save-window-excursion
                (let (pop-up-frames)
                  (when (buffer-live-p (get-buffer folder))
                    (progn
@@ -132,25 +141,25 @@ So if you use sequences, it will now work."
                      (org-mhe-get-message-folder-from-index)
                      )
                    )))
-            (org-mhe-get-message-folder-from-index)
-            )
-        folder
-        )
+           (org-mhe-get-message-folder-from-index)
+           )
+       folder
+       )
       )))
 
 (defun org-mhe-get-message-folder-from-index ()
-  "Return the name of the message folder in a index folder buffer."
+  "Return the name of the message folder in an index folder buffer."
   (save-excursion
     (mh-index-previous-folder)
-    (re-search-forward "^\\(+.*\\)$" nil t)
-    (message "%s" (match-string 1))))
+    (if (re-search-forward "^\\(+.*\\)$" nil t)
+       (message "%s" (match-string 1)))))
 
 (defun org-mhe-get-message-folder ()
   "Return the name of the current message folder.
 Be careful if you use sequences."
   (save-excursion
     (if (equal major-mode 'mh-folder-mode)
-        mh-current-folder
+       mh-current-folder
       ;; Refer to the show buffer
       mh-show-folder-buffer)))
 
@@ -159,7 +168,7 @@ Be careful if you use sequences."
 Be careful if you use sequences."
   (save-excursion
     (if (equal major-mode 'mh-folder-mode)
-        (mh-get-msg-num nil)
+       (mh-get-msg-num nil)
       ;; Refer to the show buffer
       (mh-show-buffer-message-number))))
 
@@ -168,20 +177,20 @@ Be careful if you use sequences."
 This will create a show buffer for the corresponding message.  If
 you have a better idea of how to do this then please let us know."
   (let* ((folder (org-mhe-get-message-folder))
-         (num (org-mhe-get-message-num))
-         (buffer (get-buffer-create (concat "show-" folder)))
-         (header-field))
+        (num (org-mhe-get-message-num))
+        (buffer (get-buffer-create (concat "show-" folder)))
+        (header-field))
   (with-current-buffer buffer
     (mh-display-msg num folder)
     (if (equal major-mode 'mh-folder-mode)
-        (mh-header-display)
+       (mh-header-display)
       (mh-show-header-display))
     (set-buffer buffer)
     (setq header-field (mh-get-header-field header))
     (if (equal major-mode 'mh-folder-mode)
-        (mh-show)
+       (mh-show)
       (mh-show-show))
-    header-field)))
+    (org-trim header-field))))
 
 (defun org-mhe-follow-link (folder article)
   "Follow an MH-E link to FOLDER and ARTICLE.
@@ -196,22 +205,25 @@ folders."
   (mh-find-path)
   (if (not article)
       (mh-visit-folder (mh-normalize-folder-name folder))
-    (setq article (org-add-angle-brackets article))
     (mh-search-choose)
     (if (equal mh-searcher 'pick)
-        (progn
-          (mh-search folder (list "--message-id" article))
-          (when (and org-mhe-search-all-folders
-                     (not (org-mhe-get-message-real-folder)))
-            (kill-this-buffer)
-            (mh-search "+" (list "--message-id" article))))
-      (mh-search "+" article))
+       (progn
+         (setq article (org-add-angle-brackets article))
+         (mh-search folder (list "--message-id" article))
+         (when (and org-mhe-search-all-folders
+                    (not (org-mhe-get-message-real-folder)))
+           (kill-this-buffer)
+           (mh-search "+" (list "--message-id" article))))
+      (if mh-search-regexp-builder
+         (mh-search "+" (funcall mh-search-regexp-builder
+                                 (list (cons 'message-id article))))
+       (mh-search "+" article)))
     (if (org-mhe-get-message-real-folder)
-        (mh-show-msg 1)
+       (mh-show-msg 1)
       (kill-this-buffer)
       (error "Message not found"))))
 
 (provide 'org-mhe)
 
-;; arch-tag: dcb05484-8627-491d-a8c1-01dbd2bde4ae
+
 ;;; org-mhe.el ends here