Papers3 の文献を Org Mode から開く (Mac向け)

文献等を [Papers3.app](http://papersapp.com/mac/)で集めている Macユーザで，しかも GNU Emacs の [org-mode](http://orgmode.org/ja/) で情報を管理している方に向けた記事です．

3ステップで終わります．
（追記したorg-mac-linkの拡張を含めると4ステップ）

# A. 迷わず以下のコードを .emacs に書き込みます．

```el
(with-eval-after-load "org"
  (when (eq system-type 'darwin)
    ;; Open `papers3://' link by C-c C-o.
    (org-link-set-parameters
     "papers3"
     :follow (lambda (path)
               (let ((cmd (concat "open papers3:" path)))
                 (shell-command-to-string cmd)
                 (message "%s" cmd))))))
```

関数 `org-link-set-parameters` は Org Mode 9からの関数で，以前は `org-add-link-type` でした．`org-add-link-type` は廃止される関数なので，この機会に移行しましょう．

# B. Papers3.app から文献へのリンクを取る

文献リストのリストで右クリックして，`Papers Link`を選びます．すると，ペーストボードに`papers3://publication/uuid/64924518-5B7C-4797-9B60-8B928DAC4EB9` のようなURIが取得されます．"papers3"で始まっているのがポイントです．

![Screen Shot 2016-12-01 at 18.06.53.png](https://qiita-image-store.s3.amazonaws.com/0/12232/eda6d720-950e-9cf1-b904-a3b1ffabe9e3.png)

その昔，journlerというソフトがあって，それも "journler://" というプロトコルでデータアクセスが可能でした．Mac は便利ですね．

# C. 文献リンクをorgバッファにペースト

取得したURIを，orgバッファにペーストします．

![Screen Shot 2016-12-01 at 21.48.40.png](https://qiita-image-store.s3.amazonaws.com/0/12232/a166912b-4d9e-621e-45a7-74565f9c8f23.png)

適宜，org-mode の記法でちゃんとしたリンクにすると良いです．

`[[papers3://publication/uuid/64924518-5B7C-4797-9B60-8B928DAC4EB9][JIS原案作成のための手引]]`

という感じです．そして，このリンク上で`C-c C-o`すると，Papers3.appが勝手に起動して，対象の文献が表示されます．

いちいち検索しなくて済みますし，org-modeで効率的に情報を管理できるのでオススメです．

できるならば，`Papers Link`の取得を `org-mac-link`のディスパッチャから呼べると理想的なのですが，これはまた別の機会に．

* * *

（追記: `org-mac-link`の拡張）

`org-mac-link` を拡張して，Papers3.app で選択しているアイテムへのリンクをディスパッチャから自動選択して取れるようにしました．`org-mac-link.el`は`org-mode`の`contrib`ディレクトリに収められているので注意してください．

GIST: [org-mac-papers-insert-front-most-paper-link.el](https://gist.github.com/takaxp/14fa032808424c391c77e5ec68947331)

![Screen_Shot_2016-12-10_at_10_48_05_AM.png](https://qiita-image-store.s3.amazonaws.com/0/12232/2fd98a40-7d0c-7088-2201-25e505537712.png)

使い方：

1. Papers3.appを起動して，リンクを取りたい文献を選択しておく
2. orgバッファ内で`M-x org-mac-grab-link (C-c g)` してディスパッチャを表示
3. `P` を押下
4. カーソル位置にリンクが挿入される．（例：``[[papers3://publication/uuid/64924518-5B7C-4797-9B60-8B928DAC4EB9][{1}	規格業務課, “JIS原案作成のための手引,” pp. 1–92, Jul. 2014.]]``）

挿入されるリンクの形式に不満がある場合は，[拡張したコード](https://gist.github.com/takaxp/14fa032808424c391c77e5ec68947331)のうち`org-as-mac-papers-get-paper-link`の一部を書き換えてください．AppleScriptです．

```el
      "		keystroke \"c\" using {command down, shift down\}\n"
```

書き換え候補は，Papers3.appの`Copy As`の中身をみればわかります．

![Screen Shot 2016-12-10 at 10.58.19 AM.png](https://qiita-image-store.s3.amazonaws.com/0/12232/4b61de9c-5244-d3e7-8e24-6033f47faa94.png)

たとえば，Papers Citation をリンク文字列として使いたい場合は，

```el
      "		keystroke \"m\" using {option down, command down\}\n"
```

とします．
`[[papers3://publication/uuid/64924518-5B7C-4797-9B60-8B928DAC4EB9][{課:2014uu}]]`
みたいのが得られます．あとは好みですね．

ちなみにキーストロークの部分を（`\"M\"`などと）大文字で指定すると，自動的に `shift down`が効いた状態になるので要注意です．

コード的には`org-mac-grab-link`をオーバーライドしているので美しくないですが，他のアプリでも同様の拡張を簡単にできるよう，`org-mac-link-descriptors`を導入するプルリクをそのうち出します．

最後に，ディスパッチャを呼び出す`org-mac-grab-link`にはキーバインドを付けることが推奨されています．私は `C-c c`に割り当てていますが，デフォルトでは`C-c g`です．

```el
(add-hook 'org-mode-hook (lambda ()
  (define-key org-mode-map (kbd "C-c g") 'org-mac-grab-link)))
```