Emacs中的日程管理
1 Calendar
通过Emacs提供的calendar+Appointment可以实现简单的日程管理功能. 此外Emacs其实还提供了功能更强的Org-mode,但该mode太过复杂,简单的日程管理无需用到这么复杂的东西.
1.1 定位日期
使用M-x calendar就可以调用Emacs的calendar功能,这时Emacs会打开一个显示了三个月(分别是前一个月,当前月,后一个月)信息的日历,光标自动放在表示今天的那个位置. Emacs提供了大量的命令对光标所在的日期进行日程管理. 默认情况下calendar将周日作为一周的第一天,我们可以通过更改变量calendar-week-start的值来设置以星期几作为一周的第一天
(setq calendar-week-start 1) ;设置星期一为每周的第一天
一般情况下我们可以直接用上下左右方向键移动光标到其他日期处,也可以直接用鼠标点击要定位的日期. 此外,Emacs也提供了其他的移动命令,如下表所示:
命令 | 说明 |
---|---|
C-f 或者 左方向键 | 后一日 |
C-b 或者 右方向键 | 前一日 |
C-n 或者 下方向键 | 后一周 |
c-p 或者 上方向键 | 前一周 |
M-} | 后一月 |
M-{ | 前一月 |
C-x ] | 后一年 |
C-x [ | 前一年 |
C-a | 移动到一周的开始 |
C-e | 移动到一周的末尾 |
M-a | 移动到一月的开始 |
M-e | 移动到一月的末尾 |
M-< | 移动到一年的开始 |
M-> | 移动到一年的末尾 |
除了使用上诉的移动命令来定位日期外,Emacs还提供了多个命令直接定位到指定的日期处:
- 使用g d移动到指定的日期 在calendar下按下g d键后,在minibuffer提示我们依次输入年 月 日, Emacs直接将光标定位到输入的日期处.
- 使用g D移动到某年的指定天数处 在calendar下按下g D键后,在minibuffer提示我们依次输入年 该年的第几天, Emacs将光标定位到指定的日期处. 值得一提的是,输入天数时可以输入负数,如果输入的是负数,则表示还有多少天到年底.
- 使用. 移动到当前的日期处 在calendar下按下.键后,光标直接跳到代表今天的日期处.
- 使用g C移动到指定的农历所表示的日期处 在calendar下按下g C键后,Emacs提示你输入农历的信息,Emacs将光标定位到指定的日期处.
命令 | 说明 |
---|---|
g d | 根据日期定位 |
g D | 根据天数 |
. | 移动到当前日期 |
g C | 定位到指定的阴历 |
1.2 添加代办事项
在Calendar中可以为指定的日期添加代办事项:
- 使用i d命令为指定日期添加代办事项 在calendar中输入i d命令后,Emacs会打开一个教diary的文件,并自动填入光标所处的日期信息,我们只需要接着输入代办事项的信息并保存就可以了.
- 使用i w命令为每周的某一天添加代办事项 我们可以使用i w命令建立每周例行任务
- 使用i m命令为每月的某一天添加代办事项 我们可以使用i m命令建立每月例行任务
- 使用i y命令为每年的某一天添加代变事项 我们可以使用i y命令建立每年的例行任务
- 使用i a建立周年纪念日 跟i y命令类似,但calendar会记录起始年份
- 使用i b命令为一个时间段添加代办事项 将光标和mark放置在一段时间的起始/结尾处,按下i b键,Calendar自动插入时间段的信息,我们只要输入待办事项的信息就行了
- 使用i c命令定义一个循环事项 按下i c后,calendar提示输入循环间隔的日期,虽有Calendar自动插入代表循环的时间信息,我们只需要输入代变事项的信息就行了
命令 | 说明 |
---|---|
i d | 添加待办事项 |
i w | 添加每周例行任务 |
i m | 添加每月例行任务 |
i y | 添加每年例行任务 |
i a | 添加周年纪念日 |
i b | 为一段时间添加待办事项 |
i c | 添加循环事项 |
1.3 日期信息
将光标定位到指定的日期处后,Emacs还提供了一些命令来获取光标所处日期的信息. 常用到的命令有:
- 使用p d命令显示光标所处日期是当年中的第几天
- 使用p C命令显示光标所处日期的农历信息
- M-=计算一段时间的天数 在要计算时间段的起始天数/结束天数用命令C-@定义为mark,然后将光标移动到时间段的结束天数/起始天数,这就定义了一个时间段区域,按下M-=后就会在minibuffer中显示该时间段包含的天数. 其中,该天数包含了起始天数和结束天数的.
使用h命令查看光标所处日期的假期信息 如果光标所处的日期并没有假期,则Emacs在minibuffer提示No Holidays known,否则则显示该日期对应节假日的名字. Emacs内置了一些常见的节假日信息,另外,Emacs也提供了一些函数供我们自定义节假日:
(holiday-fixed m d 节日名) ;定义m月的第d日为xx节假日 (holiday-float m w n 节日名) ;定义m月的第w个星期的第n天为xx节假日,默认周日为第0日
- 使用a命令查看所有三个月的假期信息 按下a键后,Emacs会在另一个窗口显示calendar中三个月期间内的所有节假日信息.
使用x命令在calendar中标示出所有为节假日的日期来 若我们想让calendar自动标示出节假日的日期来,则更改calendar-mark-holidays-flag的值为非nil即可
(setq calendar-mark-holidays-flag t) ;让calendar自动标记出节假日的日期
- 使用d命令显示光标当前日期的代办事项 可以在d命令前加上一个数字n,表示显示n天内的所有代办事项
使用m命令在calendar中标记出所有记有待办事项的日期 该命令跟x类似,只是它标记出的是带有待办事项的日期. 同样的,你也可以通过更改变量calendar-mark-diary-entries-flag的值为非nil来让calendar自动标记出记有待办事项的日期.
(setq calendar-mark-diary-entries-flag t) ;让calendar自动标记出记有待办事项的日期
值得一提的时,如果你将记录某项代办事项但却不想被标记出来,只需要在执行插入待办事项的命令前执行C-u就行了(就像C-u i d这样).
- 使用u命令去除calendar中的标记
命令 | 说明 |
---|---|
p d | 显示当前日期是当年的第几天 |
p C | 显示当前日期的农历信息 |
M-= | 计算一段时间的天数 |
h | 查看当前日期的假期信息 |
a | 查看三个月内的所有节假日信息 |
x | 标记出calendar中所有为节假日的日期 |
d | 查看指定日期的待办事项 |
m | 标记出calendar中所有记有待办事项的日期 |
u | 清除calendar中的标记 |
1.4 导出为HTML
Emacs提供了两个命令来将日历信息,节假日信息和待办事项信息一起导出成HTML文件供我们查看,这两个命令为:
命令 | 说明 |
---|---|
H m | 导出单月的日程安排信息 |
H y | 导出当年的每个月的日程安排信息 |
2 约会提醒功能
- 用M-x appt-activate开启约会提醒功能 要使用约会提醒功能,先需要开启appointment通知功能,命令是M-x appt-activate
- 随后使用M-x appt-add命令来添加一个约会提醒. 执行app-add命令后,在Emacs提醒你依次输入约会开始的时间,提醒的消息,和提前多少分钟开始提醒. 虽有在离约会还有指定分钟的时候,Emacs会在底部弹出一个窗口,窗口的内容显示了指定的提醒消息.
- 使用M-x appt-delete来删除一个约会提醒 执行appt-delete后,Emacs依次显示所有添加的约会提醒,并询问是否删除,按y表示删除,按n表示保留
在mode-line上显示约会提醒的倒计时 通过设置变量appt-display-mode-line的值为非nil,Emacs会在mode-line上显示还有多少分钟到下一个约会的倒计时.
(setq appt-display-mode-line t) ;在mode-line上显示还有多少分钟到约会的倒计时
命令 说明 M-x appt-activate 开启appointment提醒功能 M-x appt-add 添加一个约会提醒 M-x appt-delete 删除约会提醒