org-mode はハイパーリンク機能も装備しています。
つまり、Wikiのような記法でリンクを書くことができ、
リンク先へジャンプできるのです。
リンク先はファイルはもちろんのこと、
メール(mew 、 GNUS 、 WL)、
シェルコマンド、 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
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。