当前位置: 首页 > news >正文

Qoder Background — 为 Qoder IDE 打造的专属背景图插件

让你的 Qoder 编辑器拥有个性化背景图,支持全屏/侧边栏/面板等多区域、图片轮播、暗色主题自适应。


目录

    • @[TOC](目录)
    • 为什么需要这个插件
      • 原因一:文件完整性校验 (Checksum)
      • 原因二:扩展 API 差异
      • 原因三:文件协议差异
      • 我们的解决方案
    • 功能特性
    • 效果展示
      • 全屏背景
      • 多区域背景
    • 下载与安装
      • 下载
      • 安装
    • 配置与使用
      • 快速开始
        • 使用自己的图片
        • 开启轮播
        • 多区域同时配置
        • 使用内置图片
      • 支持的 5 个区域
      • 配置参数
      • 图片路径格式
      • 应用配置
    • 技术原理简述
      • 注入方式
      • 图片处理
      • 轮播实现
      • 暗色主题自适应
    • 常见问题
    • 许可协议

为什么需要这个插件

vscode-background 是 VS Code 生态中非常受欢迎的背景图扩展(100 万+ 安装量),但它无法在 Qoder 中正常工作。经过对源码的深入分析,我们发现了 3 个关键原因:

原因一:文件完整性校验 (Checksum)

Qoder 的featureFlags.json中包含关键文件的 SHA256 校验值:

{"checksums":{"vs/workbench/workbench.desktop.main.js":"RC5k/103qaDF...","vs/workbench/workbench.desktop.main.css":"ZzndmPa1h/vb...","vs/code/electron-browser/workbench/workbench.html":"HMczP8qp+nYZ..."}}

vscode-background v2 通过向workbench.desktop.main.js末尾追加 JavaScript 代码来注入背景图样式。修改后文件校验值不匹配,Qoder 会触发安全告警甚至拒绝加载。

原因二:扩展 API 差异

vscode-background 是标准 VS Code 扩展,依赖vscode.workspace.getConfiguration()等 API 读取配置。Qoder 虽然基于 VS Code fork,但其扩展环境可能不完整兼容所有 VS Code API,导致扩展激活失败或配置读取异常。

原因三:文件协议差异

VS Code 使用vscode-file://vscode-app/协议访问本地文件,而 Qoder 的product.jsonurlProtocolqoder。虽然 Qoder 内部 JS 仍然使用vscode-file(因为是 fork),但扩展环境中的vscode.Uri行为可能不同,导致本地图片路径解析失败。

我们的解决方案

针对以上问题,我们开发了Qoder Background— 一个 Qoder 专属的背景图扩展:

对比vscode-backgroundQoder Background
注入目标workbench.desktop.main.jsworkbench.html(不受 JS checksum 影响)
注入方式JS 追加 → 运行时创建<style>HTML 中直接插入<style>标签
图片处理vscode-file://协议本地图片转 base64 data URL(不依赖协议)
告警处理无特殊处理CSS 隐藏 checksum 告警(14 种语言)
运行时依赖需要 VS Code API无运行时依赖,纯 CSS 方案

功能特性

  • 多区域背景— 全屏 / 侧边栏 / 面板 / 编辑器 / 辅助栏,每个区域独立配置
  • 内置图片— 开箱即用,安装后无需配置即可看到默认背景
  • 文件夹扫描— 指定文件夹路径,自动扫描所有图片用于轮播
  • 轮播模式— 纯 CSS@keyframes动画实现,零 JS 性能消耗
  • 随机展示— 每次应用配置时随机打乱图片顺序
  • 暗色主题自适应— 浅色主题正常叠加,深色主题自动切换mix-blend-mode: screen
  • CSP 兼容— 本地图片自动转 base64 内嵌,绕过 Electron 安全策略
  • settings.json 配置— 通过 Qoder 原生设置系统管理所有参数

效果展示

全屏背景

多区域背景

下载与安装

下载

版本下载链接说明
v0.1.0qoder-background-0.1.3.vsix首发版本,含内置图片

发行包说明:下载的文件是一个文件夹,包含:

  • qoder-background-0.1.3.vsix— 扩展安装包
  • README.md/README.en.md— 中英文使用说明
  • images/logo.jpg— 插件 Logo

安装

方式一:命令行安装(推荐)

qoder --install-extension qoder-background-0.1.3.vsix

方式二:图形界面安装

  1. 打开 Qoder
  2. Ctrl+Shift+P→ 输入Extensions: Install from VSIX...
  3. 选择下载的.vsix文件
  4. Ctrl+Shift+PReload Window重载窗口

