org-mode はハイパーリンク機能も装備しています。

つまり、Wikiのような記法でリンクを書くことができ、
リンク先へジャンプできるのです。

リンク先はファイルはもちろんのこと、
メール(mewGNUSWL)、
シェルコマンド、 GNU Screen
Emacs Lispコード
へのリンクも作成できます。

[[shell:ls -l]]
[[elisp:(message "ok")]]

しかし、シェルコマンドやEmacs Lispへのリンクを無闇に踏むのはとても危険です。

なぜなら、rm -rf /を実行するリンクも作成可能だからです。

リンクにはラベルも指定できるので、
リンク先のコードが見えない状態で
危険なリンクを踏んでしまうこともあります。

とくに他の人からorgファイルをもらったとき、
彼に悪意があって、そのリンクを踏んでしまったら…

やばいですね

そこでorg-modeのデフォルトの設定では安全側に倒してあり、
Emacs Lisp、シェルコマンドへのリンクを実行する際、
「このリンクを実行しますか?」とyes/noで訊いてきます。

かといって、こういうリスクはあるものの日常的ではないので
かえってうざったいと思うのが普通ですよね。

たとえば、ls -lへのリンク

[[shell:ls -l]]

は安全なのに

Execute "ls -l" in shell? (yes or no)  yes

と尋ねられるのは嫌ですよね。

訊くのを全面的にやめさせるにはこうするのですが、

(setq org-confirm-elisp-link-function nil)
(setq org-confirm-shell-link-function nil)

これではセキュリティリスクを負います。

org-mode開発者側はこの問題を認識していて、

  • org-confirm-elisp-link-not-regexp
  • org-confirm-shell-link-not-regexp

という変数を用意することで正規表現に
マッチするリンクは尋ねないようにしています。

それでも安全な正規表現を用意・更新するのは面倒です。

そこで、新しいルールとして
自分が作成したorgファイルは安全
ということにしてしまいましょう。

特定のディレクトリに配置してあるorgファイルや
特定のバッファ名に限っては安全とみなします。

ここでは

"/sync/memo/\\|/sync/junk/"

を満たすディレクトリと
*trace-output*バッファを安全とみなし、
それ以外のorgバッファは危険とみなします。

なお、*trace-output*を安全にしているのは
*trace-output*をorg-modeにする設定 のためです。

こうしておけば、自分が書いたorg文書をそのディレクトリに
放り込んでおくだけでいいので、
いちいち尋ねられる煩わしさから解放されます。

設定 141011075230.org-confirm-elisp-link-function.1.el(以下のコードと同一)

(defun org-confirm-elisp-link-function--no-confirm-my-org-file (prompt)
  "自分が書いたorgファイルの(のディレクトリにある)elispリンクはconfirmなし。
それ以外のディレクトリではconfirmする。"
  (or (string-match "/sync/memo/\\|/sync/junk/" (or (buffer-file-name) ""))
      (member (buffer-name) '("*trace-output*"))
      (y-or-n-p prompt)))
(setq org-confirm-elisp-link-function
      'org-confirm-elisp-link-function--no-confirm-my-org-file)
(setq org-confirm-shell-link-function
      'org-confirm-elisp-link-function--no-confirm-my-org-file)

実行方法

$ wget http://rubikitch.com/f/141011075230.org-confirm-elisp-link-function.1.el
$ emacs -Q -f package-initialize -l 141011075230.org-confirm-elisp-link-function.1.el

本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。