feat: 编辑区内容支持缩放 - #264
Closed
runningwaterpro wants to merge 1 commit into
Closed
feat: 编辑区内容支持缩放#264runningwaterpro wants to merge 1 commit into
runningwaterpro wants to merge 1 commit into
Conversation
底部状态栏新增 [−] [100%] [+],也可以用快捷键和触控板调整当前标签的编辑内容 显示比例,范围 50%~300%。 怎么用 - Ctrl/Cmd + Shift + > 放大 - Ctrl/Cmd + Shift + < 缩小 - Ctrl/Cmd + Shift + D 还原到 100% - Ctrl/Cmd + 滚轮 按滚动量连续缩放 - 点状态栏的百分比 还原到 100% - 滚轮(不按 Ctrl) 保持原有滚动 三个快捷键可在「设置 → 快捷键 → 编辑器」中修改,改完立即生效。 解决的实际问题 - 放大后阅读位置不再跳走。原先按文档百分比还原滚动位置,倍率越大偏差越大, 300% 时能差出七千多像素(约十二屏),表现为选中的文字往上跑、最终移出视口。 改为按选区距视口顶部的像素位置锚定,同一组场景下偏差为 0。 - 连续缩放不再累积偏移。滚轮和连按会连续触发缩放,原先每轮的补偿还挂在 动画帧上,下一轮内容已缩放而滚动未跟上,捕获到的锚点是错的。实测连续 二十档缩到 300%,偏差从 12320px 降到 0。 - Ctrl+滚轮按累积滚动量线性响应。此前用时间窗口判断手势边界,按住 Ctrl 连续滚动会出现停顿感,改为累积量后与 Chrome / VS Code 行为一致。 - 100% 时百分比按钮保持正常外观。「不需要」不等于「不能」,此前用 disabled 表达导致灰显。 - 导出的 HTML / Word / PDF 不含缩放信息,排版与 100% 时一致。 行为边界 - 只作用于编辑区内容层。标题栏、侧边栏、标签栏、状态栏保持原尺寸。 - 代码块的复制按钮和语言/模式选择器在任何倍率下都是原尺寸。 - 每个已打开的标签独立保存倍率,新标签为 100%,关闭标签或重启后重置。 - 不改变 Markdown、文件路径、修改状态、撤销历史和剪贴板内容。 - 源码模式与富文本模式共用同一个标签倍率,状态栏显示同一个百分比。 - 只读文档可以缩放,且不会被改成可编辑。 - 达到 50% 或 300% 时对应按钮禁用。 快捷键选键 - 与已有的两组绑定错开:Ctrl+0 属于「设为段落」,Ctrl+Shift+- 属于 「分割线」,均未改动。 - > 和 < 对应键盘上的 . 和 , 键,是 Word / Excel / Google Docs 的标准 缩放键位。 - 「还原」未用 Ctrl+Shift+0:实测该组合在本应用的快捷键录制中录不进, 按下 Ctrl、Shift 之后收不到主键事件。未采用。 - 三个键位在现有 25 条默认快捷键与菜单 accelerator 中均未被占用。 实现说明 - 缩放快捷键不注册到 ProseMirror keymap,由渲染进程的全局监听处理。keymap 挂在编辑器 DOM 上、仅在编辑区获得焦点时响应,而缩放只改变视图呈现、不修改 文档,窗口有焦点就应当可用。这三条在 action-commands 中没有对应的 command, keymap 构建时会被自动跳过,core 层无需改动。 - 复用既有的快捷键存储、冲突检测、录制界面和显示格式,没有新增配置项。 顺带修复 快捷键录制此前对每一个 keydown 都调用 preventDefault,在 Windows 上会连带 阻止主键事件产生,导致某些组合无法录入。改为只在真正决定结果(录成、清除、 取消)时阻止默认。此问题影响设置页全部条目,与缩放无关,但位于同一条链路。 主键比对补上大小写与 Shift 变体归一:配置存小写 d 而按 Shift+d 时 event.key 是大写 D;配置存 0 而按 Ctrl+Shift+0 时 event.key 是右括号。 验证 - pnpm test:44 个测试通过 - pnpm build:通过 - Electron 37 实测 50%/100%/150%/200%/300% 五档:正文按倍率缩放、外壳与辅助 工具尺寸恒定、滚动位置恢复偏差 0px - 人工验证:按钮、快捷键、滚轮、阅读位置、源码模式、多标签隔离、复制撤销 保存、只读文档、PDF 导出
Closed
runningwaterpro
added a commit
to runningwaterpro/milkup
that referenced
this pull request
Sep 26, 2026
## 怎么用 在本仓库工作时,撰写 PR 描述和提交信息前先读 `AGENTS.md`。它规定了必备结构、每节的要求、需要评审确认的部分怎么写、PR 拆分原则和语言风格。 ## 解决的实际问题 每次提 PR 都要重新构思描述结构,容易漏掉「行为边界」和「需要评审确认」这两节 —— 而它们恰恰是 reviewer 判断能否合并的关键信息。改动影响到他人的快捷键或既有行为时,如果混在普通描述里,很容易被漏看。 规范还固定了一条容易踩的坑:remote 命名反了。`origin` 指向的是上游 `Auto-Plugin/milkup`,`fork` 才是自己的仓库。推代码要用 `git push fork`。 ## 行为边界 - 本文件只适用于 `runningwaterpro/milkup` - 不推送到上游 `Auto-Plugin/milkup` - 不影响构建、测试和运行逻辑,纯文档 ## 验证 - 已在本次 Auto-Plugin#264 和 Auto-Plugin#265 的描述撰写中试用 - 规则本身从这两个 PR 的实际写法反推得出
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
feat: 缂栬緫鍖哄唴瀹规敮鎸佺缉鏀?
搴曢儴鐘舵€佹爮鏂板 [鈭抅 [100%] [+]锛屼篃鍙互鐢ㄥ揩鎹烽敭鍜岃Е鎺ф澘璋冩暣褰撳墠鏍囩鐨勭紪杈戝唴瀹?鏄剧ず姣斾緥锛岃寖鍥?50%锝?00%銆?
鎬庝箞鐢?
涓変釜蹇嵎閿彲鍦ㄣ€岃缃?鈫?蹇嵎閿?鈫?缂栬緫鍣ㄣ€嶄腑淇敼锛屾敼瀹岀珛鍗崇敓鏁堛€?
瑙e喅鐨勫疄闄呴棶棰?
鏀惧ぇ鍚庨槄璇讳綅缃笉鍐嶈烦璧般€傚師鍏堟寜鏂囨。鐧惧垎姣旇繕鍘熸粴鍔ㄤ綅缃紝鍊嶇巼瓒婂ぇ鍋忓樊瓒婂ぇ锛? 300% 鏃惰兘宸嚭涓冨崈澶氬儚绱狅紙绾﹀崄浜屽睆锛夛紝琛ㄧ幇涓洪€変腑鐨勬枃瀛楀線涓婅窇銆佹渶缁堢Щ鍑鸿鍙c€? 鏀逛负鎸夐€夊尯璺濊鍙i《閮ㄧ殑鍍忕礌浣嶇疆閿氬畾锛屽悓涓€缁勫満鏅笅鍋忓樊涓?0銆?
杩炵画缂╂斁涓嶅啀绱Н鍋忕Щ銆傛粴杞拰杩炴寜浼氳繛缁Е鍙戠缉鏀撅紝鍘熷厛姣忚疆鐨勮ˉ鍋胯繕鎸傚湪
鍔ㄧ敾甯т笂锛屼笅涓€杞唴瀹瑰凡缂╂斁鑰屾粴鍔ㄦ湭璺熶笂锛屾崟鑾峰埌鐨勯敋鐐规槸閿欑殑銆傚疄娴嬭繛缁? 浜屽崄妗g缉鍒?300%锛屽亸宸粠 12320px 闄嶅埌 0銆?
Ctrl+婊氳疆鎸夌疮绉粴鍔ㄩ噺绾挎€у搷搴斻€傛鍓嶇敤鏃堕棿绐楀彛鍒ゆ柇鎵嬪娍杈圭晫锛屾寜浣?Ctrl
杩炵画婊氬姩浼氬嚭鐜板仠椤挎劅锛屾敼涓虹疮绉噺鍚庝笌 Chrome / VS Code 琛屼负涓€鑷淬€?
100% 鏃剁櫨鍒嗘瘮鎸夐挳淇濇寔姝e父澶栬銆傘€屼笉闇€瑕併€嶄笉绛変簬銆屼笉鑳姐€嶏紝姝ゅ墠鐢? disabled 琛ㄨ揪瀵艰嚧鐏版樉銆?
瀵煎嚭鐨?HTML / Word / PDF 涓嶅惈缂╂斁淇℃伅锛屾帓鐗堜笌 100% 鏃朵竴鑷淬€?
琛屼负杈圭晫
鍙綔鐢ㄤ簬缂栬緫鍖哄唴瀹瑰眰銆傛爣棰樻爮銆佷晶杈规爮銆佹爣绛炬爮銆佺姸鎬佹爮淇濇寔鍘熷昂瀵搞€?
浠g爜鍧楃殑澶嶅埗鎸夐挳鍜岃瑷€/妯″紡閫夋嫨鍣ㄥ湪浠讳綍鍊嶇巼涓嬮兘鏄師灏哄銆?
姣忎釜宸叉墦寮€鐨勬爣绛剧嫭绔嬩繚瀛樺€嶇巼锛屾柊鏍囩涓?100%锛屽叧闂爣绛炬垨閲嶅惎鍚庨噸缃€?
涓嶆敼鍙?Markdown銆佹枃浠惰矾寰勩€佷慨鏀圭姸鎬併€佹挙閿€鍘嗗彶鍜屽壀璐存澘鍐呭銆?
婧愮爜妯″紡涓庡瘜鏂囨湰妯″紡鍏辩敤鍚屼竴涓爣绛惧€嶇巼锛岀姸鎬佹爮鏄剧ず鍚屼竴涓櫨鍒嗘瘮銆?
鍙鏂囨。鍙互缂╂斁锛屼笖涓嶄細琚敼鎴愬彲缂栬緫銆?
杈惧埌 50% 鎴?300% 鏃跺搴旀寜閽鐢ㄣ€?
蹇嵎閿€夐敭
涓庡凡鏈夌殑涓ょ粍缁戝畾閿欏紑锛欳trl+0 灞炰簬銆岃涓烘钀姐€嶏紝Ctrl+Shift+- 灞炰簬
銆屽垎鍓茬嚎銆嶏紝鍧囨湭鏀瑰姩銆?
銆岃繕鍘熴€嶆湭鐢?Ctrl+Shift+0锛氬疄娴嬭缁勫悎鍦ㄦ湰搴旂敤鐨勫揩鎹烽敭褰曞埗涓綍涓嶈繘锛? 鎸変笅 Ctrl銆丼hift 涔嬪悗鏀朵笉鍒颁富閿簨浠躲€傛湭閲囩敤銆?
涓変釜閿綅鍦ㄧ幇鏈?25 鏉¢粯璁ゅ揩鎹烽敭涓庤彍鍗?accelerator 涓潎鏈鍗犵敤銆?
瀹炵幇璇存槑
缂╂斁蹇嵎閿笉娉ㄥ唽鍒?ProseMirror keymap锛岀敱娓叉煋杩涚▼鐨勫叏灞€鐩戝惉澶勭悊銆俴eymap
鎸傚湪缂栬緫鍣?DOM 涓娿€佷粎鍦ㄧ紪杈戝尯鑾峰緱鐒︾偣鏃跺搷搴旓紝鑰岀缉鏀惧彧鏀瑰彉瑙嗗浘鍛堢幇銆佷笉淇敼
鏂囨。锛岀獥鍙f湁鐒︾偣灏卞簲褰撳彲鐢ㄣ€傝繖涓夋潯鍦?action-commands 涓病鏈夊搴旂殑 command锛? keymap 鏋勫缓鏃朵細琚嚜鍔ㄨ烦杩囷紝core 灞傛棤闇€鏀瑰姩銆?
澶嶇敤鏃㈡湁鐨勫揩鎹烽敭瀛樺偍銆佸啿绐佹娴嬨€佸綍鍒剁晫闈㈠拰鏄剧ず鏍煎紡锛屾病鏈夋柊澧為厤缃」銆?
椤哄甫淇
蹇嵎閿綍鍒舵鍓嶅姣忎竴涓?keydown 閮借皟鐢?preventDefault锛屽湪 Windows 涓婁細杩炲甫
闃绘涓婚敭浜嬩欢浜х敓锛屽鑷存煇浜涚粍鍚堟棤娉曞綍鍏ャ€傛敼涓哄彧鍦ㄧ湡姝e喅瀹氱粨鏋滐紙褰曟垚銆佹竻闄ゃ€?鍙栨秷锛夋椂闃绘榛樿銆傛闂褰卞搷璁剧疆椤靛叏閮ㄦ潯鐩紝涓庣缉鏀炬棤鍏筹紝浣嗕綅浜庡悓涓€鏉¢摼璺€?
涓婚敭姣斿琛ヤ笂澶у皬鍐欎笌 Shift 鍙樹綋褰掍竴锛氶厤缃瓨灏忓啓 d 鑰屾寜 Shift+d 鏃?event.key
鏄ぇ鍐?D锛涢厤缃瓨 0 鑰屾寜 Ctrl+Shift+0 鏃?event.key 鏄彸鎷彿銆?
楠岃瘉
宸ュ叿灏哄鎭掑畾銆佹粴鍔ㄤ綅缃仮澶嶅亸宸?0px
淇濆瓨銆佸彧璇绘枃妗c€丳DF 瀵煎嚭