nfredmond/prompt-injection-widget
GitHub: nfredmond/prompt-injection-widget
一个轻量的本地桌面小工具,用于在当前聚焦应用中定时或热键触发提示与宏操作。
Stars: 0 | Forks: 0
# 提示小部件
一个用于存储可重用提示并在**当前聚焦的应用**中插入选中提示的小型本地桌面小部件。
运行一个定时器,可**粘贴提示**、**播放录制好的宏**或两者兼有——支持循环或一次性触发。
专为 Linux (X11) 构建。单个 Python 文件,仅一个依赖(`pynput`)。
## 运行
```
chmod +x run.sh
./run.sh
```
首次运行会在本地创建 `.venv` 并静默安装 `pynput`。后续运行会完全跳过 `pip`,除非 `requirements.txt` 或系统 Python 版本发生变化——启动静默且即时。
## 窗口布局
标题栏显示一个大的 `MM:SS` 倒计时和主要定时器按钮(开始、暂停/恢复、停止、立即发送)。其余内容位于四个标签页中:
- **提示(Prompts)** — 管理提示列表、预览、拖拽排序、搜索
- **定时器(Timer)** — 间隔输入(`mm:ss` 或十进制分钟)、预设芯片、动作模式、循环/随机/发送后回车/响铃、点击目标捕获
- **宏(Macros)** — 录制、预览动作、重命名或删除
- **设置(Settings)** — 主题、始终置顶、发送时响铃、全局热键、导入/导出
底部有一条状态条,根据状态显示不同颜色(中性 / 运行中 / 暂停 / 错误)。
窗口标题会反映当前状态:`Prompt Widget — 4:23`、`— paused 4:23` 或 `— recording`(录制宏时)。
## 典型流程
1. 使用 **添加(Add)** 或 `Ctrl+N` 添加提示。
2. 从列表中选择一个。使用搜索框(`Ctrl+F`)按名称过滤。
3. 选择 **使用 Ctrl+V 粘贴** 或 **键入文本**。粘贴更快,但某些应用会屏蔽模拟剪贴板事件——如果粘贴失败则退回到 **键入文本**。
4. 默认开启 **发送后回车**。如果目标应用不应在每次提示后自动提交,请将其关闭。
5. 设置定时器间隔并点击 **启动定时器**。预设(1m / 5m / 7m / 15m / 30m)可一键选择;手动输入支持 `7`、`7.5` 或 `7:30`。
6. 选择定时器动作:**仅提示**、**仅宏** 或 **宏后提示**。
7. **循环** 会重复执行动作;关闭则为一次性触发。**随机** 会在每次滴答时选择不同的已保存提示(不重复)。
8. 在倒计时归零前将光标置于目标应用中——或使用 **点击前粘贴**(见下文)。
9. **立即发送(Send Now)**(或 `Ctrl+Enter`)会立即执行已配置的动作,而不等待倒计时。
该小部件默认总在最上层。如需允许其他窗口覆盖它,请在设置中关闭此选项。
## 提示模板
提示在发送时会展开若干占位符标记,便于插入当前日期或当前剪贴板内容到目标应用。
| 标记 | 展开内容 |
| --- | --- |
| `{date}` | `2026-04-16`(本地 ISO 日期) |
| `{time}` | `14:30` |
| `{datetime}` | `2026-04-16 14:30` |
| `{weekday}` | `Thursday` |
| `{clipboard}` | 触发提示时剪贴板中的内容 |
| `{prompt_name}` | 被发送的提示名称 |
标记仅在发送时展开。预览窗格会保留其字面形式以便查看和编辑。`{clipboard}` 使用为剪贴板恢复保存的快照——因此使用 `{clipboard}` 的提示会获取用户复制的内容,而不是提示自身的正文。
## 每个提示的覆盖设置
每个提示可在需要与全局行为不同时覆盖两个全局发送选项:
- **插入方式** — 强制使用 **使用 Ctrl+V 粘贴** 或 **键入文本**,忽略定时器标签页的全局选择。
- **发送后回车** — 强制为该提示开启或关闭回车。
通过“编辑”(或 `Ctrl+E`)打开提示,在对话框中设置覆盖并保存。两者默认均为 **使用默认**,表示使用定时器标签页的设置。
## 键盘快捷键
| 快捷键 | 动作 |
| --- | --- |
| `Ctrl+N` | 新建提示 |
| `Ctrl+E` | 编辑选中提示 |
| `Ctrl+D` | 复制选中提示 |
| `Delete` | 删除选中提示 |
| `Ctrl+F` | 聚焦提示搜索 |
| `Ctrl+Z` | 撤销最近一次提示/宏删除(20 步堆栈) |
| `Ctrl+Enter` | 立即发送 |
| `Alt+Up` / `Alt+Down` | 移动选中提示顺序 |
| `Space` | 暂停/继续(当提示列表有焦点时) |
| `Escape` | 停止定时器,或在搜索框有焦点时清除搜索 |
快捷键受模式限制:当焦点位于文本输入框或预览窗格时不会触发。
## 全局热键
系统级暂停/恢复热键即使在窗口未聚焦时仍有效。
默认值为 `++`;可在设置中修改或清空以禁用。
该组合使用 `pynput` 语法(例如 `+`)。
## 宏(Macros)
1. 切换到 **宏(Macros)** 标签,点击 **添加宏(Add Macro)** 并命名。
2. 录制会立即开始——在其他应用中执行点击和按键(按 **F8** 可提前停止录制而不触碰小部件)。
3. 选择宏以查看前几步操作和总步数。
4. 按需重命名或删除。
宏在后台线程运行,因此即使播放时间较长,UI 和倒计时仍保持响应。
宏标签页按顺序显示每一步及其相对延迟和类型。可选择某行并使用 **删除步骤** 移除误点,或使用 **上移 / 下移** 重新排序。更改会立即保存到磁盘。
## 提示的光标位置
如果目标应用在首次发送后丢失光标,请在定时器标签页启用 **点击前粘贴**。
- **实时鼠标** 显示当前指针坐标(节流;仅在定时器标签页激活)。
- 点击 **点击以设定目标**,然后在屏幕上点击目标字段。
- 启动定时器并启用 **循环**。
每次粘贴前,小部件会点击该坐标,然后注入 `Ctrl+V`。
## 安全中止与剪贴板卫生
- 如果按下任何修饰键(Ctrl / Shift / Alt)时定时器触发,该滴答会被跳过,状态栏会记录提示。防止在密码字段或正在输入的快捷键中触发。
- 粘贴路径会保存并恢复你的剪贴板,确保单次滴答不会永久覆盖你复制的内容。
## 导入 / 导出 / 撤销
设置标签页提供按钮,可将提示或宏导出为 JSON,或将它们导入回来。导入会合并并自动去重名称。`Ctrl+Z` 可撤销最近一次提示或宏删除(20 步堆栈,退出时清空)。
## 数据文件
```
~/.local/share/prompt-injection-widget/prompts.json # prompt list
~/.local/share/prompt-injection-widget/macros.json # recorded macros
~/.local/share/prompt-injection-widget/settings.json # UI preferences
~/.local/share/prompt-injection-widget/widget.log # rotating logs
```
## 桌面启动器
项目根目录提供一个 `.desktop` 文件。安装方式如下:
```
cp prompt-widget.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
```
启动器使用仓库内的绝对路径;如果移动了项目,请编辑对应路径。
## 注意事项与已知限制
- **Wayland:** `pynput` 的鼠标位置查询和模拟的 Ctrl+V 注入在 Wayland 上往往会静默失败。小部件会检测 Wayland 会话并显示一次性提醒。如果 `ydotool` 在 `PATH` 中,小部件会通过它路由粘贴(Ctrl+V)和回车——请安装 `ydotool` 并使用 `systemctl --user start ydotoold` 启动守护进程。鼠标定位功能(点击目标、宏播放)仍依赖 `pynput`,需要 X11 才能可靠工作。
- **锁定的应用程序**(某些 Electron 构建、Steam 覆盖层、远程桌面客户端)可能会忽略模拟的按键事件,无论会话类型如何。此时请改用 **键入文本**,或录制一个通过应用自身 UI 点击的宏。
标签:pynput, Python, SEO: Linux 工具, SEO: 宏录制工具, SEO: 提示词工具, SEO: 桌面自动化, SEO: 计时粘贴, X11, 主题, 倒计时, 剪贴板, 单文件应用, 宏录制, 定时器, 导入导出, 循环执行, 快捷键工具, 按键模拟, 提示词管理, 撤销与恢复, 无依赖安装, 无后门, 桌面小工具, 热键, 状态栏, 置顶窗口, 计时器, 逆向工具, 随机选择, 音效提示