Skip to content

全局热键 ​

插件热键由宿主在 Qt 主线程注册(RegisterHotKey),你只声明或调用 API。 禁止插件自己 ctypes.RegisterHotKey(绑错线程会静默失效)。


声明式(推荐) ​

json
"hotkeys": [
  { "action": "translate_selection", "default": "Alt+T", "name": "划词翻译" }
]
  • 插件启用后宿主自动注册,用户可在 设置 → 快捷键 里改绑定。
  • action 对应实现里的 action_<action> 方法。
  • 触发时宿主调用 handle_action(action, {"source": "hotkey"}) →(默认实现)action_<action>(**params)。

运行时 API ​

python
host.register_plugin_hotkey(plugin_id: str, action: str, key_seq: str, name: str = "") -> bool
host.unregister_plugin_hotkeys(plugin_id: str) -> bool
host.get_plugin_hotkeys() -> list[dict]
  • 兼容别名:registerPluginHotkey / unregisterPluginHotkeys / getPluginHotkeys。
  • 任意线程可调;宿主内部切主线程执行 RegisterHotKey。
  • 内部 action 键为 plugin:{plugin_id}:{action}。
  • 冲突检测与内置热键同一套(注册失败返回 False,别静默忽略)。
  • 未声明 hotkeys 的插件也能运行时注册(例如按配置动态加)。

生命周期 ​

  • initialize() 里注册运行时热键;
  • shutdown() 里 host.unregister_plugin_hotkeys(self.id)(宿主也会兜底清理,但自己写更稳);
  • 用户改配置 → update_config() 里重新注册(热键组合可能变了)。

触发路径 ​

用户按热键
   → 宿主派发 hotkey.triggered 事件(只投给本插件)
   → 调用 handle_action(action, {"source": "hotkey"})
   → action_<action>(**params)        默认实现

重活请在 action_* 里 self.run_in_background(...),不要阻塞调用线程。


相关 ​

TransBox - 赋能全人类无界限跨语言交流