高亮代码块执行的结果

重复执行 Org mode 代码块时,如果结果相同,高亮下能更容易确认执行成功了。

仿照 M-. (xref-find-definitions) 用 pulse.el 临时高亮下执行的结果:

(defun chunyang-org-babel-highlight-result ()
  "Highlight the result of the current source block.
Adapt from `org-babel-remove-result'."
  (interactive)
  (let ((location (org-babel-where-is-src-block-result nil nil)))
    (when location
      (save-excursion
        (goto-char location)
        (when (looking-at (concat org-babel-result-regexp ".*$"))
          (pulse-momentary-highlight-region
           (1+ (match-end 0))
           (progn (forward-line 1) (org-babel-result-end))))))))

并且设置 C-c C-c (org-ctrl-c-ctrl-c) 在恰当的时候自动调用它:

(add-hook 'org-babel-after-execute-hook
          (defun chunyang-org-babel-highlight-result-maybe ()
            (when (eq this-command 'org-ctrl-c-ctrl-c)
              (chunyang-org-babel-highlight-result))))
3 个赞

add-hook 里直接 defun 有什么讲究吗?

仅仅是为了少打几个字,

下面三种写法作用一样,第 1 种写法自然是最标准的啦,第 2 种不方便后续管理 Hook,第 3 种写法克服了第 2 种的问题,但是假设了 defun 返回函数名 (Symbol) ,虽然目前事实如此,但文档说了 “The return value is undefined.”。

;; 1
(defun foo () (bar))
(add-hook 'foo-hook #'foo)

;; 2
(add-hook 'foo-hook (lambda () (bar)))

;; 3
(add-hook 'foo-hook (defun foo () (bar)))

原来是剑走偏锋,还以为是某种新的 best practice。