Eldoc

リンクの内容をeldocで表示

eldoc の機能を用いてカーソル下のリンクをエコーエリアに出す設定です。意外と簡単にできました。

(with-eval-after-load "org"
  (add-hook 'org-mode-hook #'my-load-echo-org-link)

  (defun my-echo-org-link ()
    (when (org-in-regexp org-link-bracket-re 1)
      (let ((link "Link:")
            (msg (org-link-unescape (match-string-no-properties 1))))
        (put-text-property 0 (length link) 'face 'minibuffer-prompt link)
        (eldoc-message (format "%s %s" link msg)))))

  ;; これはダメな例
  ;; (defun my-load-echo-org-link ()
  ;;   (setq-local eldoc-documentation-function #'my-echo-org-link))
  ;; こちらが正しい実装
  (defun my-load-echo-org-link ()
    (add-function :before-until (local 'eldoc-documentation-function)
                  #'my-echo-org-link)))

なお、 org-eldoc と併用する場合、 eldoc-documentation-function が専有されてしまうので、次のように advice して回避します。