ThoughtSpace 日历与日记

unlisted

by ThoughtSpace

Large month/week calendar, two-way Apple Calendar integration, daily and periodic notes, tasks, quadrants and timeline.

Updated 10d agoMIT
View on GitHub

ThoughtSpace 日历与日记

把日历、日记和 Markdown 待办放进同一个 Obsidian 工作流。

独立运行的桌面插件:用主工作区的大日历查看整月和每周安排,用侧栏月历切换日期,用日记记录想法,再通过列表、四象限和时间线组织笔记中的任务。macOS 上还可以连接苹果日历,在插件内查看、新建和修改日程。

版本 验证 许可证 MIT

下载安装包 · 使用指南 · 苹果日历设置 · English · 反馈问题

当前版本 1.3.0。核心日历、日记和任务可独立使用。苹果日历联动为实验功能:已检查原生接口和模拟编辑流程,真实系统授权、真实日程读写往返和云端账户同步仍待验证。

界面预览

大日历月视图:左侧完整月历,右侧当日日程与任务

隔离界面测试中的月视图,日程与笔记均为合成示例。实际界面的字体、颜色跟随 Obsidian 主题。

查看周时间格与窄分栏预览

周视图:全天区域、小时网格和具体时间任务

窄分栏:月历与当日详情自动纵向排列

能做什么

模块功能使用场景
大日历月视图、周视图、完整六周日期、当天标记、日期切换查看整月安排,规划一周
周时间格全天区域、24 小时网格、重叠日程分列、定时 Markdown 任务直观看出时间占用
当日详情查看日程、打开当天日记、跳转任务来源行从计划进入实际笔记
侧栏日历月历、年历、周编号、农历、节气、节日和休班标记写作时随手查日期
日记与清单日记、周记、月记、季记、年记;年月目录日常记录和周期回顾
新建笔记关联将当天新建笔记链接到当天日记找回当天的工作与思考
收集笔记快速记录,保存为普通 Markdown 文件临时想法和资料收集
任务列表全库待办、日期与标签筛选、搜索、排序、分组管理分散在笔记里的任务
四象限固定 2×2 布局、拖动分类、菜单调整按重要程度与紧急程度安排
时间线开始/结束时间、时间冲突提示、空档展示、当前时间安排一天的执行顺序
苹果日历读取所选日历、新建/修改日程、只读日历查看把系统日程放到笔记旁边
原生联动原文编辑、Markdown 任务、主题与正文字体、页签状态恢复延续 Obsidian 的使用习惯

大日历:看全局,也能进入细节

  • 在主工作区打开,月视图固定显示 42 个日期格;周视图展示七天的小时网格。
  • 月格最多显示三条日程摘要,其余通过数量入口查看;当日详情分批加载。
  • 有具体时间的本地任务会进入周时间格,点击后打开原始笔记对应行。
  • 点击周视图空白时间格,可创建该日期和时间的苹果日程。
  • 窄分栏按当前页签宽度调整布局;周视图刷新保留滚动位置。
  • 当前日期、月/周模式和浏览位置可随工作区恢复;多个入口复用同一页签。

日记:文件仍是你的 Markdown

新建日记默认按年、月保存,例如:

日记/
└── 2026/
    └── 10/
        └── 2026-10-01.md

目录名称可设置。旧目录中已经存在的日期日记会优先复用,不在启用插件时批量移动。日记包含想法、任务和阅读关联区;当天新建笔记以链接关联,不复制正文。

侧栏日历与日记清单是独立页面。点击日期、周编号、月份和年份,可进入相应记录;日记正文使用 Obsidian 的正文字体,编辑仍在原生 Markdown 页面中进行。

任务:一份原文,三种组织方式

任务直接从仓库的 Markdown 复选框中读取。安排日期、时间、优先级和完成状态写回原始任务行,保留块引用和其他内容。

- [ ] 09:00 - 10:00 写项目方案 ⏳ 2026-10-01 ⏫ #工作
- [ ] 整理读书笔记 📅 2026-10-03 #阅读
- [x] 完成周回顾 ✅ 2026-10-01
  • 列表:当天、未完成、逾期、未来七天、未安排、当天完成和全部已完成;按标签筛选,按优先级、日期、来源或时间排序。
  • 四象限:拖动任务到“重要且紧急 / 重要不紧急 / 紧急不重要 / 不重要不紧急”;窄侧栏仍保留四象限。
  • 时间线:按具体时间展示当日任务,查看时间冲突和空档。列表和四象限中也能安排具体时间。
  • 来源与撤销:点击来源打开原文;支持撤销上次任务操作。原文已经变化时拒绝覆盖,提示刷新。
  • 代码围栏、代码片段和隐藏注释中的示例不会作为普通待办;支持 Callout 中的任务。

