dsh-plugin-drone

August 21, 2026 · View on GitHub

English | 中文

npm version

把 Windows 资源管理器里的文件 / 文件夹平滑地拖进 dsh 的插件。

当你在资源管理器中按住鼠标左键拖出文件时,插件会通过原生绑定捕获这次拖拽,并把被拖拽项的路径列表以 flextrek-drag 事件广播给 dsh 上下文,让其他模块拿到这些文件做进一步处理(比如加入当前会话的上下文)。

安装

dsh plugin --profile web add dsh-plugin-drone

特性

  • 监听从 Windows 资源管理器拖出的文件 / 文件夹(拖动即触发,无需快捷键)
  • 拖拽事件携带被拖拽项的绝对路径数组派发到 dsh
  • 以 flextrek 服务的形式注册,生命周期由 cordis 管理,卸载时自动注销监听

工作原理

插件基于 dsh 的 cordis 框架编写,由两部分组成:

  • Drone(插件入口):加载时挂载 FlextreckService 服务。
  • FlextreckService(服务):调用 @initencounter/flextrek 提供的 listenExplorerDragFiles,注册一个全局拖拽监听;每当从资源管理器拖出文件时,把路径数组 ctx.emit('flextrek-drag', files) 发出去。服务被 dispose() 时注销监听。

底层依赖 @initencounter/flextrek 是基于 flextrek-rs(Rust 原生库)的 Windows 绑定,因此仅在 Windows x64 上可用。

事件

事件载荷说明
flextrek-dragstring[]从资源管理器拖出的文件 / 文件夹的绝对路径

服务

服务说明
flextrek持有拖拽监听,dispose() 时注销所有句柄

使用

在 dsh 中订阅事件即可消费拖拽结果,例如:

ctx.on('flextrek-drag', (files) => {
  console.log('拖入的文件:', files)
})

环境要求

  • Windows x64(flextrek 原生绑定当前仅支持 win32-x64-msvc)
  • Node.js 运行时

LICENSE

AGPL-3.0