请问有大佬会utools的插件开发吗?
我最近在写一个utools插件,可以读取剪贴板然后将内容追加到obsidian的某个文件中,这样就可以实现全局快捷输入内容到obsidian了。
然而我不是很会js,目前插件的preload.js
文件写成下面的样子,很粗略地实现要求,但还有很多地方能改进:
window.exports = {
"Timestamp": { // 注意:键对应的是 plugin.json 中的 features.code
mode: "list", // 列表模式
args: {
// 进入插件应用时调用(可选)
enter: (action, callbackSetList) => {
// 如果进入插件应用就要显示列表数据
utools.showNotification("进入插件")
callbackSetList([
{
title: "1",
description: '略',
icon: 'logo.png' // 图标(可选)
},
{
title: "2",
description: '略',
icon: 'logo.png' // 图标(可选)
},
{
title: '3',
description: '略',
icon: 'logo.png' // 图标(可选)
}
])
},
// 用户选择列表中某个条目时被调用
select: (action, itemData, callbackSetList) => {
// 函数用于将 payload 追加到文件
const appendPayloadToFile = (payload) => {
const fs = require('fs');
const data = `\n${payload.payload}`;
fs.appendFile('D:\\Project\\JS\\example.txt', data, 'utf8', (err) => {
if (err) {
console.error('文件追加失败:', err);
utools.showNotification('文件追加失败');
return;
}
utools.showNotification('文件异步追加成功');
});
};
// 函数用于处理 payload
const processPayload = (payload) => {
let processedPayload;
switch (payload.type) {
case 'img':
processedPayload = payload;
break;
case 'text':
processedPayload = payload;
break;
default:
processedPayload = null;
}
return processedPayload;
};
// 主函数,处理用户进入插件应用
const ggg = (payload) => {
console.log('用户进入插件应用', payload.code, payload.type, payload);
utools.showNotification(payload);
appendPayloadToFile(payload);
return processPayload(payload);
};
// 注册插件进入事件
utools.onPluginEnter(ggg);
},
}
}
}
有待改进
- 目前只实现了文本的追加,图片的追加思路是写入图片obsidian内链到文件同时移动图片文件到obsidian附件夹
- 更好的编辑框?
其他
- 类似的功能:AHK实现的windows全局快捷输入工具