日期与优先级兼容常见的 Tasks 风格标记;这并不等同于实现 Tasks 的全部功能。含 🔁 的重复任务请使用原文及 Tasks 插件完成,本插件不生成下一次重复任务。

安装

环境要求

项目要求
Obsidian桌面版,清单最低版本为 1.6.0
核心日历/日记/任务不依赖 ThoughtSpace 白板或苹果日历连接
苹果日历联动macOS 14+,Apple Silicon 或 Intel
移动端当前未支持;插件标记为桌面专用
Windows / Linux苹果日历接口不可用;核心功能尚未进行这两个系统的原生验证

手动安装

  1. 从 最新 Release 下载 thoughtspace-calendar-1.3.0.zip。
  2. 解压,将内容放入你的 Obsidian 仓库 .obsidian/plugins/thoughtspace-calendar/。
  3. 确认 manifest.json 直接位于该插件目录下,没有多套一层同名文件夹。
  4. 打开 Obsidian 设置 → 第三方插件,启用 ThoughtSpace 日历与日记。更新安装后重新加载插件。
.obsidian/plugins/thoughtspace-calendar/
├── main.js
├── styles.css
├── manifest.json
└── native/
    └── ThoughtSpaceCalendarBridge.app/
        └── Contents/
            ├── Info.plist
            ├── MacOS/calendar-bridge
            └── _CodeSignature/CodeResources

需要苹果日历时请使用完整 ZIP。 单独下载三个 JavaScript/CSS/manifest 文件不会带上原生桥接程序。native/ 的目录结构和可执行权限必须保留。

本项目通过 GitHub Release 手动分发,目前未声明已经进入 Obsidian 社区插件市场。安装前可用同一 Release 的 SHA256-1.3.0.json 或 FILES-1.3.0.txt 核对文件。

更新与旧日历迁移

  • 更新只替换运行文件和 native/,保留原有 data.json、笔记和个人设置。
  • 与 ThoughtSpace 白板 同时使用时,白板需为 0.94.0 或更新版本,避免旧内置日历重复注册。
  • 独立插件第一次启用时,仅读取旧白板配置中的日历相关设置;不改写白板配置,不迁移苹果日历授权。
  • 若需要把旧根目录日记归档到年月目录,使用设置里的“整理旧日记”。会先备份,目标同名时跳过。
  • 本地源码工程可运行 node scripts/install.mjs '/path/to/your/vault'。安装脚本备份旧插件和启用列表,保留用户文件,校验后替换;失败时回滚。

快速开始

  1. 点击左侧工具栏 ThoughtSpace 日历,打开右侧“日历与任务”。
  2. 点击日期,进入该日日记;点击“编辑日记”在原生 Markdown 页面中写作。
  3. 点击 打开大日历,切换月/周查看。任务加上 09:00 - 10:00 等时间后,可显示到周时间格与时间线。
  4. 在任务区用图标切换列表、四象限和时间线;用“更多筛选”调整范围、标签和排序。
  5. macOS 用户可通过“大日历与苹果日历”连接页面授权并选择日历。

命令面板也提供以下入口:

命令名称作用
打开日历与任务打开侧栏日历与待办
打开日记与清单打开独立日记页面
打开今日日记创建或复用今日日记
打开大日历在主工作区查看月/周日程
苹果日历连接与选择授权、选择显示日历和默认可写日历
收集笔记快速创建 Markdown 笔记
整理旧日记到年月目录备份后归档旧日期笔记

苹果日历双向联动

数据来自 macOS 系统 EventKit。 插件不直接操作苹果日历数据库,不需要填写 iCloud 密码,也不自行实现云端账户同步。

  1. 在大日历右上角打开日历设置,或通过插件设置打开连接页面。
  2. 点击“连接苹果日历”,在系统提示中允许完整读写权限。启动插件和打开日历不会自动请求权限。
  3. 勾选要显示的日历,并选择一个可写的默认日历。勾选为空表示不显示任何日历。
  4. 在插件内创建日程,或点击已有日程修改标题、日期、时间、全天状态、目标日历、地点和备注。
