org-protocol

Rédigé par Fred - - Aucun commentaire

J’avais déjà vu passer l’info, sur irreal.org puis chez Sacha Chua, et ailleurs encore, et à chaque fois, je m’étais dit, faut que je m’y mette. C'est chose faite depuis quelques temps. org-protocol permet d’utiliser org-capture depuis firefox, chrome, acrobat reader, etc.

Ce qui m’intéresse, c’est d’utiliser les bookmarklets de firefox, et plus particulièrement les mots-clés des marque-pages : je tape dans la barre d’adresse ot, or ou on, et ça me rajoute une note au bon endroit dans le bon fichier org-mode.

Je note ici comment j’ai fait. Selon que vous utilisiez windows, ou GNU/Linux, c’est légèrement différent.

Pour windows :

Dans le dossier bin d’emacs, j'ai ajouté le fichier em.cmd contenant :

@echo off
"%~dp0emacsclientw.exe" -na "%~dp0runemacs.exe" -c "%1"

Dans le fichier d’initialisation, init.el, il faut :

;; pour emacs client
(server-start) 

;;; où se situe org-protocol
(add-to-list 'load-path "c:/Users/ftantini/AppData/Roaming/.emacs.d/elpa/org-20150622/")
(require 'org-protocol)

;;; un template
(setq org-protocol-default-template-key "l")
(setq org-capture-templates
 '(("l" "Link" entry (file+olp "C:\\Users\\ftantini\\Documents\\Divers\\orgnotes.org" "Web Links")
        "* %a\n %?\n %i")))

Si on veut plusieurs bookmarks :

(setq org-protocol-default-template-key "l")
(setq org-capture-templates
 '(("t" "Todo" entry (file+headline "C:\\Users\\ftantini\\Documents\\Divers\\orgnotes.org" "Tasks")
        "* TODO %?\n  %i\n  %a")
   ("l" "Link" entry (file+olp "C:\\Users\\ftantini\\Documents\\Divers\\orgnotes.org" "Web Links")
        "* %a\n %?\n %i")
   ("j" "Journal" entry (file+datetree "C:\\Users\\ftantini\\Documents\\Divers\\orgnotes.org")
        "* %?\nEntered on %U\n  %i\n  %a")))

Attention, il a fallu que Web Links soit déjà un header du fichier.

Enfin, il faut également modifier le registre :

REGEDIT4

[HKEY_CLASSES_ROOT\org-protocol]
"URL Protocol"=""
@="URL:Org Protocol"

[HKEY_CLASSES_ROOT\org-protocol\shell]

[HKEY_CLASSES_ROOT\org-protocol\shell\open]

[HKEY_CLASSES_ROOT\org-protocol\shell\open\command]
@="\"c:\\Users\\ftantini\\Progs\\emacs-24.5\\bin\\emacsclientw.exe\" \"%1\""

Côté firefox, on ajoute le bookmarklet suivant :

javascript:location.href='org-protocol://org-capture://l/'+encodeURIComponent(location.href)+'/'+encodeURIComponent(document.title)+'/'+encodeURIComponent(window.getSelection());

où le l qui suit org-capture correspond au template qu’on veut utiliser.

Le sous-protocole n’est, pour moi, pas capture, mais bien org-capture (trouvé grâce à C-h v org-protocol-protocol-alist-default pour voir les protocoles par défaut).

La première fois que le bookmarklet est lancé, il demande avec quoi ouvrir, on renseigne em.cmd.

Pour linux :

C’est très clair ici : http://tech.memoryimprintstudio.com/org-capture-from-external-applications/, les solutions 2, et 3 ont marché pour moi, je vous laisse aller voir et je recopie ce qui marche pour moi (le plugin ne permet d’utiliser qu’un template) :

  • Enregistrer un fichier org-protocol.desktop

dans ~/.local/share/applications avec :

