“实战Elisp”系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教——如果真的有广大Emacs用户的话,哈哈哈。
序言
我用Emacs的org-mode来管理看动画的进度
每个工作日的午餐和晚餐,我都会安排一部下饭动画。为了每顿饭可以看不同的动画,我的做法是:
- 从清单的尾部选择一部动画(比如选中了《鬼灭之刃》);
- 在这部动画下创建一个子节点(比如“观看第17话”),设置为TODO状态,并设定SCHEDULED属性为第二天的午餐或晚餐的时间;
- 把动画的条目移动到当前父节点的第一个孩子节点的位置上(也就是排到《动物狂想曲》的上面),这样接下来就不会立即再选到这部动画来看了。
要移动到第一个孩子节点,可以先剪切再粘贴,也可以用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中还定制了一些其它功能,下次再给大家讲解一下。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。