内容目录
需求
自己想实现每日笔记看到之前写的想法,这些想法一般都是就是一段文字,方便自己偶尔看看,可能触发新的想法
这样子类似场景应该有一些,笔记不仅仅记录,而是要经常读进行思考
代码
更新
/**
** dic: 文具文件目录
** number: 随机段落
** real_time: 是否实时渲染,每次编辑执行一次,我感觉导致写作干扰,只要打开一次就可以了
**/
function getPagraph(dic, number, real_time) {
var last_modify_time = dv.current().file.mtime.ts
console.log(last_modify_time)
var timestamp = new Date().getTime()
console.log("stamp:" + timestamp)
var gap = timestamp - last_modify_time
if(!real_time && gap < 10*1000 ){
console.log("不能读取")
writeLastParagraph()
return false
}
const folder = app.vault.getAbstractFileByPath(dic);
const files = folder?.children;
const arr = files.map(async (file) => {
const content = await app.vault.read(file)
const lines = content.split("\n")
return lines
})
function generateArray(start, end) { return Array.from(new Array(end + 1).keys()).slice(start) }
Promise.all(arr).then(values => {
//不包含本文件
let noteArr = values.flat()
if (noteArr.length == 0) return
//生成一个连续数值的数组
let arrNum = generateArray(0, noteArr.length - 1)
let result = []
let ranNum = number//个数
for (let i = 0; i < ranNum; i++) {
var ran = Math.floor(Math.random() * (arrNum.length - i))
result.push(arrNum[ran])
arrNum[ran] = arrNum[arrNum.length - i - 1]
}
window.last_result = [];
for (let i = 0; i < result.length; i++) {
let j = result[i]
var write_data = `${noteArr[j]}`
window.last_result.push(write_data)
dv.paragraph(write_data)
}
})
function writeLastParagraph(){
if(window.last_result){
for (let i = 0; i < window.last_result.length; i++) {
let j = window.last_result[i]
dv.paragraph(j)
}
}
}
}
getPagraph("思考/临时思考", 2, false)
可以直接是否实时渲染,因为obsidian默认编辑实时渲染,所以我增加一个判断逻辑从而支持关闭实时渲染。
function getPagraph(dic, number) {
const folder = app.vault.getAbstractFileByPath(dic);
const files = folder?.children;
const arr = files.map(async (file) => {
const content = await app.vault.read(file)
const lines = content.split("\n")
return lines
})
function generateArray(start, end) { return Array.from(new Array(end + 1).keys()).slice(start) }
Promise.all(arr).then(values => {
//不包含本文件
let noteArr = values.flat()
if (noteArr.length == 0) return
console.log(noteArr)
//生成一个连续数值的数组
let arrNum = generateArray(0, noteArr.length - 1)
let result = []
let ranNum = number//个数
for (let i = 0; i < ranNum; i++) {
var ran = Math.floor(Math.random() * (arrNum.length - i))
result.push(arrNum[ran])
arrNum[ran] = arrNum[arrNum.length - i - 1]
}
for (let i = 0; i < result.length; i++) {
let j = result[i]
dv.paragraph(`${noteArr[j]}`)
}
})
}
getPagraph("思考/临时思考", 2)
总结
- 指定文件夹读取笔记内容
- 按照回车切割
- 随机获取指定条数段落
如果实时渲染,如果打一段文字就会进行随机内容,如果不能接受,可以设置当前为源码模式