[Desktop Entry]
Name=org-protocol
Exec=emacsclient -c %u
Type=Application
Terminal=false
Categories=System;
MimeType=x-scheme-handler/org-protocol;
  • Ajouter dans ~/.local/share/applications/mimeapps.list
[Added Associations]
x-scheme-handler/org-protocol=org-protocol.desktop

puis mettre à jour :

update-desktop-database ~/.local/share/applications/

(le paquet pour debian est desktop-file-utils)

Côté Emacs, dans le fichier d’initialisation, init.el, on ajoute (si ce n’est pas déjà présent) :

;; pour emacs client
(server-start) 

;;; org-protocol
(require 'org-protocol)

(setq org-protocol-default-template-key "l")
(setq org-capture-templates
 '(("l" "Link"                entry (file+headline "/home/fred/Data/Donnees/Org/Notes/orgnotes.org" "trouvailles")
        "* %a\n %?\n %i")))

Et si on veut plusieurs bookmarks :

(setq org-protocol-default-template-key "l")
(setq org-capture-templates
 '(("t" "Todo" entry (file+headline "/home/fred/Data/Donnees/Org/Notes/orgnotes.org" "Tasks")
        "* TODO %?\n  %i\n  %a")
   ("l" "Link" entry (file+olp "/home/fred/Data/Donnees/Org/Notes/orgnotes.org" "Web Links")
        "* %a\n %?\n %i")
   ("j" "Journal" entry (file+datetree "/home/fred/Data/Donnees/Org/Notes/orgnotes.org")
        "* %?\nEntered on %U\n  %i\n  %a")))

Comme pour windows, le header (Tasks, Web Links) doit déjà être présent.

Le bookmarklet qui va bien à ajouter dans firefox :

javascript:location.href='org-protocol://capture://l/'+encodeURIComponent(location.href)+'/'+encodeURIComponent(document.title)+'/'+encodeURIComponent(window.getSelection());

où le l qui suit org-capture correspond au template qu’on veut utiliser.

Par contre, cette fois le sous-protocole est bien capture, et pas org-capture, et je n’ai pas chercher à comprendre pourquoi… (org-protocol-protocol-alist-default est pourtant le même.)

Pour tester, on peut, en ligne de commande, lancer

emacsclient org-protocol://capture://x/toto/tata/titi

si ça ne marche pas correctement, par exemple, si le buffer s’ouvre avec comme nom le dernier argument (ici titi), c’est sûrement un souci de sous-protocole.

Mes templates

Voilà les trois templates qui sont chez moi associés à un bookmarklet :

(setq org-capture-templates
      '(("t" "notes-info/travail"
               entry (file+headline "/home/fred/Data/Donnees/Org/Notes/notes-info.org" "trouvailles")
               "** COMMENCÉ %:description\n%i\n%?\nSource : %a\n\n" :immediate-finish)
        ("r" "notes-info/raccourcis"
               entry (file+headline "/home/fred/Data/Donnees/Org/Notes/notes-info.org" "raccourcis")
               "** COMMENCÉ %:description\n%i\n%?\nSource : %a\n\n" :immediate-finish)
        ("l" "notes/à lire"
               entry (file+headline "/home/fred/Data/Donnees/Org/Notes/notes.org" "à lire")
;              "* %^{Title}\n\n  Source: %u, %c\n\n  %i"))))
               "** %a\n%i\n%?\n\n" :immediate-finish)
        ))
                                        ;%:description : titre de la page
                                        ;%i : sélection de la page web
                                        ;%? : curseur pour continuer de remplir la note
                                        ;%a : [[lien][titre de la page]]

Je rappelle les liens de l’intro : chez Sacha Chua, qui explique comment elle a fait pour chrome, et le site d’orgmode, en particulier, les templates : http://orgmode.org/manual/Capture-templates.html pour avoir d’autres variables (%T, %k, %^{Title}, %^C… sur Template-expansion), et la page de départ : http://orgmode.org/worg/org-contrib/org-protocol.html.


Écrire un commentaire

Quelle est la quatrième lettre du mot jioll ?