;;; 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
;; 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:
(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)
"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)))
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
(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)))
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))))
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.
(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