Repository navigation
Releases: petrel-cn/prompt-generator
Releases · petrel-cn/prompt-generator
Release list
v2.1.0
文本区字号可调、已保存提示词可改标题。
新增
文本区字号可调
- 配置对话框新增「字体大小」下拉框(位于「思考模式」之后):9 / 10 / 11 / 12 / 13 磅,默认 9 磅(与 2.0 显示一致)
- 只作用于主窗口的「用户输入」「英文提示词」与查看窗口的同名两个文本框;按钮、标签、图片上传区、图片路径框、状态栏等其余部分字号不变
- 保存配置后主窗口立即生效,查看窗口下次打开时生效
- 越界、缺失或非法的取值在加载时钳制回合法档位(0 → 9 磅,> 13 → 13 磅)
config.json新增fontSize键,旧配置缺失时按 9 磅处理
修改已保存提示词的标题
- 查看窗口新增「修改标题」按钮,位于「复制英文」与「删除」之间
- 沿用「保存提示词」的对话框样式,弹出时自动填入原标题,光标停在末尾便于接着修改
- 只能修改用户自己输入的那段文字:列表显示时自动附加的
<Pony>前缀与保存时间既不显示在输入框内,也不会被改写 - 标题允许改空(列表显示为「无标题」);写盘失败时回滚内存中的修改并提示
变更
- 版本号 2.0 → 2.1.0
- 配置对话框高度 620 → 660,为「字体大小」下拉与两行提示文字腾出空间;提示文字补充字号作用范围说明
SaveDialog支持自定义窗口标题、说明文字、附加提示与预填标题,保存与改名共用同一套外观(无参构造行为不变);预填文本在Shown之后再摆一次插入符,避免被控件获得焦点时的默认行为覆盖Defaults新增FontSizeBase(基准档 N = 9)/FontSizeOptionCount(5 档)/FontSizeMax与NormalizeFontSize/FontSizeDisplayName纯函数,便于离线回归测试覆盖SavedEntry新增只读派生属性EditableTitle(=title原文,不参与序列化):改名的预填与写回都以它为准,与列表显示文本Display严格分开- 主窗口与查看窗口在销毁时释放自己创建的文本区字体;配置对话框「保存失败」后不再把未落盘的字号应用到主窗口
Storage新增RemoveEntryAt(entries, index)纯函数(返回移除后的新列表,原列表不变)与TryRemoveEntryAt(entries, index, save, out committed, out error)事务函数(先算新列表 → 写盘成功才提交);写盘动作以委托注入,因此「写盘失败不得提交」这条顺序性质能离线断言
升级说明
- 无需迁移:
config.json自动补齐fontSize(默认 9 磅),schemaVersion仍为 2,prompt.txt与saved.json不受影响 - 已保存记录的标题格式不变,
<Pony>前缀与保存时间仍然只在列表显示时派生
修复
以下为 2.0 的遗留问题,本次一并修掉:
- 删除记录写盘失败会使列表与内存错位(中等,数据级):查看窗口删除记录时先改内存列表再写盘,写盘失败(
saved.json被占用 / 只读 / 磁盘满 / 无写权限)只提示不回滚,而列表行号与内存下标是一一绑定的,因此:此后「复制英文」会静默复制相邻记录的内容,「修改标题」会改到相邻记录,下一次「删除」会删错记录(确认框里的标题与高亮行对不上);若失败的是最后一行,还会出现「明明有高亮行却提示请先选择一条记录」且右侧内容全空。更隐蔽的是,之后任何一次写盘成功都会把这次失败的删除持久化。现改为「先用Storage.RemoveEntryAt算出新列表 → 写盘成功后才替换内存列表 → 再删缩略图并刷新」(由Storage.TryRemoveEntryAt承载),失败时内存、界面与磁盘三者均保持原样 - 配置保存失败会把未落盘的值留在内存(轻微):配置对话框直接改写
Storage.Config这份活对象,而写盘失败只弹提示、值不回滚,因此之后任何一次Storage.SaveConfig(例如关闭查看窗口写几何)都会把这批「保存失败」的设置静默写进config.json,与界面提示相矛盾(也会让主窗口显示出未落盘的字号)。现失败时把keyName/model/thinking/fontSize回滚为写盘前的值;SetApiKey内部的密钥回滚(明密文成对)留待后续版本 - 原子写在收尾阶段抛异常会破坏「抛异常 ⇒ 未写入」的假设(轻微):
WriteFileAtomic的回退分支在目标文件已被替换为新内容之后还要执行一次File.Delete(backup),它抛异常会冒泡到调用方,使调用方误以为未写入(内存与磁盘分叉)。现把该清理改为 best-effort,并在方法注释中把「抛异常时目标文件必为旧值」写成明确的不变量
下载:PromptGenerator.exe —— Windows 10 / 11 单文件,双击即用,无需安装、无需 .NET SDK(依赖系统自带的 .NET Framework 4.8)。
完整的变更记录、升级说明与离线回归测试说明见仓库中的 CHANGELOG.md 与 tests/README.md。
v1.0.1
把中文描述翻译为英文绘图提示词的 Windows 单机工具(DeepSeek API,零第三方依赖,单文件分发)。
本版内容
- 主窗口新增「关于」按钮(位于「查看」右侧),展示版本号、版权与 MIT 许可
- 项目采用 MIT 许可证,版权归 petrel-cn & LanZi 所有
- 查看对话框:左右分隔线可拖动;标题过长时列表下方出现横向滚动条;记录较多时可纵向滚动
- PromptGenerator.exe 携带程序图标
- 主窗口最小宽度 520 → 600(容下六个按钮一行)
下载
- PromptGenerator.exe —— Windows 10 / 11 双击即用(系统自带 .NET Framework 4.8,无需安装任何组件)
首次使用
- 打开「配置」,填入 DeepSeek API Key,保存
- 在主窗口输入中文描述,点「生成」(或 Ctrl+Enter)
用户数据保存在 %APPDATA%\prompt-generator\,API Key 以 Windows DPAPI(CurrentUser)加密存储,不落明文。
完整变更见 CHANGELOG。