让 DSH 按扩展名选用指定应用打开文件,不改系统默认
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add HildebrandYu/dsh-open-with该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 可按扩展名设置「打开方式」:让 DSH 用你选的应用打开文件,不改 macOS 默认应用。含宿主插件和设置页。
README
由 DeepSeek 最新模型翻译生成dsh-open-with — 为 DSH 提供按扩展名区分的「打开方式」
DSH 打开文件时把文件交给 macOS 处理,所以永远用系统默认应用。
这个插件给 DSH 单独建了一份按扩展名映射的应用表——Finder 双击仍用你平时的默认应用,而 DSH 的交付卡片、右侧栏预览和变更审查,打开的是你在这里选的应用。
- 设置 → 文件打开方式(新标签页)编辑这份映射;改动立即生效,不用重启。
- 规则存在 ~/.dsh/open-with.json:{"apps":{"docx":"/Applications/Pages.app"}} —— value 可以是应用的绝对路径、显示名称或 bundle id。没列出的扩展名沿用系统默认。
- 只影响 DSH 自己的「打开」动作。「显示文件位置」仍然在 Finder 里定位。
- 仅支持 macOS(它调用 /usr/bin/open)。MIT。
从插件市场安装,或从 GitHub 安装(dsh plugin add github:HildebrandYu/dsh-open-with),也可以从本地检出挂载 plugin/index.mjs(见下方「安裝」)。
中文說明
让 DSH 内按「开启」时使用你指定的 app,而不动 macOS 的系统预设 app。
展开完整文档(README 剩余 1 节)
dsh-open-with — 为 DSH 提供按扩展名区分的「打开方式」
DSH 打开文件时把文件交给 macOS 处理,所以永远用系统默认应用。
这个插件给 DSH 单独建了一份按扩展名映射的应用表——Finder 双击仍用你平时的默认应用,而 DSH 的交付卡片、右侧栏预览和变更审查,打开的是你在这里选的应用。
- 设置 → 文件打开方式(新标签页)编辑这份映射;改动立即生效,不用重启。
- 规则存在 ~/.dsh/open-with.json:{"apps":{"docx":"/Applications/Pages.app"}} —— value 可以是应用的绝对路径、显示名称或 bundle id。没列出的扩展名沿用系统默认。
- 只影响 DSH 自己的「打开」动作。「显示文件位置」仍然在 Finder 里定位。
- 仅支持 macOS(它调用 /usr/bin/open)。MIT。
从插件市场安装,或从 GitHub 安装(dsh plugin add github:HildebrandYu/dsh-open-with),也可以从本地检出挂载 plugin/index.mjs(见下方「安裝」)。
中文說明
让 DSH 内按「开启」时使用你指定的 app,而不动 macOS 的系统预设 app。
Finder 双击仍然是你平常的预设;只有 DSH 的文件卡片、右侧预览、变更审查这几个「开启」动作会被改写。
为什么不是 SwiftDefaultApps:SwiftDefaultApps(或 duti)改的是 LaunchServices 的全域预设,一改就是整个系统、连 Finder 双击都跟着变,而且它没有「只对某个 app 生效」的范围,也不能嵌进 DSH。
要「只在 DSH 里不同」,只能改 DSH 自己开启文件的那一步——就是这个外挂在做的事。
规则档
~/.dsh/open-with.json
{
"apps": {
"docx": "/Applications/Pages.app",
"md": "Obsidian",
"pdf": "/System/Applications/Preview.app"
}
}
value 也可以只写显示名称("docx": "Pages"),效果相同。
- key:副档名,docx、.docx、.docx、DOCX 都接受(正规化成小写)。
- value:app 的绝对路径或显示名称(例:Pages、Obsidian);也接受 bundle id(例:com.apple.Preview)。
- 没有列到的副档名 → 完全照原本行为(系统预设 app)。
- 这种万用键刻意不支援,避免一个手滑让所有文件都跑掉。
- 存档即生效,不必重启 DSH(外挂每次开启前会看 mtime 重读)。
目前规则(2026-10-18 扫过整个 BrainVault 后选定)
| 类别 | 副档名 | app |
| Markdown | md | Obsidian |
| Word | docx、doc、odt | LibreOffice |
| PDF | pdf | Stirling PDF |
| 试算表 | xlsx、xls、csv | LibreOffice |
| 简报 | pptx | LibreOffice |
| 纯文字 | txt、log、vtt | TextEdit |
| 点阵图 | png、jpg、jpeg、gif | Preview |
| 音讯 | wav、mp3 | QuickTime Player |
| 影片 | mp4 | VLC |
| 向量图 | svg | Google Chrome |
| 程式码 | py、js、mjs、cjs、ts、tsx、sh、rs、css | TextEdit |
| 设定/资料 | json、yaml、yml、toml、jsonl | Obsidian |
| 网页 | html | Google Chrome |
| 压缩 | zip | The Unarchiver |
共 36 条;没有列到的副档名维持系统预设。
设定页(GUI)
DSH 设定(⌘,)→ 左侧「档案开启方式」:
- 列出目前所有「副档名 → app」,每列一个下拉,换了立刻写回(不必按储存)。
- 「— 用系统预设 —」=删掉该条规则。
- 最下面一列可新增副档名(例:epub)+ app。
- 下方显示规则笔数与规则档路径。
资料走宿主路由 GET/POST /local/open-with/config;写入时保留 _readme 等其他栏位,采原子写入(暂存档+rename)。
补丁里的 entry 名称带 ?v=1 是刻意的:dsh-client-modules 会把每条 entry 的 package.json 按 loader name 快取一辈子;这个外挂第一次载入时 package.json 还没有 dsh.client,不快取破一次就永远不会把浏览器半编进前端。查询字串只影响 ESM 的模组身分,找 package.json 时会被忽略。
不要把它清掉,否则设定页会消失(要等下一次 App 重启才回来)。
它在 DSH 里怎么运作
1. DSH 开启文件的最终出口是 sessionController.openPath(),最后呼叫 macOS 的 open <path>。
外挂把它换成 open -a <你指定的 app> <path>。
2. 按鈕/選單要顯示哪個 app 是預設,來自 sessionController.fileApplications();插件把規則指定的 app 排到最前並標成 (default),所以按鈕文字和實際行為一致。
3. 你從選單「這次改用別的 app」時,只有選到規則指定的那個 app 才由插件接手,其餘照原流程。
完全不碰 LaunchServices、duti、defaults write;移除外掛即恢復原狀。
驗證
1) 外掛是否活著、規則是否載入、某個路徑會用哪個 app(乾跑,不會開啟)
curl -s http://127.0.0.1:51714/local/open-with | python3 -m json.tool
2) 連關聯 app 清單一起看(會即時問 macOS,不會開啟)
curl -s "http://127.0.0.1:51714/local/open-with?path=/Volumes/BrainVault/x.docx&apps=1" | python3 -m json.tool
3) 一鍵版
node scripts/verify.mjs "/Volumes/BrainVault/x.docx"
回應重點:
| 欄位 | 意義 |
| status.installed | true = 已接管 openPath(false 時看 status.error) |
| rules | 目前載入的規則 |
| error | 規則檔讀取/解析錯誤(壞檔時保留上一次成功的規則) |
| probe.spec | 這個路徑會用哪個 app(null = 照系統預設) |
| probe.apps | DSH 選單會看到的 app 清單(第一筆、default: true 就是按鈕上的那個) |
| last | 最近一次真正開啟的紀錄(成功或失敗原因) |
安裝
1. 插件市場(推薦)
DSH → 設定 → Plugin Market → 搜尋 dsh-open-with → 安裝 → 重載頁面。
(市場上架需要 repo 滿一天,收錄狀態見 https://github.com/HildebrandYu/dsh-open-with)
2. 從 GitHub 安裝(web profile)
dsh plugin --profile web add github:HildebrandYu/dsh-open-with
3. 本機 checkout 直掛(本機目前的做法)
~/.dsh/cordis.patch.yml:
- insert:
- id: open-with
name: 'file:///Volumes/BrainVault/30-CodingSkills/dsh-open-with/plugin/index.mjs'
再把 hmr.config.root 加上 .../dsh-open-with/plugin(改程式才需要熱重載;只改規則不用)。
plugin/index.mjs 往上一個目錄就是套件根,package.json 宣告了 dsh.bundle 與 dsh.client,所以設定頁的瀏覽器半會一起被載入。
移除
- 市場安裝:市場 → 已安裝 → 移除。
- 直掛:刪掉 # >>> open-with BEGIN 到 # <<< open-with END 那段(含 hmr 的 root),重啟 DSH。
- 規則檔 ~/.dsh/open-with.json 可留可刪;刪掉即完全回到系統預設。
授權
MIT,見 LICENSE。
已知限制
- 只影響 DSH 的「開啟」;「顯示文件位置」(Finder 選取)不受影響,仍是 Finder。
- 工作區外的檔案一樣適用(用絕對路徑);但路徑必須存在且能被 Host 解析,否則 DSH 會回錯誤。
- 選單裡若出現重複的 app(例如 Pages 與 /Applications/Pages.app),那是 macOS 關聯清單本身有兩筆;插件只把第一筆符合的標成預設,兩筆都能開。
- 選單中選擇別的 app 只影響那一次,不會改規則檔。
- DSH 升版若改了 sessionController 的介面,status.installed 會變 false 並在 status.error 說明;此時檔案會回到系統預設行為,不會壞掉。
檔案
package.json 套件根:dsh.bundle(插件市場安裝)+ dsh.client(設定頁) cordis.patch.yml 安裝時插入 profile 的 bundle patch plugin/index.mjs 宿主半:接管 openPath、規則、診斷與設定路由 plugin/client.js 瀏覽器半:設定頁「檔案開啟方式」 test/matching.test.mjs 規則比對與 install/uninstall 的單元測試 test/client.test.mjs 瀏覽器半的 bundle id/分頁註冊/URL 組法 scripts/verify.mjs 打診斷路由,印出規則、probe 與前端是否已收錄
測試:node --test test/(目前 10 項全過)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
HildebrandYu/dsh-open-with
让 DSH 按扩展名选用指定应用打开文件,不改系统默认
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,362已汉化DSH
71.4
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,076已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,814已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。