行为当前实现
插件 → 苹果日历通过 EventKit 创建和修改日程
苹果日历 → 插件手动刷新、窗口重新获得焦点、可见页面定时刷新
只读/订阅日历可以查看,不允许保存修改
重复日程修改当前场次;不编辑整套重复规则
多处同时编辑保存前检查日程版本,冲突时保留草稿
保存超时/结果不明不自动重试;先刷新确认,避免重复创建
全天日程界面结束日为包含的最后一天,内部转换为排他结束时间
断开连接停止插件读取;系统权限仍由 macOS 设置管理

当前不包含删除日程、苹果提醒事项、重复规则编辑、Markdown 任务自动转为苹果日程,也不是即时推送同步。完整操作、权限和故障排查见 苹果日历指南。

个性化设置

设置可调整内容
日记目录新日记保存的根目录;修改不会自动搬动旧文件
收集笔记目录快速收集笔记的保存位置
当天笔记关联是否将当天新建笔记链接到日记
农历/节日/节气/休班分别控制显示
日历密度舒适、紧凑
界面风格柔和、纸张
主题色森林绿、蓝色、琥珀、玫瑰
玻璃效果开启或关闭
苹果日历连接状态、显示日历、默认可写日历

样式限制在插件自身容器中,字体沿用 Obsidian 设置。农历计算在本地离线运行;内置中国大陆调休数据覆盖到 2026 年,未收录年份不猜测休班安排。

流畅性和数据保护

  • 日历和任务页复用同一个任务索引;初次加载后只更新发生变化的文件,避免反复扫描全库。
  • 苹果日程只查询可见范围:最大 62 天、最多 2,000 条;范围缓存最多 12 个,同类并发请求合并。
  • 日期切换、断开连接和关闭插件后,过期结果不会写回当前界面。
  • 日程保存与设置写入排队执行,防止旧表单覆盖较新的设置。
  • 月格摘要、任务和当日详情控制单次渲染量;关闭页面时释放监听和计时器。
  • 任务修改检查原文行,撤销也检查更新后的行;无法确认时停止写入。

这些机制降低重复读取和意外覆盖的风险。大规模库、跨平台运行和长期内存表现仍需要持续验证。

验证结果与范围

1.3.0 的本地发布验证记录如下,机器路径和私人仓库内容已从公开记录中移除:

检查结果覆盖范围
自动化测试176 通过,0 失败日期/任务解析、索引、日记链接、布局模型、设置迁移、并发、原生输入校验、安装保护
隔离 Chrome 界面15 项通过月/周切换、时间边界、冲突草稿、只读日程、窄分栏、滚动恢复;合成数据
原生 Obsidian20 项通过入口、页签复用、重载状态、布局、原生弹窗、接口状态;日程编辑使用内存夹具
macOS 桥接包已检查arm64 + x86_64、macOS 14 最低目标、签名及解压后的可执行权限

尚未验证: 系统授权的实际交互、真实苹果日程创建/修改往返、不同账户的云同步、Windows/Linux 原生界面和长期内存表现。以上测试数量不代表这些项目已经通过。

详见 公开验证记录、测试范围说明 和 1.3.0 更新说明。GitHub Actions 另行运行构建、自动化和隔离界面检查;它不读取真实日历。

开发与贡献

git clone https://github.com/YuguangLi-lab/obsidian-thoughtspace-calendar.git
cd obsidian-thoughtspace-calendar
npm ci
npm run build
npm test

# macOS:修改 Swift 原生接口后重新生成通用应用包
npm run build:native

# 隔离浏览器交互检查
npx playwright install chromium
npm run test:browser

# 生成完整发布 ZIP 和 SHA256 清单(macOS)
npm run package

建议 Node.js 22+;原生构建需要 macOS 与 Xcode Command Line Tools。main.js、styles.css、manifest.json 和桥接应用包随源码提供,普通用户无需自行编译。

模块说明、构建与测试约束见 开发指南。反馈 bug 时请写出版本、系统、操作步骤和预期结果;使用脱敏的最小任务示例,避免上传私人笔记或授权信息。

相关项目与许可证

本项目采用 MIT 许可证。第三方组件与参考项目的署名和许可见 THIRD_PARTY_NOTICES.md。本插件与 Obsidian、Apple、Chinese Calendar 的作者没有官方合作关系。

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.