From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: [Patch] New implementation of the Org remember process ready for comments and testing Date: Tue, 22 Jun 2010 16:25:05 +0200 Message-ID: <961CE74C-CE86-4E68-82F3-65EFC991A9BB@gmail.com> References: <871vbz9mjm.fsf@gmx.de> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=36129 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OR4Pb-0006bb-5H for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:25:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OR4PX-0001mK-Uv for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:25:13 -0400 Received: from mail-ww0-f41.google.com ([74.125.82.41]:35066) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OR4PX-0001mA-Kg for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:25:11 -0400 Received: by wwb17 with SMTP id 17so1278340wwb.0 for ; Tue, 22 Jun 2010 07:25:09 -0700 (PDT) In-Reply-To: <871vbz9mjm.fsf@gmx.de> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Sebastian Rose Cc: Org Mode 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 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