<%* // 获取编辑器实例 const editor = app.workspace.activeEditor.editor;
// 获取当前行 const cursor = editor.getCursor(); const line = editor.getLine(cursor.line);
// 1. 将普通文本或普通列表转换成未完成的任务
if (!/^[\s]- [[ x-]]/.test(line)) {
// 将普通文本或普通列表转换为未完成的任务
let newLine;
if (line.startsWith('- ') || line.trim().startsWith('- ')) {
// 如果是普通列表项,在破折号后插入任务标记
newLine = line.replace(/^(\s- )/, '$1[ ] ');
} else {
// 如果是普通文本,转换为任务,保留原有缩进
const indentation = line.match(/^\s*/)[0]; // 获取开头的空白字符
newLine = ${indentation}- [ ] ${line.trim()}
;
}
editor.replaceRange(newLine, { line: cursor.line, ch: 0 }, { line: cursor.line, ch: line.length });
// 将光标移动到行末尾
editor.setCursor({ line: cursor.line, ch: newLine.length });
return;
}
// ! 检查当前任务状态
let newLine = line;
if (line.includes('[ ]')) {
// 如果是未完成状态,先检查是否有内容
if (line.replace('- [ ]', '').trim().length > 0) {
// 标记为完成状态并添加日期
const today = new Date();
const dateStr = today.toISOString().split('T')[0].replace(/-/g, '-');
newLine = newLine.replace(/[ ]/, '[x]');
newLine = newLine + ✅ ${dateStr}
; // 这里添加日期,去掉行末空格
}
// 否则切换回普通列表
else {
// 如果没有内容,直接删除任务标记
newLine = newLine.replace(/[ ]/, '');
}
} else if (line.includes('[x]')) {
// 如果是完成状态,切换回未完成状态
newLine = newLine.replace(/[[x]]/, '[ ]');
newLine = newLine.replace(/\s✅\s\d{4}-\d{2}-\d{2}\s*$/, '');
} else {
// 如果是其他状态,切换为未完成状态
newLine = newLine.replace(/[[ x]]/, '[ ]');
}
// console.log(>>${newLine}<<
);
// 替换当前行——注意是 trim 后的长度,不然可能导致多一个空格 editor.replaceRange( newLine.trimEnd(), { line: cursor.line, ch: 0 }, { line: cursor.line, ch: line.trimEnd().length } );
// 然后运行一下重新排序的任务 // window.open("obsidian://advanced-uri?vault=Obsinote&commandid=templater-obsidian%253A_global%252Ftemplates%252Fcommand%252FtpRunner.md&template=ReOrder List 重排序列表"); // 这里是不是该用那个用户函数了捏…… 🤔
-%>