一键搞定快速操作笔记的元数据并统计最近完成事项
读过 PARA 笔记法的朋友们可能会在自己的笔记中记录 Project(工程),当完成一项工程的时候,就会有满满的收获!
但在刚才又一次「完成」了一条笔记的时候,我突发奇想——
怎么让自己的点滴涓流汇聚成河呢?
元数据。
在笔记属性中添加 done
属性,代表这是一个 完成了的项目;
再添加一个 finished_date
,记录 完成时间。
这样一来,可以借助 Dataview 非常方便地统计和回顾——自己这段时间完成了多少项目。
添加元数据
添加属性最简单但是麻烦的方式,就是手动点击「添加文档属性」,然后加上 复选框
类型的 done 属性,以及 日期
类型的 finished_date 属性。
然后在做完项目的时候,手动打勾并填写日期。
这样太麻烦了……我们 OB 用户不能忍受这种麻烦的。
所以我用 Templater 插件写了个脚本,可以 一键添加完成状态。
脚本如下:
<%*
/*
- Author: Moy
- Create Time: 2024-07-30
- Description: 这是一个用来修改当前文件的元数据的范例脚本
- Version: 1.0
*/
// 配置项
// 两个元数据的属性名,一个是 bool 类型(打勾),另一个是日期类型
const propDone = "done";
const propFinishedDay = "finished_date";
// 这里填写日记的格式
const dateFormat = "YYYY-MM-DD";
const todayDate = moment().format(dateFormat);
// 第一种获得笔记的方法,按照路径匹配,应该会更准确一些
const notePath = tp.file.path(true); // 这里要使用相对路径,否则下面的函数读取不到的
const fileObj = app.vault.getAbstractFileByPath(notePath);
// 第二种方法,用笔记名匹配
const noteName = tp.file.title;
// const fileObj = tp.file.find_tfile(noteName);
function updateFM( fm ) {
fm[propDone] = true;
fm[propFinishedDay] = todayDate;
new Notice(`你在 ${todayDate} 完成了:\n${noteName}\n恭喜! 🎉`);
}
if (fileObj) {
app.fileManager.processFrontMatter(fileObj, (fm) => {
if (fm[propDone]) {
tp.system.prompt("已存在 Done 属性,是否刷新完成日期?", "是")
.then((confirm) => {
if (confirm == "是") {
updateFM(fm);
} else {
new Notice("取消更新完成时间");
}
});
} else {
updateFM(fm);
}
});
}
%>
后续如果有更新会放在:TP Script: Add done and finished date into Frontmatter (Property)
这个脚本就是个模板,按照 TP 通常模板的方式调用即可。
效果演示:
统计
使用 Dataview 不但能列出所有「完成了的笔记」,还能计算出这个项目从创建到完成一共精力了多少天,并按照时间先后进行排序。
效果:
使用的 Dataview 代码:
TABLE
dateformat(date(file.frontmatter["create_date"]), "yyyy-MM-dd") AS 创建时间,
file.frontmatter["finished_date"] AS 完成时间,
choice(file.frontmatter["finished_date"], round((date(file.frontmatter["finished_date"]) - striptime(date(file.frontmatter["create_date"]))).days) + " 天", "无数据") AS 历经
FROM ""
WHERE done AND finished_date
SORT file.frontmatter["finished_date"] DESC
- 这里的
create_date
改成你自己的「创建时间」属性名,如果没有的话,可以把date(file.frontmatter["create_date"])
替换成cday
,这会使用文本本身的创建日期 - 同样的,
done
和finished_date
换成你自己的「完成状态」、「完成时间」属性名
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。