calendar和cal-china-x相关的教程
1. Calendar使用
- M-x Calendar 启动
- Calendar的相关使用教程
- 日历界面基本操作 切换月份和年份 下一个月:按下 ] 键,日历会显示下一个月的日期。 上一个月:按下 [ 键,日历会显示上一个月的日期。 下一年:按下 } 键,日历会显示下一年相同月份的日期。 上一年:按下 { 键,日历会显示上一年相同月份的日期。
- 快速跳转到指定日期 按下 g 键,然后输入 y m d 格式的日期(例如 2025 10 1),再按下回车键,日历会快速跳转到指定日期。
- 显示当天日期 按下 t 键,日历会自动定位到当天的日期。
- 查看详细日期信息 将光标移动到某一日期上,按下 RET(回车键),会弹出一个窗口显示该日期的详细信息,包括星期几、节假日等(如果配置了相关节假日信息)。
- 标记和查看节假日 如果已经按照前面的教程配置了 cal-china-x 等扩展 日历会自动标记重要的节假日。节假日通常会以不同的颜色或样式显示,方便识别。
- 日程安排(日记功能) 记录日程 按下 d 键,然后输入要记录日程的日期(格式同快速跳转日期),再按下回车键,会打开对应的日记文件。在日记文件中输入日程信息,保存后,这些日程会与对应的日期关联。 查看日程 将光标移动到某一日期上,按下 D 键,会显示该日期关联的日程信息。
日期计算 计算相对日期 按下 + 键,然后输入一个数字(表示天数),再按下回车键 日历会显示当前日期之后指定天数的日期 按下 - 键则会显示当前日期之前指定天数的日期。
计算两个日期之间的天数 按下 = 键,然后分别输入两个日期(格式同快速跳转日期) 再按下回车键,Emacs 会计算并显示这两个日期之间的天数。
- 退出日历 按下 q 键,即可关闭日历窗口,返回到之前的编辑界面。
自定义的插入时间快捷键
快捷键 功能 势力 C-c m t 插入当前的年月日钟表时间 <2025-02-08/Saturday 18:53:05> C-c m d 插入当前年月日星期 <2025-02-08-039/Saturday> C-c m m 插入当年年月 <2025-February> C-c m y 插入本年度进度表 [/// ] 10% - Calendar的相关设置文件 pC显示农历
2. cal calender命令
2.1. 配置文件
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; -*- coding: utf-8; lexical-binding: t -*- ;;pengshao-calendar.el---calendar相关配置(一直没有调试) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; 设置日历 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;设置日历的一些颜色 (setq calendar-load-hook '(lambda () (set-face-foreground 'diary-face "skyblue") (set-face-background 'holiday-face "slate blue") (set-face-foreground 'holiday-face "white"))) ;;设置我所在地方的经纬度,calendar里有个功能是日月食的预测,和你的经纬度相联系的。 ;; 让emacs能计算日出日落的时间,在 calendar 上用 S 即可看到 (setq calendar-latitude +36.125) (setq calendar-longitude +117.786) (setq calendar-location-name "Laiwu") ;; 设置阴历显示,在 calendar 上用 pC 显示阴历 (setq chinese-calendar-celestial-stem ["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"]) (setq chinese-calendar-terrestrial-branch ["子" "丑" "寅" "卯" "辰" "巳" "戊" "未" "申" "酉" "戌" "亥"]) ;; 设置 calendar 的显示 (setq calendar-remove-frame-by-deleting t) ;(setq calendar-week-start-day 1) ; 设置星期一为每周的第一天 (setq mark-diary-entries-in-calendar t) ; 标记calendar上有diary的日期 (setq mark-holidays-in-calendar nil) ; 为了突出有diary的日期,calendar上不标记节日 (setq view-calendar-holidays-initially nil) ; 打开calendar的时候不显示一堆节日 ;; 去掉不关心的节日,设定自己在意的节日,在 calendar 上用 h 显示节日 (setq christian-holidays nil) (setq hebrew-holidays nil) (setq islamic-holidays nil) (setq solar-holidays nil) (setq general-holidays '((holiday-fixed 1 1 "元旦") (holiday-fixed 2 14 "情人节") (holiday-fixed 3 14 "白色情人节") (holiday-fixed 4 1 "愚人节") (holiday-fixed 5 1 "劳动节") (holiday-float 5 0 2 "母亲节") (holiday-fixed 6 1 "儿童节") (holiday-float 6 0 3 "父亲节") (holiday-fixed 7 1 "建党节") (holiday-fixed 8 1 "建军节") (holiday-fixed 9 10 "教师节") (holiday-fixed 10 1 "国庆节") (holiday-fixed 12 25 "圣诞节"))) ;;Calendar模式支持各种方式来更改当前日期 ;;(这里的“前”是指还没有到来的那一天,“后”是指已经过去的日子) ;; q 退出calendar模式 ;; C-f 让当前日期向前一天 ;; C-b 让当前日期向后一天 ;; C-n 让当前日期向前一周 ;; C-p 让当前日期向后一周 ;; M-} 让当前日期向前一个月 ;; M-{ 让当前日期向后一个月 ;; C-x ] 让当前日期向前一年 ;; C-x [ 让当前日期向后一年 ;; C-a 移动到当前周的第一天 ;; C-e 移动到当前周的最后一天 ;; M-a 移动到当前月的第一天 ;; M-e 多动到当前月的最后一天 ;; M-< 移动到当前年的第一天 ;; M-> 移动到当前年的最后一天 ;;Calendar模式支持移动多种移动到特珠日期的方式 ;; g d 移动到一个特别的日期 ;; o 使某个特殊的月分作为中间的月分 ;; . 移动到当天的日期 ;; p d 显示某一天在一年中的位置,也显示本年度还有多少天。 ;; C-c C-l 刷新Calendar窗口 ;; Calendar支持生成LATEX代码。 ;; t m 按月生成日历 ;; t M 按月生成一个美化的日历 ;; t d 按当天日期生成一个当天日历 ;; t w 1 在一页上生成这个周的日历 ;; t w 2 在两页上生成这个周的日历 ;; t w 3 生成一个ISO-SYTLE风格的当前周日历 ;; t w 4 生成一个从周一开始的当前周日历 ;; t y 生成当前年的日历 ;;EMACS Calendar支持配置节日: ;; h 显示当前的节日 ;; x 定义当天为某个节日 ;; u 取消当天已被定义的节日 ;; e 显示所有这前后共三个月的节日。 ;; M-x holiday 在另外的窗口的显示这前后三个月的节日。 ;; 另外,还有一些特殊的,有意思的命令: ;; S 显示当天的日出日落时间(是大写的S) ;; p C 显示农历可以使用 ;; g C 使用农历移动日期可以使用 (provide 'pengshao-calendar)
2.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 添加循环事项
2.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中的标记
2.4. 导出为HTML
Emacs提供了两个命令来将日历信息,节假日信息和待办事项信息一起导出成HTML文件供我们查看,这两个命令为:
- 命令 说明
- H m 导出单月的日程安排信息
- H y 导出当年的每个月的日程安排信息
2.5. 约会提醒功能
- 用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 删除约会提醒
3. cal-china-x安装与使用
安装 github的安装链接 下载文件:从 cal-china-x 的 GitHub 仓库 下载 cal-china-x.el 文件。 放置文件:把下载好的 cal-china-x.el 文件放到 Emacs 的加载路径中,例如 ~/.emacs.d/lisp 目录 配置加载路径:在 Emacs 配置文件里添加如下代码:
(add-to-list 'load-path "~/.emacs.d/lisp/") (require 'cal-china-x) (setq calendar-mark-holidays-flag t) ;; (setq mark-holidays-in-calendar t) ; before emacs-25 (setq cal-china-x-important-holidays cal-china-x-chinese-holidays) (setq cal-china-x-general-holidays '((holiday-lunar 1 15 "元宵节"))) (setq calendar-holidays (append cal-china-x-important-holidays cal-china-x-general-holidays ;;other-holidays这个地方需要隐藏这句话,要不然错误启动 ))
- 使用教程 之后就能在calendar使用了