提升条目为第一个孩子节点

“实战Elisp”系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教——如果真的有广大Emacs用户的话,哈哈哈。

序言

我用Emacs的org-mode来管理看动画的进度

org-mode中的动画清单

每个工作日的午餐和晚餐,我都会安排一部下饭动画。为了每顿饭可以看不同的动画,我的做法是:

  1. 从清单的尾部选择一部动画(比如选中了《鬼灭之刃》);
  2. 在这部动画下创建一个子节点(比如“观看第17话”),设置为TODO状态,并设定SCHEDULED属性为第二天的午餐或晚餐的时间;
  3. 把动画的条目移动到当前父节点的第一个孩子节点的位置上(也就是排到《动物狂想曲》的上面),这样接下来就不会立即再选到这部动画来看了。

要移动到第一个孩子节点,可以先剪切再粘贴,也可以用org-mode提供的快捷键M-↑。但M-↑只能往上移动一级,如果要移动至第一个孩子节点的位置,就需要不停地按这个快捷键。为了简化这个步骤,我定义了一个新的命令和快捷键来代劳。

函数定义

这个函数非常简单,只需要持续调用M-↑快捷键对应的命令,直到它出错自己结束即可。为了知道M-↑对应的是哪一个函数,在一个主模式为org-mode的buffer中,按下C-h k,再按下M-↑,可以看到它对应的函数为org-move-subtree-up

现在,可以定义这个短小精悍的函数了

(defun up-to-top ()
  "将当前条目一直移动到最上面"
  (interactive)
  (loop
   (org-move-subtree-up)))

我把它绑定到了快捷键C-c o u上

(define-key org-mode-map "\C-cou" 'up-to-top)

后记

用org-mode来记录动画的观看进度,会在动画的条目下创建出许多形如“观看XX话”这样的条目。如果是《钢炼》这种六十多集的动画,展开时看到这一大串子条目还是颇为震撼和困扰的。为了解决这个问题,我在org-mode中还定制了一些其它功能,下次再给大家讲解一下。

阅读原文

你可能感兴趣的:(emacs,elisp,org-mode,后端)