QuickAdd 脚本 - 右键复制文件夹路径

QuickAdd 脚本 - 右键复制文件夹路径

QuickAdd 脚本 - 右键复制文件夹路径--

运行该脚本后可以在在文件列表中鼠标右键复制文件夹路径。

// 获取库的基本路径
const basePath = (app.vault.adapter).getBasePath().replace(/\\/g, '/');

// 添加到右侧菜单
let addi = (menu, param, func) => menu.addItem(i => i.setTitle('复制文件夹/多个文件路径').setIcon('percent').onClick(async () => await func(param)));

let multiFRN = async (menu, items) => addi(menu, items, async items => {
    let files = items.filter(item => item.extension);
    if (!files || files.length === 0) return;
    const paths = files.map(file => `${basePath}/${file.path}`).join('\n');
    copyToClipboard(paths);
});

let folderFRN = async (menu, item) => !item.extension && addi(menu, item, async folder => {
    copyToClipboard(`${basePath}/${folder.path}`);
});

uniReg('files-menu', multiFRN, 0);
uniReg('file-menu', folderFRN, 0);


// 注册事件
function uniReg(str, func, isVault) {
    let place = isVault ? app.vault : app.workspace;
    place._[str].map(ev => String(ev.fn) == String(func) && place.offref(ev));
    app.plugins.plugins.quickadd.registerEvent(place.on(str, func));
};

// 复制文本
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);
}

Reference

讨论

若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。



反馈交流

其他渠道

版权声明