安装后默认即可看到全屏背景图(使用内置图片),无需任何配置。


配置与使用

快速开始

安装后打开设置文件:Ctrl+Shift+POpen Settings (JSON)

使用自己的图片
{"qoder-background.fullscreen":{"images":["D:/my-wallpapers"],"opacity":0.1,"size":"cover","position":"center"}}
开启轮播
{"qoder-background.fullscreen":{"images":["D:/my-wallpapers"],"opacity":0.15,"interval":10,"random":true}}

每 10 秒自动切换一张背景图,随机顺序。

多区域同时配置
{"qoder-background.fullscreen":{"images":["D:/fullscreen-bg.jpg"],"opacity":0.1},"qoder-background.sidebar":{"images":["D:/sidebar-bg.jpg"],"opacity":0.08},"qoder-background.editor":{"images":["D:/editor-bg.png"],"useFront":false}}
使用内置图片
{"qoder-background.fullscreen":{"images":["builtin:images"],"opacity":0.1,"interval":10}}

支持的 5 个区域

区域配置键说明
全屏qoder-background.fullscreen覆盖整个编辑器窗口
侧边栏qoder-background.sidebar左侧文件资源管理器区域
面板qoder-background.panel底部终端/输出/问题面板
辅助栏qoder-background.auxiliarybar右侧大纲/Copilot 等面板
编辑器qoder-background.editor代码编辑区域(支持前景/背景模式)

配置参数

全局配置

参数类型默认值说明
qoder-background.enabledbooleantrue全局开关。设为false后扩展不注入任何样式
qoder-background.autoApplybooleantrue自动应用开关true=监听 settings.json 变化并自动注入背景图;false=关闭自动监听,需要手动执行命令

全屏区域 (fullscreen)专属参数:

参数类型默认值说明
imagesstring[]["builtin:images"]图片路径列表
opacitynumber0.1透明度(0~1),推荐 0.05~0.3
sizestringcover背景尺寸(cover / contain / 具体尺寸)
positionstringcenter背景位置
intervalnumber0轮播间隔秒数,0 = 不轮播
randombooleanfalse随机展示

轮播说明:当interval > 0images包含多张图片时启用,纯 CSS 实现,最多 10 张。仅全屏区域支持轮播

侧边栏 / 面板 / 辅助栏参数:

参数类型默认值说明
imagesstring[][]图片路径列表(仅支持单图,取第一张)
opacitynumber0.1透明度,推荐 0.05~0.15
sizestringcover背景尺寸
positionstringcenter背景位置

注意:这些区域不支持轮播intervalrandom参数无效。

编辑器区域专属参数:

参数类型默认值说明
imagesstring[][]图片路径列表(仅支持单图,取第一张)
useFrontbooleantruetrue=图片在代码上方,false=在下方

注意:编辑器区域不支持轮播,没有opacity/size/position参数。

图片路径格式

格式示例说明
本地文件"D:/photos/bg.jpg"绝对路径,自动转 base64
文件夹"D:/my-wallpapers"自动扫描所有图片
内置图片"builtin:images"扩展自带的图片文件夹
网络图片"https://example.com/bg.jpg"仅 HTTPS

应用配置

修改 settings.json 后,需要应用才能生效(配置变更不会自动写入 workbench.html):

  1. 命令面板Ctrl+Shift+PBackground: 应用背景图并重载Reload Window
  2. 状态栏按钮:点击右下角Background按钮
  3. 自动提示autoApply开启时,保存设置后自动注入并重载
  4. 快捷脚本node apply-from-settings.js(开发调试用)

技术原理简述

注入方式

采用HTML 注入而非 JS 注入:

  • vscode-background v2 向workbench.desktop.main.js追加 JS 代码 → 触发 Qoder 的 checksum 校验
  • 我们向workbench.html插入<style>标签 → 不受 JS checksum 影响
  • workbench.html 的 CSP 允许'unsafe-inline'样式,天然兼容

图片处理

本地图片自动转为 base64 data URL:

用户配置: "D:/wallpapers/bg.jpg" ↓ normalizeImagePath() 文件读取 → toString('base64') ↓ data:image/jpeg;base64,/9j/4AAQSkZJRg... ↓ 写入 CSS: background-image: url('data:...')

这样绕过了 Qoder CSP 中img-src不包含file:协议的限制。

轮播实现

