"Georg C. F. Greve" <[EMAIL PROTECTED]> writes: > On Sat, 04 Aug 2007 21:44:48 -0400 > Xiao-Yong Jin <[EMAIL PROTECTED]> wrote: > > xj> Perhaps we should actually suggest Carsten build nnir support in > xj> org-mode and at the same time persuade the maintainer of nnir.el to > xj> support mairix? ;-) > > I think this could be a clean solution to the problem.
Here is a patch against latest org-mode 5.04 as a first attempt of implementing custom link-types (stored in `org-link-custom-types'.)
diff --git a/org.el b/org.el
index 1fc081e..c139be1 100644
--- a/org.el
+++ b/org.el
@@ -968,6 +968,23 @@ Automatically means, when TAB or RET or C-c C-c are pressed in the line."
The value of this is taken from the #+LINK lines.")
(make-variable-buffer-local 'org-link-abbrev-alist-local)
+(defcustom org-link-custom-types nil
+ "Alist of recognized link types.
+This types are appended to `org-link-types'.
+Each cell is of the form
+
+ \(\"type\" \(follow-function store-function major-mode\)\)
+
+where \"type\" is the string defining the type, follow-function
+is the function that Org will call to follow these links,
+store-function the function that Org will use to store these link
+and major-mode the major mode where it's active."
+ :group 'org-link
+ :type '(repeat (list (string :tag "Type (string) ")
+ (function :tag "Follow function ")
+ (function :tag "Store function ")
+ (function :tag "Active in major mode"))))
+
(defcustom org-link-abbrev-alist nil
"Alist of link abbreviations.
The car of each element is a string, to be replaced at the start of a link.
@@ -4140,8 +4157,11 @@ that will be added to PLIST. Returns the string that was modified."
(require 'font-lock)
(defconst org-non-link-chars "]\t\n\r<>")
-(defconst org-link-types '("http" "https" "ftp" "mailto" "file" "news" "bbdb" "vm"
- "wl" "mhe" "rmail" "gnus" "shell" "info" "elisp"))
+(defconst org-link-types
+ (append (list "http" "https" "ftp" "mailto" "file" "news" "bbdb" "vm"
+ "wl" "mhe" "rmail" "gnus" "shell" "info" "elisp")
+ (delq nil (mapcar (lambda(x) (car x)) org-link-custom-types))))
+
(defconst org-link-re-with-space
(concat
"<?\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
@@ -10410,9 +10430,13 @@ For links to usenet articles, arg negates `org-usenet-links-prefer-google'.
For file links, arg negates `org-context-in-file-links'."
(interactive "P")
(setq org-store-link-plist nil) ; reset
- (let (link cpltxt desc description search txt)
+ (let (link cpltxt desc description search txt cus)
(cond
+ ((setq cus (assq major-mode (mapcar '(lambda(e) (reverse e))
+ org-link-custom-types)))
+ (funcall (nth 1 cus)))
+
((eq major-mode 'bbdb-mode)
(let ((name (bbdb-record-name (bbdb-current-record)))
(company (bbdb-record-getprop (bbdb-current-record) 'company)))
@@ -11006,7 +11030,7 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(org-remove-occur-highlights nil nil t)
(if (org-at-timestamp-p t)
(org-follow-timestamp-link)
- (let (type path link line search (pos (point)))
+ (let (type path link line search (pos (point)) cus)
(catch 'match
(save-excursion
(skip-chars-forward "^]\n\r")
@@ -11177,7 +11201,10 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(message "%s => %s" cmd (eval (read cmd)))
(error "Abort"))))
- (t
+ ((setq cus (assoc type org-link-custom-types))
+ (funcall (nth 1 cus) path))
+
+ (t
(browse-url-at-point)))))
(move-marker org-open-link-marker nil))
It lets you define an alist of custom link-types. See the docstring of `org-link-custom-types'. Then you need to define the follow/store functions by yourself. Here are the defuns I use (in addition to Georg's mairix.el):
org-mairix.el
Description: application/emacs-lisp
I think the nnir.el support could be provided via custom link types, instead of being hardcoded within org.el. Please test it and give me feedback! PS: i started to have a look at nnir.el to make it aware of mairix. But i'm not sure i'll have time for this till the end of the week. -- Bastien
_______________________________________________ Emacs-orgmode mailing list [email protected] http://lists.gnu.org/mailman/listinfo/emacs-orgmode
