所有文章阅读量
UP | HOME

calendar和cal-china-x相关的教程

1. Calendar使用

  1. M-x Calendar 启动
  2. Calendar的相关使用教程
    1. 日历界面基本操作 切换月份和年份 下一个月:按下 ] 键,日历会显示下一个月的日期。 上一个月:按下 [ 键,日历会显示上一个月的日期。 下一年:按下 } 键,日历会显示下一年相同月份的日期。 上一年:按下 { 键,日历会显示上一年相同月份的日期。
    2. 快速跳转到指定日期 按下 g 键,然后输入 y m d 格式的日期(例如 2025 10 1),再按下回车键,日历会快速跳转到指定日期。
    3. 显示当天日期 按下 t 键,日历会自动定位到当天的日期。
    4. 查看详细日期信息 将光标移动到某一日期上,按下 RET(回车键),会弹出一个窗口显示该日期的详细信息,包括星期几、节假日等(如果配置了相关节假日信息)。
    5. 标记和查看节假日 如果已经按照前面的教程配置了 cal-china-x 等扩展 日历会自动标记重要的节假日。节假日通常会以不同的颜色或样式显示,方便识别。
    6. 日程安排(日记功能) 记录日程 按下 d 键,然后输入要记录日程的日期(格式同快速跳转日期),再按下回车键,会打开对应的日记文件。在日记文件中输入日程信息,保存后,这些日程会与对应的日期关联。 查看日程 将光标移动到某一日期上,按下 D 键,会显示该日期关联的日程信息。
    7. 日期计算 计算相对日期 按下 + 键,然后输入一个数字(表示天数),再按下回车键 日历会显示当前日期之后指定天数的日期 按下 - 键则会显示当前日期之前指定天数的日期。

      计算两个日期之间的天数 按下 = 键,然后分别输入两个日期(格式同快速跳转日期) 再按下回车键,Emacs 会计算并显示这两个日期之间的天数。

    8. 退出日历 按下 q 键,即可关闭日历窗口,返回到之前的编辑界面。
  3. 自定义的插入时间快捷键

    快捷键 功能 势力
    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%
  4. 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. 约会提醒功能

  1. 用M-x appt-activate开启约会提醒功能 要使用约会提醒功能,先需要开启appointment通知功能,命令是M-x appt-activate
  2. 随后使用M-x appt-add命令来添加一个约会提醒. 执行app-add命令后,在Emacs提醒你依次输入约会开始的时间,提醒的消息,和提前多少分钟开始提醒. 虽有在离约会还有指定分钟的时候,Emacs会在底部弹出一个窗口,窗口的内容显示了指定的提醒消息.
  3. 使用M-x appt-delete来删除一个约会提醒 执行appt-delete后,Emacs依次显示所有添加的约会提醒,并询问是否删除,按y表示删除,按n表示保留
  4. 在mode-line上显示约会提醒的倒计时 通过设置变量appt-display-mode-line的值为非nil,Emacs会在mode-line上显示还有多少分钟到下一个约会的倒计时.

    (setq appt-display-mode-line t)         ;在mode-line上显示还有多少分钟到约会的倒计时
    
  5. M-x appt-activate 开启appointment提醒功能
  6. M-x appt-add 添加一个约会提醒
  7. M-x appt-delete 删除约会提醒

3. cal-china-x安装与使用

  1. 安装 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这个地方需要隐藏这句话,要不然错误启动
    	      ))
    
    
    1. 使用教程 之后就能在calendar使用了

日期: <2025-02-09/Sunday 19:29:44>

作者: pengshao

Created: 2025-02-17 Mon 23:20

Validate