obsidian社区插件
QuickAdd 脚本 -F2 弹窗式重命名三合一
插件ID:quickadd%E8%84%9A%E6%9C%AC-f2%E5%BC%B9%E7%AA%97%E5%BC%8F%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%89%E5%90%88%E4%B8%80
quickadd%E8%84%9A%E6%9C%AC-f2%E5%BC%B9%E7%AA%97%E5%BC%8F%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%89%E5%90%88%E4%B8%80
quickadd%E8%84%9A%E6%9C%AC f2%E5%BC%B9%E7%AA%97%E5%BC%8F%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%89%E5%90%88%E4%B8%80:F2 重命名三合一 (小标题、嵌入文件、当前文档)
QuickAdd 脚本 -F2 弹窗式重命名三合一
F2 重命名三合一 (小标题、嵌入文件、当前文档)
- 📄文档重命名:当光标所在的段落不是标题和不包含 wiki 链接则是📄文档重命名
- 重命小名标题:当光标所在的段落是标题则重命名标题
- 🗳重命名文件 (笔记、附件):当光标所在的段落包含 wiki 链接则可以重命名文件 (包含笔记和附件)
多个链接请单独选择后运行:
/*
* @Author: 熊猫别熬夜
* @Date: 2024-03-27 11:51:21
* @Last Modified by: 熊猫别熬夜
* @Last Modified time: 2024-05-12 13:35:58
*/
const path = require('path');
const quickAddApi = app.plugins.plugins.quickadd.api;
module.exports = async (params) => {
let file = app.workspace.getActiveFile();
try {
const editor = app.workspace.activeEditor.editor;
// 选择所在的一行
const line = editor.getLine(editor.getCursor().line);
// 获取选中的文本否则自动获取当前行的文本
const selection = editor.getSelection() ? editor.getSelection() : line;
// !如果为标题
const regex = /^(#+)\s(.*)/;
const matches = selection.match(regex);
if (matches) {
// 重命名小标题
app.commands.executeCommandById('editor:rename-heading');
return;
}
// !如果为wiki链接
let selectionEmbed = matchSelectionEmbed(selection);
if (selectionEmbed) {
console.log(selectionEmbed);
const files = app.vault.getFiles();
// Wiki: 获取库所有文件列表
const wikiPath = getFilePath(files, selectionEmbed); // 匹配Wiki链接
console.log(wikiPath);
if (!wikiPath) {
return;
};
// !2024-03-30_14:14:添加excalidraw.md文件
let newName = "";
if (wikiPath.endsWith('.excalidraw.md')) {
newName = await quickAddApi.inputPrompt(`🗳重命名嵌入的Excalidraw文件`, null, path.basename(wikiPath).replace(".excalidraw.md", ""), "");
if (!newName) return;
newName = newName + ".excalidraw";
} else {
newName = await quickAddApi.inputPrompt(`🗳重命名嵌入的${path.extname(wikiPath)}文件`, null, path.basename(wikiPath).replace(path.extname(wikiPath), ""), "");
}
if (!newName) return;
// 2024-04-23_17:16:53 优化一下,合并多余空格
newName = newName.replace(/\s+/g, " ");
await app.fileManager.renameFile(app.vault.getAbstractFileByPath(wikiPath), `${path.dirname(wikiPath)}/${newName}${path.extname(wikiPath)}`);
return;
};
} catch (error) {
// 如果报错则跳过
console.log(error);
}
// !最终重命名文件
let newName = "";
if (String(file.basename).endsWith('.excalidraw')) {
newName = await quickAddApi.inputPrompt(`🎨重命名Excalidraw文件`, null, String(file.basename).replace(".excalidraw", ""), "");
if (!newName) return;
newName = newName + ".excalidraw";
copyToClipboard(newName)
} else {
newName = await quickAddApi.inputPrompt('📄重命名当前文档', null, String(file.basename));
if (!newName) return;
copyToClipboard(newName)
}
// 2024-04-23_17:16:53 优化一下,合并多余空格
newName = newName.replace(/\s+/g, " ");
await app.fileManager.renameFile(file, `${file.parent.path}/${newName}.${file.extension}`);
return;
};
function matchSelectionEmbed(text) {
const regex = /\[\[?([^\]]{2,100}?)(\|.*)?\]\]?\(?([^)\n]*)\)?/;
const matches = text.match(regex);
if (!matches) return;
if (matches[3]) return decodeURIComponent(matches[3]);
if (matches[1]) return decodeURIComponent(matches[1]);
}
function getFilePath(files, baseName) {
let files2 = files.filter(f => path.basename(f.path).replace(".md", "") === path.basename(baseName).replace(".md", ""));
let filePath = files2.map((f) => f.path);
return filePath[0];
}
function copyToClipboard(extrTexts) {
const txtArea = document.createElement('textarea');
txtArea.value = extrTexts;
document.body.appendChild(txtArea);
txtArea.select();
if (document.execCommand('copy')) {
console.log('copy to clipboard.');
} else {
console.log('fail to copy.');
}
document.body.removeChild(txtArea);
}
ChangeLog
- 2024-03-30
- 适配
.excalidraw.md
文件:适配.excalidraw.md
文件,即不会在输入框显示.excalidraw.md 后缀。
- 适配
- 2024-05-12
- 当前文件重命名时点击确认直接复制文件名到剪切板
Reference
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。