由于 CSP 的script-src不允许'unsafe-inline',无法注入 JS,因此轮播采用纯 CSS 方案:

  • 多图层叠加:body::after+body::before+div元素
  • 每个图层关联独立的@keyframes动画
  • 通过 opacity 关键帧控制同一时刻只显示一个图层
  • 图片间有平滑淡入淡出过渡

暗色主题自适应

body{--qoder-bg-mix-blend-mode:unset;}body:has(> .monaco-workbench.vs-dark){--qoder-bg-mix-blend-mode:screen;}

通过 CSS:has()选择器检测深色主题的.vs-dark类,自动切换混合模式,避免在暗色背景上图片不可见。


常见问题

Q: 修改设置后不生效?
A: 需要执行Background: 应用背景图并重载命令或Reload Window。如果autoApplytrue,保存后会自动应用。

Q: 背景图太淡/太浓?
A: 调整opacity值。推荐:全屏 0.05~0.3,侧边栏/面板 0.05~0.15。

Q: 轮播不工作?
A: 确保interval> 0 且images有多张图片(或指向含多张图片的文件夹)。轮播最多 10 张。

Q: 提示"安装似乎已损坏"?
A: 正常现象,扩展已自动隐藏该告警。如仍出现,可安装 vscode-fix-checksums。

Q: Qoder 更新后背景消失了?
A: Qoder 升级会覆盖 workbench.html。升级后重新执行Background: 应用背景图并重载即可恢复。


许可协议

MIT License

http://www.jsqmd.com/news/963836/

相关文章:

  • Unity LeapMotion SDK避坑指南:从零搭建手势交互UI(含完整配置流程)
  • 2026合肥黄金回行情对比解析,权威龙头测评 - 奢侈品回收评测
  • 2026年武汉软考中级试听课怎么申请?直播网课和报考指导 - 众智商学院职业教育
  • CSDN平台AI标题重写机制揭秘:为什么改1个词就能让CTR提升47%、搜索排名前进12位?
  • 实战应用:基于快马AI构建企业级域名灾备与应急升级系统
  • 新号别搞:结构体+联合体+枚举
  • 株洲奢侈品回收哪里靠谱?2026最新实测门店排名,按实力分级推荐 - 生活测评小能手
  • MotorViz
  • 【信息科学与工程学】【物理/化学科学和工程技术】知识体系081 磁学02
  • 分布式共识算法实战:用 Go 从零实现一个带心跳与选举的可调试 Raft 节点模型
  • JavaQuestPlayer:终极跨平台QSP游戏引擎,3分钟打造你的游戏世界
  • 3分钟解锁网易云音乐隐藏功能:BetterNCM安装工具完全指南
  • STM32H743 HAL版SD卡读写工程包:含时钟配置、DMA传输与实测hex文件
  • 2026年 净化空调生产工厂:高效节能/无尘车间/净化中央空调系统,医用级洁净技术与智慧温控有实力的供应商 - 品牌企业推荐师(官方)
  • 华硕笔记本性能控制的革命:G-Helper如何让你告别Armoury Crate的臃肿体验
  • 2026金刚石刀具供应厂家:东莞金刚石V座刀具、车刀、镗刀、铣刀及氮化硼刀具实力品牌深度解析 - 品牌企业推荐师(官方)
  • 丹阳配镜常见问题解答(2026最新专家版) - 资讯速览
  • 2026年地下水位监测设备厂家排行榜与选型指南 - 王工聊地下水监测
  • TTS芯片和语音播放芯片有什么区别?选型前必读
  • Vidupe视频去重工具:三步搞定重复视频的终极解决方案
  • STM32项目实战:IWDG与WWDG到底怎么选?CubeMX配置与HAL库代码对比解析
  • 答疑解惑|Uboot阶段访问某个地址导致系统挂死(DE25-Nano开发板)(地址对齐)
  • 便携式荧光法溶解氧仪优质厂家TOP10 - 仪表品牌排行榜
  • CSDN数字营销ROI计算总出错?根源竟是站外广告跳转被误判为站内点击——4步数据清洗法立即生效
  • 2026丹阳配镜深度测评:如何为你的配镜需求匹配最佳方案? - 资讯速览
  • 谷歌外链怎么做:手把手教你用Ahrefs直接截胡同行的优质外链
  • 2026泰安市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • pip设置镜像
  • 如何用Untrunc恢复损坏视频文件:从原理到实践的完整指南
  • 刀具磨损实时检测工具包:YOLOv11+EMSCP优化版,含界面操作、批量预测与实拍数据集