把网页快捷键改成 Emacs 风格并支持热重载
28.2/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add renshuo/dsh-emacs-keys该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →数据截至 2026/10/06·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 支持热重载
DeepSeek Harness 网页界面里的 Emacs 键位绑定
README
由 DeepSeek 最新模型翻译生成dsh-emacs-keys
dsh-emacs-keys 是 DeepSeek Harness(DSH)插件,接管 DSH Web 的键盘快捷键,重构为 Emacs 风格绑定。激活后,插件在 window 捕获阶段拦截几乎所有 Ctrl/Alt 组合——包括浏览器默认行为(打印/保存/查找/历史/缩放/剪贴板)——改由插件的 Emacs 命令处理。
快捷键不写在代码里:全部配置在工作区的 emacs-keybindings.json,按功能树组织,遵循 Emacs 记法,改完按 C-x C-r 热重载即可生效。
功能
- 全局导航:C-p/C-n 滚动对话(到边缘有"已到顶部/已到底部"提示),C-v/M-v 翻页,M-</M-> 跳到对话开头/末尾
- 区域操作(任何焦点上下文都生效):C-w 剪切、M-w 复制、C-y yank、M-y yank-pop —— 作用于当前文档选区;C-y 无选区时自动聚焦输入框粘贴;只读内容上的 C-w 降级为复制并提示
- 完整输入编辑(Lexical 输入框):kill-ring(剪切环)、mark/region、undo/redo、字符/单词/行移动,兼容 Lexical 的选区同步模型
- 前缀键:C-x 前缀序列(C-x k 关会话、C-x o 切面板……
展开完整文档(README 剩余 1 节)
dsh-emacs-keys
dsh-emacs-keys 是 DeepSeek Harness(DSH)插件,接管 DSH Web 的键盘快捷键,重构为 Emacs 风格绑定。激活后,插件在 window 捕获阶段拦截几乎所有 Ctrl/Alt 组合——包括浏览器默认行为(打印/保存/查找/历史/缩放/剪贴板)——改由插件的 Emacs 命令处理。
快捷键不写在代码里:全部配置在工作区的 emacs-keybindings.json,按功能树组织,遵循 Emacs 记法,改完按 C-x C-r 热重载即可生效。
功能
- 全局导航:C-p/C-n 滚动对话(到边缘有"已到顶部/已到底部"提示),C-v/M-v 翻页,M-</M-> 跳到对话开头/末尾
- 区域操作(任何焦点上下文都生效):C-w 剪切、M-w 复制、C-y yank、M-y yank-pop —— 作用于当前文档选区;C-y 无选区时自动聚焦输入框粘贴;只读内容上的 C-w 降级为复制并提示
- 完整输入编辑(Lexical 输入框):kill-ring(剪切环)、mark/region、undo/redo、字符/单词/行移动,兼容 Lexical 的选区同步模型
- 前缀键:C-x 前缀序列(C-x k 关会话、C-x o 切面板……),C-u 通用参数
- i-search:C-s / C-r 前向/后向搜索
- 配置热重载:C-x C-r 重新读取配置文件,无需重启插件
- 设置页:DSH 设置 → "Emacs 快捷键",实时渲染当前生效的配置树与来源
安装
本插件是动态 Cordis 插件(Client + Host 双半,运行时定义),不走静态 bundle 安装。两种方式:
方式一:在 DSH 会话中用 cordis 工具定义(推荐)
在任意 DSH 会话里让 Agent 执行:
1. 读取 _body_config_host.js 与 _body_config_client.js 的内容;
2. 调用 cordis_define(kind: "new",idPrefix: "emacs",同时提供 code.host 与 code.client);
3. 调用 cordis_run 激活返回的 package,并在 UI 上批准客户端包。
git clone https://github.com/renshuo/dsh-emacs-keys.git
cd dsh-emacs-keys # 把该目录设为 DSH 会话工作区即可
方式二:引用本仓库源码
插件代码即本仓库的两个函数体文件,Agent 可直接 github:renshuo/dsh-emacs-keys 拉取后按上述流程定义。
使用
激活后无需配置即可使用。内置默认键位(节选):
| 键 | 作用 | 上下文 |
| C-p / C-n | 上/下滚动对话;输入框内为上/下一行 | 全局 / 输入框 |
| C-b / C-f | 后移 / 前移一个字符 | 输入框 |
| M-b / M-f | 后移 / 前移一个单词 | 输入框 |
| C-a / C-e | 行首 / 行尾 | 输入框 |
| C-k | 删除到行尾(进 kill-ring) | 输入框 |
| C-w / M-w | 剪切 / 复制选中区域 | 任何焦点 |
| C-y / M-y | yank 粘贴 / 轮换粘贴 | 任何焦点 |
| C-SPC | 设置标记(mark) | 输入框 |
| C-x C-x | 交换点与标记 | 前缀序列 |
| C-x k / C-x n / C-x p | 关闭 / 下一个 / 上一个会话 | 前缀序列 |
| C-s / C-r | i-search 前向 / 后向 | 全局 |
| M-← / M-→ | 上一个 / 下一个会话 | 全局 |
| C-= / C-- / C-0 | 字号增大 / 减小 / 重置 | 全局 |
| C-g | 取消(keyboard-quit) | 全局 |
| C-x C-r | 热重载配置文件 | 前缀序列 |
完整键位见设置页,或直接读 emacs-keybindings.json。
配置
快捷键配置在工作区根目录的 emacs-keybindings.json,结构为功能树:
{
"categories": [
{
"name": "区域操作(任何焦点)", "context": "region",
"bindings": {
"region.kill": { "key": "C-w", "label": "剪切选中区域(进 kill-ring)" }
}
}
]
}
- Emacs 记法:C=Ctrl、M=Alt、S=Shift、SPC=空格;序列以空格分隔(如 "C-x k")
- context 分发层(与 Emacs 的 buffer/global 语义对应):
- region —— 任何焦点上下文都生效(最先匹配)
- global —— 仅输入框外生效
- editing —— 仅输入框内生效
- prefix:C-x —— C-x 前缀序列(键名为序列最后一个键)
- prefix-start —— 前缀启动键
- 同一按键可在不同 context 绑定不同功能(如 C-p 在 global 是滚动、在 editing 是上一行)
- 修改 key/label/增删分类均为纯配置操作;新增 功能ID 需在 _body_config_client.js 的 IMPL 注册表中登记对应实现
- 改完按 C-x C-r 热重载;配置文件缺失或非法时自动回退到内置默认树(行为与上表一致)
接管范围(interception policy)
| 类别 | 处理 |
| 剪贴板 / 撤销 / 重做 | 全部接管,由插件 kill-ring / undo 实现 |
| 区域操作(C-w / M-w / C-y / M-y) | 任何焦点上下文都生效;C-y 无选区时自动聚焦输入框粘贴 |
| 历史导航(Alt+←/→) | 接管,映射为上一个/下一个会话 |
| 缩放(Ctrl+=/-/0) | 接管,映射为字号增大/减小/重置 |
| 打印/保存/查找/地址栏/书签/源码视图 | 接管,命中 Emacs 映射或显示"未绑定"提示 |
| 标签管理(Ctrl+T、Ctrl+Tab、Ctrl+1-9)、F 键、DevTools | 放行(页面脚本无法阻止) |
| IME 输入法组合 | 放行(绝不劫持中文输入法) |
注意:在普通浏览器标签页中,Ctrl+N(新窗口)/ Ctrl+T(新标签)由浏览器在页面之前处理,任何页面脚本都无法拦截;在 DSH 桌面(Electron)窗口中这些键可正常接管。
架构
emacs-keybindings.json 功能树配置(Emacs 记法) │ fs 服务读取 ▼ ┌─────────────────────────┐ 包私有 RPC ┌──────────────────────────────┐ │ Host 半 │ ───────────▶ │ Client 半 │ │ _body_config_host.js │ │ _body_config_client.js │ │ harness.handle(read) │ │ 解析配置 → 构建分发表 │ └─────────────────────────┘ │ window keydown(捕获)→ IMPL │ └──────────────────────────────┘
- Host 半:通过 fs 服务读取配置文件,经 harness.handle 提供包私有 RPC
- Client 半:启动时拉取配置构建分发表(Emacs 记法规范化、前缀序列解析、变体匹配),缺失时回退内置默认树;按键驱动 IMPL 动作注册表
- 键盘事件在 window 捕获阶段拦截,先于 Lexical/React 处理;剪贴板编辑延迟一个宏任务执行,避免与 Lexical 的 selectionchange 模型同步竞态
- 生命周期:监听器由 ctx.effect 持有,插件停止/更新/卸载时自动移除
开发
- _body_config_host.js / _body_config_client.js:实际部署的两半函数体(纯 JavaScript,无 import/TS/JSX)
- _verify/:基于真实 Lexical + Chromium 的回归模拟环境(serve.js + lexsim.js/v7sim.js),可用于本地验证按键行为
- 修改代码后:重新 cordis_define(kind: "existing",pluginId 不变)→ cordis_run update
兼容性
- DSH Web(http 与桌面 Electron 壳)
- Lexical 输入框(DSH composer,registerPlainText + registerHistory)
- 普通 contenteditable 与 textarea/input 编辑器
许可
GPL-3.0-only(GNU 通用公共许可证第 3 版)。
本项目为自由软件:你可以在该许可证条款下重新分发和/或修改它。衍生作品须同样以 GPL-3.0 发布。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
renshuo/dsh-emacs-keys
把网页快捷键改成 Emacs 风格并支持热重载
相关插件 · 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,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。