emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [Patch] New implementation of the Org remember process rea


From: Carsten Dominik
Subject: Re: [Orgmode] [Patch] New implementation of the Org remember process ready for comments and testing
Date: Tue, 22 Jun 2010 16:25:05 +0200

Wooooooooooow, that was incredibly fast!

:-)

template keys used to be characters, now in org-capture.el they are strings. Does the patch handle this correctly?

- Carsten



On Jun 22, 2010, at 4:20 PM, Sebastian Rose wrote:

Carsten Dominik <address@hidden> writes:
3 Why a new name?
~~~~~~~~~~~~~~~~~~

 I have - at least for now - chosen a new name for the new setup:
` org-capture'.  There are two reasons for this:

In the manual it is "Capture - Refile - Archive". I remember searching
for "Remember" and never found it :)


5 Setup
~~~~~~~~

 To use the new setup, do the following:

 1. Run

    M-x org-capture-import-remember-templates RET

Worked perfectly here :)

I tested all my important templates and they work.
Abandoning org-remember seems painless.


  '(("t" "templates adding table lines")
("ta" "add to table a" table-line (file+headline "~/notes.org" "Table A)) ("tb" "add to table b" table-line (file+headline "~/notes.org" "Table B)) ("tc" "add to table c" table-line (file+headline "~/notes.org" "Table C)))

  When starting capture, you can then first press "t" and then see
  the individual options.

This is great.  Number of templates is constantly growing and the new
features will increase the speed of this process.


7 Request for comments
~~~~~~~~~~~~~~~~~~~~~~~

None of what I describe is set in stone yet - let me know if you have
comments, change requests or other ideas.

My feeling right now is that this should become the default capture
system, and that we will keep the current org-remember in the
distribution for quite some time, for compatibility.


Good track I guess.




Here's the tested and working patch for org-protocol.el.

To use `org-remember' and/or `org-capture' alike, copy your org- remember
link and change

  javascript:location.href='org-protocol://remember://'+...

to

  javascript:location.href='org-protocol://capture://'+...


The template char used is the same for both --- which is OK for me, but
could be changed.




diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index 0642227..88676f4 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -87,12 +87,17 @@
;; pushes the browsers URL to the `kill-ring' for yanking. This handler is
;;     triggered through the sub-protocol \"store-link\".
;;
-;; * Call `org-protocol-remember' by using the sub-protocol \"remember\". If -;; Org-mode is loaded, emacs will pop-up a remember buffer and fill the +;; * Call `org-protocol-capture' by using the sub-protocol \"capture\". If +;; Org-mode is loaded, emacs will pop-up a capture buffer and fill the ;; template with the data provided. I.e. the browser's URL is inserted as an ;; Org-link of which the page title will be the description part. If text ;; was select in the browser, that text will be the body of the entry.
;;
+;; * Call `org-protocol-remember' by using the sub-protocol \"remember\".
+;;     This is provided for backward compatibility.
+;; You may read `org-capture' as `org-remember' throughout this file if
+;;     you still use `org-remember'.
+;;
;; You may use the same bookmark URL for all those standard handlers and just
;; adjust the sub-protocol used:
;;
@@ -101,7 +106,7 @@
;;           encodeURIComponent(document.title)+'/'+
;;           encodeURIComponent(window.getSelection())
;;
-;; The handler for the sub-protocol \"remember\" detects an optional template +;; The handler for the sub-protocol \"capture\" detects an optional template
;; char that, if present, triggers the use of a special template.
;; Example:
;;
@@ -143,6 +148,7 @@ for `org-protocol-the-protocol' and sub-procols defined in

