Files
org-roam/doc/roam_protocol.md
Jethro Kuan 150ae65564 (feature): deprecate roam-protocol, extend org-protocol instead (#203)
Add 2 custom handlers:

1. roam-file?file=path: this simply opens the file at path in Emacs.
2. roam-ref?ref=ref&template=roam-template&title=title&...: attempts to open a roam note with a given ROAM_KEY. If the note doesn't exist, create one. Else, open it.
2020-02-29 22:09:04 +08:00

3.5 KiB

What is Roam protocol?

Org-roam defines two protocols that help boost productivity, by extending org-protocol.

The first protocol is the roam-file protocol. This is a simple protocol that opens the path specified by the file key (e.g. org-protocol:/roam-file?file=/tmp/file.org). This is used in the generated graph.

The second protocol is the roam-ref protocol. This protocol finds or creates a new note with a given ROAM_KEY (see Anatomy).

To use this, create a Firefox bookmarklet as follows:

javascript:location.href =
'org-protocol:/roam-ref?template=ref&ref='
+ encodeURIComponent(location.href)
+ '&title='
+ encodeURIComponent(document.title)

where template is the template you have defined for your web snippets. This template should contain a #+ROAM_KEY: {ref} in it.

Org-protocol Setup

The instructions for setting up org-protocol can be found here, but they are reproduced below.

Across all platforms, to enable org-roam-protocol, you have to add the following to your init file:

(require 'org-roam-protocol)

We also need to create a desktop application for emacsclient. The instructions for various platforms are shown below:

Linux

Create a desktop application. I place mine in ~/.local/share/applications/org-protocol.desktop:

[Desktop Entry]
Name=Org-Protocol
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol

Associate org-protocol:// links with the desktop application by running in your shell:

xdg-mime default org-protocol.desktop x-scheme-handler/org-protocol

To disable the "confirm" prompt in Chrome, you can also make Chrome show a checkbox to tick, so that the Org-Protocol Client app will be used without confirmation. To do this, run in a shell:

sudo mkdir -p /etc/opt/chrome/policies/managed/
sudo tee /etc/opt/chrome/policies/managed/external_protocol_dialog.json >/dev/null <<'EOF'
{
  "ExternalProtocolDialogShowAlwaysOpenCheckbox": true
}
EOF
sudo chmod 644 /etc/opt/chrome/policies/managed/external_protocol_dialog.json

and then restart Chrome (for example, by navigating to chrome://restart) to make the new policy take effect.

See here for more info on the /etc/opt/chrome/policies/managed directory and here for information on the ExternalProtocolDialogShowAlwaysOpenCheckbox policy.

Mac OS

One solution to this, recommended in Issue #115, is to use Platypus. Here are the instructions for setting up with Platypus and Chrome:

  1. Install and launch Platypus (with Homebrew):
brew cask install playtpus
  1. Platypus settings:
  • App Name: OrgProtocol
  • Script Type: env and /usr/bin/env
  • Script Path: /path/to/emacsclient $1
  • Tick Accept dropped items and click Settings
  • Tick Accept dropped files
  • Tick Register as URI scheme handler
  • Add org-protocol as a protocol
  • Create the app

To disable the "confirm" prompt in Chrome, you can also make Chrome show a checkbox to tick, so that the OrgProtocol app will be used without confirmation. To do this, run in a shell:

defaults write com.google.Chrome ExternalProtocolDialogShowAlwaysOpenCheckbox -bool true