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:42:00 +0200 Message-ID: References: <871vbz9mjm.fsf@gmx.de> <961CE74C-CE86-4E68-82F3-65EFC991A9BB@gmail.com> <87tyov87jq.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=47596 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OR4g2-0003a5-OD for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:42:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OR4g0-0004nB-TN for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:42:14 -0400 Received: from mail-ww0-f41.google.com ([74.125.82.41]:65397) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OR4g0-0004n1-LA for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:42:12 -0400 Received: by wwb17 with SMTP id 17so1296519wwb.0 for ; Tue, 22 Jun 2010 07:42:06 -0700 (PDT) In-Reply-To: <87tyov87jq.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 On Jun 22, 2010, at 4:29 PM, Sebastian Rose wrote: > Carsten Dominik writes: > >> 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? > > > > I wondering about that, too. But some nice person changed > org-remember.el to take care for that (See > `org-select-remember-template'). Great. Thanks! - Carsten > > > Sebastian > >> >> - 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 >> >> > > -- > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Sebastian Rose Fachinformatiker / Anwendungsentwicklung > Viktoriastr. 22 Entwicklung von Anwendungen mit freien Werkzeugen > 30451 Hannover und Bibliotheken. > > 0173 83 93 417 sebastian_rose@gmx.de s.rose@emma-stil.de > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Carsten