双击 Newplace.py 为 quickadd 更新选择创建笔记位置的目录

功能介绍

如图,大家使用 quickadd 插件创建新笔记的时候,会选择自己新建笔记的位置,而这些位置是要在 qk 的设置界面来一个一个添加的。并且,作为大学生的我,在每一门学科的学习结束后,经常要添加或者删除一些路径,这就让我感到很不舒服,感觉太不优雅了。

(ps:当然 quickadd 也支持每次创建新笔记时手动填写路径,但是每次都打字还是感觉不太方便)

那么,有没有一个方法可以一键更新这个路径呢?当然是可以的,前提是你电脑里有 python 就行。通过 双击 我这个 Newplace.py 文件,
在 ob 关闭时运行,
在 ob 关闭时运行,
在 ob 关闭时运行,
就可以自动更新路径了。(如果在ob开启时运行,json代码会在修改之后又被quickadd原来的设定给替换回来,所以会无效)

注:更新路径的原理是,检索库内的文件夹的名字,添加名为文件夹/Note的路径,如果此方法不一样,需要自行更改代码。

代码实现

import os
import json

# 设置要遍历的库的路径
directory_path = 'D:/Note'

# 获取目录下所有项的名称
items = os.listdir(directory_path)

# 过滤出目录下的文件夹,并排除指定的文件夹
excluded_folders = {'Obsidian', '.obsidian', '.trash', 'Terminal', 'Template', 'Diary'}
folders = [item for item in items if os.path.isdir(os.path.join(directory_path, item)) and item not in excluded_folders]

# 格式化文件夹名称
formatted_folders = ['{}/Note'.format(folder) for folder in folders]

# 指定 quickadd 下的 data.json 文件路径
json_file_path = 'D:/Note/.obsidian/plugins/quickadd/data.json'

# 读取 JSON 文件
with open(json_file_path, 'r', encoding='utf-8') as json_file:
    data = json.load(json_file)

# 更新 'choices' 中 'newnote' 和 'newsection' 条目的 'folders' 字段
for choice in data['choices']:
    if choice['name'] == 'new' and 'choices' in choice:  # 检查是否是 'new' 类型并且有 'choices' 子数组
        for sub_choice in choice['choices']:
            if sub_choice['name'] in ('newnote', 'newsection'):  # 检查子选项的名称
                sub_choice['folder']['folders'] = formatted_folders

# 将更新后的 JSON 内容写回文件
with open(json_file_path, 'w', encoding='utf-8') as json_file:
    json.dump(data, json_file, indent=2, ensure_ascii=False)

注:我的quickadd有两个新建笔记的命令,分别是 newnote 和 newsection 请自行改为自己的命令的名字。

闲聊

分享这个文件主要是帮助大家打开思路,代码文件本身并不具有普适性,还需要大家根据自己需求去更改这段 py 代码,所以最好是有一定代码基础的朋友来尝试修改使用。谢谢大噶!

1 个赞