(defconst org-protocol-protocol-alist-default
'(("org-remember" :protocol "remember" :function org- protocol-remember :kill-client t) + ("org-capture" :protocol "capture" :function org- protocol-capture :kill-client t) ("org-store-link" :protocol "store-link" :function org- protocol-store-link) ("org-open-source" :protocol "open-source" :function org- protocol-open-source))
  "Default protocols to use.
@@ -260,7 +266,6 @@ Here is an example:
  :group 'org-protocol
  :type 'string)

-
;;; Helper functions:

(defun org-protocol-sanitize-uri (uri)
@@ -443,51 +448,73 @@ The sub-protocol used to reach this function is set in
(defun org-protocol-remember  (info)
  "Process an org-protocol://remember:// style url.

+The location for a browser's bookmark has to look like this:
+
+  javascript:location.href='org-protocol://remember://'+ \\
+        encodeURIComponent(location.href)+'/' \\
+        encodeURIComponent(document.title)+'/'+ \\
+        encodeURIComponent(window.getSelection())
+
+See the docs for `org-protocol-capture' for more information."
+
+  (if (and (boundp 'org-stored-links)
+           (or (fboundp 'org-capture))
+          (org-protocol-do-capture info 'org-remember))
+      (message "Org-mode not loaded."))
+  nil)
+
+(defun org-protocol-capture  (info)
+  "Process an org-protocol://capture:// style url.
+
The sub-protocol used to reach this function is set in
`org-protocol-protocol-alist'.

This function detects an URL, title and optional text, separated by '/'
The location for a browser's bookmark has to look like this:

-  javascript:location.href='org-protocol://remember://'+ \\
+  javascript:location.href='org-protocol://capture://'+ \\
        encodeURIComponent(location.href)+'/' \\
        encodeURIComponent(document.title)+'/'+ \\
        encodeURIComponent(window.getSelection())

By default, it uses the character `org-protocol-default-template-key',
-which should be associated with a template in `org-remember- templates'. +which should be associated with a template in `org-capture- templates'. But you may prepend the encoded URL with a character and a slash like so:

-  javascript:location.href='org-protocol://org-store-link://b/'+ ...
+  javascript:location.href='org-protocol://capture://b/'+ ...

Now template ?b will be used."
-
  (if (and (boundp 'org-stored-links)
-           (fboundp 'org-remember))
-      (let* ((parts (org-protocol-split-data info t))
- (template (or (and (= 1 (length (car parts))) (pop parts))
-                          org-protocol-default-template-key))
-             (url (org-protocol-sanitize-uri (car parts)))
-             (type (if (string-match "^\\([a-z]+\\):" url)
-                       (match-string 1 url)))
-             (title (or (cadr parts) ""))
-             (region (or (caddr parts) ""))
-             (orglink (org-make-link-string
-                      url (if (string-match "[^[:space:]]" title) title url)))
-             remember-annotation-functions)
-        (setq org-stored-links
-              (cons (list url title) org-stored-links))
-        (kill-new orglink)
-        (org-store-link-props :type type
-                              :link url
-                              :description title
-                              :initial region)
-        (raise-frame)
-        (org-remember nil (string-to-char template)))
-
-    (message "Org-mode not loaded."))
+           (or (fboundp 'org-capture))
+          (org-protocol-do-capture info 'org-capture))
+      (message "Org-mode not loaded."))
  nil)

+(defun org-protocol-do-capture (info capture-func)
+  "Support `org-capture' and `org-remember' alike.
+CAPTURE-FUNC is either the symbol `org-remember' or `org-capture'."
+  (let* ((parts (org-protocol-split-data info t))
+        (template (or (and (= 1 (length (car parts))) (pop parts))
+                      org-protocol-default-template-key))
+        (url (org-protocol-sanitize-uri (car parts)))
+        (type (if (string-match "^\\([a-z]+\\):" url)
+                  (match-string 1 url)))
+        (title(or (cadr parts) ""))
+        (region (or (caddr parts) ""))
+        (orglink (org-make-link-string
+                  url (if (string-match "[^[:space:]]" title) title url)))
+        remember-annotation-functions)
+    (setq org-stored-links
+         (cons (list url title) org-stored-links))
+    (kill-new orglink)
+    (org-store-link-props :type type
+                         :link url
+                         :description title
+                         :initial region)
+    (raise-frame)
+    (funcall capture-func nil template)))
+
+
(defun org-protocol-open-source (fname)
  "Process an org-protocol://open-source:// style url.




Best wishes

 Sebastian

- Carsten






reply via email to

[Prev in Thread] Current Thread [Next in Thread]