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
next prev parent 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).