emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] org-annotation-helper


From: Richard G Riley
Subject: Re: [Orgmode] org-annotation-helper
Date: Sun, 31 Aug 2008 12:19:23 +0200
User-agent: Emacs 22.2.1/No Gnus v0.11

caveat : I do not know if this is optimal or even recommended but it now
works for me.

I have modified the code a little to remove hex from the actual link. I
have "boxquoted" all code so you will need to remove that.

firefox/iceweasel : To set up the bookmark link, simple create a new
book mark called "remember" in firefox and make this the location code:

,----
| 
javascript:location.href='remember://%20'+location.href+'%1C'+escape(document.title)+'%1C'+escape(window.getSelection())
`----

This is as simple as right click on your bookmark toolbar and
create new. Do *not* select "load this bookmark in the sidebar" - when I
selected this then links and region did not pass to the protocol handler
discussed in the comments below. I have no idea why and if someone could
explain why this should be I would be grateful.

Follow the instructions in the code to set up the shell script and the
protocol registry to handle the protocol when you click on the remember
bookmark. I would advise ignoring all "annotation" stuff and just
concentrate getting remember working for now.

The org-remember-template I now use is (note the addition of %:link which
shows the physical http link)

,----
| ("Web-Link" ?w "* %c \n  :PROPERTIES: \n  :Entered: %U\n  :END: \n\n  - link: 
%:link\n  - Quote:\n    %:region\n  - End Quote\n\n  %?\n" "bookmarks.org" 
"Unfiled Clips") 
`----

Using linux with X, I also modified the remember shell script to use wmctl to
bring emacs to the foreground.

I also reformatted the location codes to be on a single line.


,----
| ;;; org-annotation-helper.el --- start remember from a web browser
| ;;
| ;; Author: bzg AT altern DOT org
| ;; Keywords: org remember
| ;;
| ;;; Commentary:
| ;;
| ;; [bzg:] This is an adapted version of the planner-mode extension the
| ;; was first posted by Geert Kloosterman <[EMAIL PROTECTED]> on
| ;; the Planner mailing list.  All comments below are his.
| ;;
| ;; We want to be able to pass a URL and document title directly from a
| ;; web browser to Emacs.
| ;;
| ;; We define a remember:// url handler in the browser and use a shell
| ;; script to handle the protocol.  This script passes the information
| ;; to a running Emacs process (using emacsclient/gnuclient).  We use 
| ;; bookmarklets to create the remember:// urls dynamicly.
| ;;
| ;; The protocol types currently recognized are:
| ;; 
| ;; remember://     start `remember' with the url and title filled in
| ;; annotation://   similar to `planner-annotation-as-kill' (org?)
| ;;
| ;; The urls used internally will have the following form:
| ;;
| ;;   remember://<the web page url>%1C<the title>
| ;;
| ;; The title will be url-hex-encoded.  "%1C" is the (url-encoded) low
| ;; ascii value for the field separator.
| ;;
| ;;
| ;; The bookmarklets:
| ;;
| ;; javascript:location.href='remember://' + location.href + '%1C' + 
escape(document.title) + '%1C' + escape(window.getSelection())
| ;; javascript:location.href='annotation://' + location.href + '%1C' + 
escape(document.title)
| ;;
| ;; The helper script:
| ;;
| ;;#!/bin/sh
| ;;# remember -- pass a remember-url to emacs
| ;;#
| ;;# Author: Geert Kloosterman <address@hidden>
| ;;# Date: Sat Nov 19 22:33:18 2005
| ;;#
| ;;# modified 31 Aug 2008 rgr : added call to wmctrl to bring emacs to the 
foreground
| ;;#
| ;; 
| ;;if [ -z "$1" ]; then
| ;;    echo "$0: Error: no arguments given!" 1>&2
| ;;    exit 1
| ;;fi
| ;; 
| ;;# To test uncomment following line
| ;;#echo $1 >> /tmp/remember.out
| ;;wmctrl -a emacs22
| ;;emacsclient --eval "(progn (bzg/org-annotation-helper \"$1\" ) nil)"
| ;; 
| ;;# EOF
| 
| ;; Adding a protocol handler
| ;; -------------------------
| ;;
| ;; Firefox
| ;;
| ;; To add a protocol handler (eg: remember://) in Firefox, take the
| ;; following steps:
| ;;
| ;; - type in "about:config" in the location bar
| ;; - right click, select New --> String
| ;; - the name should be "network.protocol-handler.app.remember" 
| ;; - the value should be the executable, eg. "remember".
| ;;   At least under Linux this does not need to be the full path to 
| ;;   the executable.
| ;;
| ;; See http://kb.mozillazine.org/Register_protocol for more details.
| ;;
| ;; Opera
| ;;
| ;; In Opera add the protocol in the Preferences->Advanced->Programs
| ;; dialog.
| 
| 
| ;; Code:
| 
| (require 'url)
| 
| (autoload 'url-unhex-string "url")
| 
| (defun bzg/org-annotation-helper (info)
| (interactive)
|   "Process an externally passed remember:// style url.
| 
| URLSTRING consists of a protocol part and a url and title,
| separated by %1C.
| 
| The protocol types currently recognized are:
| 
| remember://     start `remember' with the url and title
| annotation://   similar to `org-annotation-as-kill'."
|   (let ((remember-annotation-functions nil))
|     ;; The `parse-url' functions break on the embedded url,
|     ;; since our format is fixed we'll split the url ourselves.
|     (if (string-match  "^\\([^:]*\\):\\(/*\\)\\(.*\\)" info)
|       (let* ((proto (match-string 1 info))
|              (url_title_region (match-string 3 info))
|              (splitparts (split-string url_title_region "%1C"))
|              (url (car splitparts))
|              (type (if (string-match "^\\([a-z]+\\):" url) 
|                        (match-string 1 url)))
|              (title (cadr splitparts))
|              (region (url-unhex-string (caddr splitparts)))
|              orglink)
|         (setq title (if (> (length title) 0) (url-unhex-string title)))
|         (setq url (if (> (length url) 0) (url-unhex-string url)))
|         (setq orglink (org-make-link-string url title))
|         (org-store-link-props :type type
|                               :link url
|                               :region region
|                               :description title)
|         (setq org-stored-links
|               (cons (list url title) org-stored-links))
|         ;; FIXME can't access %a in the template -- how to set annotation? 
(raise-frame)
|         (cond ((equal proto "remember")
|                (kill-new orglink)
|                (org-remember ?w))
| ;;             (yank)) I don't think I need this yank
|               ((equal proto "annotation")
|                (message "Copied '%s' to the kill-ring." orglink)
|                (kill-new orglink))
|               (t (error "unrecognized org-helper protocol"))))
|       (error "could not parse argument"))))
| 
| (provide 'org-annotation-helper)
`----




reply via email to

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