emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: John Rakestraw <lists@johnrakestraw.com>
To: emacs-orgmode@gnu.org
Subject: Re: firefox urls
Date: Mon, 12 May 2008 11:33:21 -0400	[thread overview]
Message-ID: <20080512113321.45188d4b@dhcp-296-6> (raw)
In-Reply-To: <fkd4nreee4.fsf@richardriley.net>

Richard G Riley <rileyrgdev@googlemail.com> wrote:

> Are there any add-ons anything to yank urls from firefox/iceweasel
> directly into a certain org-mode category?

ouch. Your query reminds me that I promised long ago to write up my use
of some code that Bastien adapted from a planner-mode extension. I'm in
the midst of end-of-the-semester woes here (though I finally finished
grading my finals late last night!), but here's a quick cut-and-paste
of that code. It works very well for me.

First, here's the template I use (apologies for formatting weirdness).
You could add a function to semi-automate the category assignment -- 

	   ("web-clip" ?w "* %c \n  :PROPERTIES: \n  :Entered: %U
\n  :END: \n  - ---->Quote from web page starts here\n    - %:region\n
- ---->Quote from web page ends here\n\n  %?\n" "~/plans/webclips.org"
"Unfiled Clips") 

Second, here's the code -- 

;;; 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 <g.j.kloosterman@gmail.com> 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
;; # org-annotation-helper -- pass a remember-url to emacs
;; #
;; # Author: Geert Kloosterman <g.j.kloosterman@gmail.com>
;; # Date: Sat Nov 19 22:33:18 2005
;; 
;; if [ -z "$1" ]; then
;;     echo "$0: Error: no arguments given!" 1>&2
;;     exit 1
;; fi
;; 
;; # For years I've been using Martin Schwenke's dtemacs script to start
;; # Emacs.  The script uses gnuclient to connect to Emacs and starts a
;; # new Emacs process when necessary.
;; # See http://www.meltin.net/hacks/emacs/
;; #
;; # dtemacs -batch -eval "(progn (bzg/org-annotation-helper \"$1\" )
\"\")" ;; 
;; # As of Emacs 22 emacsclient will work too
;; 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. "org-annotation-helper".
;;   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 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"))))
)


-- 
John Rakestraw

  reply	other threads:[~2008-05-12 15:37 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-12 15:22 firefox urls Richard G Riley
2008-05-12 15:33 ` John Rakestraw [this message]
2008-05-14  4:12   ` Daniel M German
2008-05-14  4:30     ` Carsten Dominik
2008-05-14 16:57     ` John Rakestraw
     [not found]     ` <871w44wlgz.fsf@uvic.ca>
2008-05-18  1:27       ` Alan E. Davis
2008-05-18  5:43         ` Daniel M German
2008-05-20 17:03           ` Richard G Riley
2008-05-20 17:20             ` Daniel M German
2008-05-20 20:46               ` Nick Dokos
2008-05-20 21:49                 ` Daniel M German
2008-05-21  1:49                 ` John Rakestraw
2008-05-21  5:28                   ` Carsten Dominik
2008-05-21 11:06                     ` Richard G Riley
2008-05-21 15:44                       ` John Rakestraw
2008-05-21 16:10                         ` Nick Dokos
2008-05-23 23:28                           ` Daniel M German
     [not found]                             ` <7bef1f890805232005s4755106eg2c928029e6db1767@mail.gmail.com>
2008-05-24  3:08                               ` Fwd: " Alan E. Davis
2008-05-24  3:14                             ` Alan E. Davis
2008-05-24  3:20                               ` Alan E. Davis
     [not found]                               ` <87r6bsmle5.fsf@uvic.ca>
2008-05-24  5:18                                 ` Alan E. Davis
2008-05-21 14:55                     ` John Rakestraw
2008-05-21 15:05                     ` Daniel M German
2008-05-21 14:58                   ` Nick Dokos
2008-05-21 10:51                 ` Richard G Riley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080512113321.45188d4b@dhcp-296-6 \
    --to=lists@johnrakestraw.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).