From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sebastian Rose Subject: Re: [Patch] New implementation of the Org remember process ready for comments and testing Date: Tue, 22 Jun 2010 16:29:29 +0200 Message-ID: <87tyov87jq.fsf@gmx.de> References: <871vbz9mjm.fsf@gmx.de> <961CE74C-CE86-4E68-82F3-65EFC991A9BB@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=37176 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OR4To-0001bz-Hc for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:29:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OR4Tm-0002c0-9G for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:29:36 -0400 Received: from mail.gmx.net ([213.165.64.20]:37117) by eggs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1OR4Tl-0002bk-Q2 for emacs-orgmode@gnu.org; Tue, 22 Jun 2010 10:29:34 -0400 In-Reply-To: <961CE74C-CE86-4E68-82F3-65EFC991A9BB@gmail.com> (Carsten Dominik's message of "Tue, 22 Jun 2010 16:25:05 +0200") 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: Carsten Dominik Cc: Org Mode 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'). 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~