OpenClaw-hot-skills-zh caldav-calendar-zh
使用 vdirsyncer + khal 同步和查询 CalDAV 日历(iCloud、Google、Fastmail、Nextcloud 等)。适用于 Linux 系统。
install
source · Clone the upstream repo
git clone https://github.com/L-LesterYu/OpenClaw-hot-skills-zh
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/L-LesterYu/OpenClaw-hot-skills-zh "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/caldav-calendar-zh" ~/.claude/skills/l-lesteryu-openclaw-hot-skills-zh-caldav-calendar-zh && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/L-LesterYu/OpenClaw-hot-skills-zh "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/caldav-calendar-zh" ~/.openclaw/skills/l-lesteryu-openclaw-hot-skills-zh-caldav-calendar-zh && rm -rf "$T"
manifest:
skills/caldav-calendar-zh/SKILL.mdsource content
CalDAV 日历(vdirsyncer + khal)
vdirsyncer 将 CalDAV 日历同步到本地
.ics 文件。khal 负责读取和写入这些文件。
首先同步
查询前或修改后务必先同步:
vdirsyncer sync
查看事件
khal list # 今天 khal list today 7d # 未来7天 khal list tomorrow # 明天 khal list 2026-01-15 2026-01-20 # 日期范围 khal list -a Work today # 特定日历
搜索
khal search "会议" khal search "牙医" --format "{start-date} {title}"
创建事件
khal new 2026-01-15 10:00 11:00 "会议标题" khal new 2026-01-15 "全天事件" khal new tomorrow 14:00 15:30 "电话" -a Work khal new 2026-01-15 10:00 11:00 "带备注" :: 这里写描述
创建后,同步以推送更改:
vdirsyncer sync
编辑事件(交互式)
khal edit 是交互式的 — 需要 TTY。自动化时请使用 tmux:
khal edit "搜索词" khal edit -a CalendarName "搜索词" khal edit --show-past "旧事件"
菜单选项:
→ 编辑摘要s
→ 编辑描述d
→ 编辑日期时间范围t
→ 编辑位置l
→ 删除事件D
→ 跳过(保存更改,下一个匹配项)n
→ 退出q
编辑后,同步:
vdirsyncer sync
删除事件
使用
khal edit,然后按 D 删除。
输出格式
用于脚本化:
khal list --format "{start-date} {start-time}-{end-time} {title}" today 7d khal list --format "{uid} | {title} | {calendar}" today
占位符:
{title}、{description}、{start}、{end}、{start-date}、{start-time}、{end-date}、{end-time}、{location}、{calendar}、{uid}
缓存
khal 在
~/.local/share/khal/khal.db 中缓存事件。如果同步后数据看起来过时:
rm ~/.local/share/khal/khal.db
初始设置
1. 配置 vdirsyncer(~/.config/vdirsyncer/config
)
~/.config/vdirsyncer/configiCloud 示例:
[general] status_path = "~/.local/share/vdirsyncer/status/" [pair icloud_calendar] a = "icloud_remote" b = "icloud_local" collections = ["from a", "from b"] conflict_resolution = "a wins" [storage icloud_remote] type = "caldav" url = "https://caldav.icloud.com/" username = "your@icloud.com" password.fetch = ["command", "cat", "~/.config/vdirsyncer/icloud_password"] [storage icloud_local] type = "filesystem" path = "~/.local/share/vdirsyncer/calendars/" fileext = ".ics"
服务提供商 URL:
- iCloud:
https://caldav.icloud.com/ - Google:使用
存储类型google_calendar - Fastmail:
https://caldav.fastmail.com/dav/calendars/user/EMAIL/ - Nextcloud:
https://YOUR.CLOUD/remote.php/dav/calendars/USERNAME/
2. 配置 khal(~/.config/khal/config
)
~/.config/khal/config[calendars] [[my_calendars]] path = ~/.local/share/vdirsyncer/calendars/* type = discover [default] default_calendar = Home highlight_event_days = True [locale] timeformat = %H:%M dateformat = %Y-%m-%d
3. 发现并同步
vdirsyncer discover # 仅首次运行 vdirsyncer sync