0x-jerry / vscode-hexo-utils

vscode sidebar for hexo.
https://marketplace.visualstudio.com/items?itemName=fantasy.vscode-hexo-utils
MIT License
47 stars 11 forks source link

支持粘贴本地图片,且保留原图格式 #92

Closed mobeicanyue closed 5 months ago

mobeicanyue commented 5 months ago

Describe the bug 我记得一个星期前还可以直接 ctrl + v 复制图片,到目录下 image

To Reproduce

ctrl + v 复制图片

Expected behavior ctrl + v 复制图片,图片可以直接呈现 markdown 图片形式

Plugin version(please complete the following information): v0.4.1

0x-jerry commented 5 months ago

本插件没有 ctrl+v 相关的快捷键。有一个粘贴图片功能,但默认的快捷键是 ctrl+alt+v。 https://github.com/0x-jerry/vscode-hexo-utils/blob/eb11d51a8a65d683a3d8b6d9684dfda3128b91ec/package.json#L230-L237

看你的截图,应该是 vscode 之前更新的一个功能:https://code.visualstudio.com/updates/v1_86#_paste-a-url-to-automatically-create-a-markdown-link

mobeicanyue commented 5 months ago

本插件没有 ctrl+v 相关的快捷键。有一个粘贴图片功能,但默认的快捷键是 ctrl+alt+v。

https://github.com/0x-jerry/vscode-hexo-utils/blob/eb11d51a8a65d683a3d8b6d9684dfda3128b91ec/package.json#L230-L237

看你的截图,应该是 vscode 之前更新的一个功能:https://code.visualstudio.com/updates/v1_86#_paste-a-url-to-automatically-create-a-markdown-link

你好,好像使用ctrl+alt+v复制进去并没有正确匹配图片后缀格式,比如复制 .webp 生成的是 .png

mobeicanyue commented 5 months ago

https://github.com/0x-jerry/vscode-hexo-utils/blob/9d811b31ac4b1c9ab9e65014fc636656d569ece1/src/commands/pasteImage.ts#L45C5-L49C6

const suffixes: string[] = ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.webp', '.ico', '.heic', '.heif'];
let name = dayjs().format('YYYY-MM-DDTHHmmss');

// 如果选择文本且选择的文本不包含特殊字符,则以选择文本为名称
if (selectText != null && !/[\/\\:*?<>|\s]/.test(selectText)) {
    name = selectText;
}

// 获取文件扩展名
const ext = parsed.ext.toLowerCase();

// 检查文件扩展名是否在支持的后缀列表中,如果是,则使用该后缀
if (suffixes.includes(ext)) {
    name += ext;
} else {
    // 否则默认使用 .png 后缀
    name += '.png';
}

这样可以吗

0x-jerry commented 5 months ago

不可以,因为写 markdown 的时候,图片的描述一般不会是路径。而且这个插件是用的和 vscode-paste-image 一样的方式来写入新的图片,写入的新的图片和原来的图片,理论上是两张不一样图片,而且写入的文件格式是固定的 png 格式。

0x-jerry commented 5 months ago
// 获取文件扩展名
const ext = parsed.ext.toLowerCase();

这里获取的 ext 也不是图片的后缀,而是当前编辑的 markdown 文件的后缀

0x-jerry commented 5 months ago

在研究了这个问题之后,目前 vscode 提供的 Clipboard api 无法解决这个问题,尝试用其它方案,但需要引入 native addon,代价过大,且不易维护。因此不考虑支持这种情况。但是你可以尝试修改 vscode 的 markdown.copyFiles.destination 配置,来达到类似的效果。

  "markdown.copyFiles.destination": {
    "/source/_posts/**/*": "/source/_posts/${documentBaseName}/"
  }

markdown.copyFiles.destination 支持多种变量,也很方便配置

image