Skip to content

dsh-sidebar-open-with-app

Verified

dsh-sidebar-open-with-app · v0.2.0 · MIT · Web UI

DSH web 插件:为 better-sidebar 的 Office 预览(.docx/.xlsx/.pptx)加「用系统默认程序打开」按钮,并内置 pdf.js 为 PDF 提供内嵌预览。宿主侧注册 /sidebar-open-with-app/open 路由。

Install

dsh plugin add dsh-sidebar-open-with-app

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Tags

Creators

Readme

dsh-sidebar-open-with-app

DSH web 插件:为 better-sidebar 的文件预览增强——

  • .docx / .xlsx / .pptx:顶部加「用系统默认程序打开」按钮(点击用本机默认程序如 WPS 打开),并把预览委托给 Office 预览插件。
  • .pdf:用 pdf.js 内嵌渲染(分页浏览),顶部同样有「用系统默认程序打开」按钮。

原理

  • 宿主侧:注册一个受信任围栏(loopback + 同源)保护的 /sidebar-open-with-app/open 路由,用系统命令(macOS open / Windows start / Linux xdg-open)打开传入的绝对路径。
  • 客户端侧:通过公开 API ctx.betterSidebar.registerFileViewer 注册 4 个 viewer(priority 10):
    • open-with-app:docx/xlsx/pptx:顶部按钮 + 把预览委托给 Office 预览插件(@huanlin/dsh-plugin-better-sidebar-plugin-office)的同扩展名 viewer;
    • open-with-app:pdf:pdf.js(打进本插件 bundle)内嵌渲染。DSH 桌面应用(Electron)没开原生 PDF 查看器(webPreferences.plugins 未设),所以 iframe 无法渲染 PDF,这里改用 pdf.js 的 canvas 渲染,绕开该限制。

这样既保留了内嵌预览,又提供「用系统默认程序打开」,且不修改 dsh-better-sidebar 的 node_modules —— dsh plugin update 不会抹掉它。

依赖

  • dsh-better-sidebar >= 0.6.0(提供 ctx.betterSidebar 服务)。
  • 可选:@huanlin/dsh-plugin-better-sidebar-plugin-office(提供 docx/xlsx/pptx 内嵌预览;不装则只显示打开按钮 + 提示)。
  • pdfjs-dist(打进 bundle,运行时无需额外安装)。

安装

从 npm 安装(推荐):

dsh plugin --profile desktop add dsh-sidebar-open-with-app

dsh plugin add 会自动写入 profile 依赖并追加 cordis 插入条目,无需手动改配置。装完完全退出并重启 DSH Desktop 应用。

本地开发(link:,改代码即生效):

cd ~/.dsh/profiles/desktop
pnpm add "link:<本仓库本地路径>"
# 并在 ~/.dsh/profiles/desktop/cordis.patch.yml 手动追加:
#   - insert:
#       - id: dsh-sidebar-open-with-app
#         name: 'dsh-sidebar-open-with-app'

构建

客户端 bundle 由 tsdown 打包(把 pdf.js 内联进 lib/client.js):

pnpm install
pnpm build

与 better-sidebar 的差异

  • 该插件提供右键菜单「用系统默认程序打开」——那是 better-sidebar 的内部 UI,没有公开钩子。改为预览页顶部按钮。
  • PDF 预览不依赖 Electron 原生查看器,走 pdf.js。