求大佬 帮忙写一个 JS 代码,功能为为思源的导出 markdown 格式 添加快捷键。或者告知写代码方法也行,我是小白。
或者能把这下方这个 "Markdown 批量转换" 插件设置一个快捷键,能呼出转换面板 就更好啦~
求大佬 帮忙写一个 JS 代码,功能为为思源的导出 markdown 格式 添加快捷键。或者告知写代码方法也行,我是小白。
或者能把这下方这个 "Markdown 批量转换" 插件设置一个快捷键,能呼出转换面板 就更好啦~
确实用 zip 解压的方式较复杂,不过还有更简单方法,比如,直接读取文档 Markdown 源码,然后把内容直接写入到文件,这样只需要两步即可。
代码如下
// alt+d 导出markdown文档(docId为空导出当前文档)
// see https://ld246.com/article/1743689632996
{
// 导出文档的id(docId为空导出当前文档)
const docId = '';
// 写入markdown文件路径
// 需填写绝对路径
// windows路径需要用\转义,比如 c:\\
const toPath = '/your/path/Downloads/';
// alt+d事件
document.addEventListener('keydown', async function(event) {
// 检查是否按下了 Alt 键和 D 键,并确保没有按下其他修饰键
if (
event.altKey && // Alt 键被按下
event.code === 'KeyD' && // D 键被按下
!event.shiftKey && // Shift 键未被按下
!event.ctrlKey && // Ctrl 键未被按下
!event.metaKey // Cmd 键(Meta 键)未被按下
) {
event.preventDefault(); // 阻止默认行为(可选)
if(!isElectron()) {
showMessage('仅在Electron客户端有效', true);
return;
}
// 获取Markdown文本
const doc = await fetchSyncPost("/api/lute/copyStdMarkdown", {id: docId || getCurrentDocId()});
if(!doc || doc.code !== 0) {
showMessage(doc.msg || '获取文档失败', true);
return;
}
const markdown = doc.data || '';
// 写入文本到文件
const fs = require('fs');
if (!fs.existsSync(toPath)) {
showMessage('保存路径不存在', true);
return;
}
let title = '未命名文档';
if(docId) {
const docInfo = fetchSyncPost('/api/block/getDocInfo',{id:docId});
if(docInfo && docInfo.data && docInfo.data.name){
title = docInfo.data.name;
}
} else {
title = getCurrentDocTitle() || title;
}
const path = require('path');
fs.appendFileSync(path.join(toPath, title + '.md'), markdown, 'utf8');
showMessage('已导出成功', false, 3000);
}
}, true);
// 获取当前文档id
function getCurrentDocId() {
return (document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title')?.dataset?.nodeId;
}
function getCurrentDocTitle() {
return (document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title__input')?.textContent;
}
// api请求
async function fetchSyncPost(url, data, method = 'POST') {
return await (await fetch(url, {method: method, body: JSON.stringify(data||{})})).json();
}
function isElectron() {
return navigator.userAgent.includes('Electron');
}
// 发送消息
function showMessage(message, isError = false, delay = 7000) {
return fetch('/api/notification/' + (isError ? 'pushErrMsg' : 'pushMsg'), {
"method": "POST",
"body": JSON.stringify({"msg": message, "timeout": delay})
});
}
}
试试这个 alt+d 导出 markdown 文档(docId 为空导出当前文档)
// alt+d 导出markdown文档(docId为空导出当前文档)
// see https://ld246.com/article/1743689632996
{
// 导出文档的id(docId为空导出当前文档)
const docId = '';
// alt+d事件
document.addEventListener('keydown', async function(event) {
// 检查是否按下了 Alt 键和 D 键,并确保没有按下其他修饰键
if (
event.altKey && // Alt 键被按下
event.code === 'KeyD' && // D 键被按下
!event.shiftKey && // Shift 键未被按下
!event.ctrlKey && // Ctrl 键未被按下
!event.metaKey // Cmd 键(Meta 键)未被按下
) {
event.preventDefault(); // 阻止默认行为(可选)
const result = await fetchSyncPost('/api/export/exportMd', {id:docId||getCurrentDocId()});
window.open(result.data.zip);
}
}, true);
// 获取当前文档id
function getCurrentDocId() {
return (document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title')?.dataset?.nodeId;
}
// api请求
async function fetchSyncPost(url, data, method = 'POST') {
return await (await fetch(url, {method: method, body: JSON.stringify(data||{})})).json();
}
}
感谢感谢~,我按照您的代码一次成功。导出的文件是 zip 文件夹,然后我在这个基础上用 ai 修改了一下,按 alt+d 之后,直接导出 markdown 文件,不经过浏览器下载。
但是遇到一个问题,每个文件导出时都会弹出一个“存储为”的窗口,让我选择 文件保存路径并填写文件名,文件名的位置 默认显示"未命名文档.md",每次都要修改,这就很麻烦。如果能够把这一步绕过去,直接存储,并以思源内的原始文件名进行保存,就太好了。如果绕不过去的话,能不能在每次都弹出这个窗口时,让文件名默认显示为 我导出文档的文件名呢, 这样我每次导出只需要按一个回车。具体代码如下:
Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。
深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。
CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。
黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。
A second brain, for you, forever.
强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。
阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。
i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。
iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。
NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。
Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。
如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。
AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。
提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。
又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。
Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。
Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。
Open Source, Open Mind, Open Sight, Open Future!
让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
新手上路,请谨慎驾驶!
Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。
欢迎访问我们运维的实例: https://wide.b3log.org
App(应用程序,Application 的缩写)一般指手机软件。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。
深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。
你比 99% 的人都优秀么?
HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。