Skip to content

feat: 编辑区内容支持缩放 - #264

Closed
runningwaterpro wants to merge 1 commit into
Auto-Plugin:mainfrom
runningwaterpro:feat/editor-view-zoom-pr1
Closed

runningwaterpro wants to merge 1 commit into
Auto-Plugin:mainfrom
runningwaterpro:feat/editor-view-zoom-pr1

Conversation

@runningwaterpro

Copy link
Copy Markdown
Contributor

feat: 缂栬緫鍖哄唴瀹规敮鎸佺缉鏀?
搴曢儴鐘舵€佹爮鏂板 [鈭抅 [100%] [+]锛屼篃鍙互鐢ㄥ揩鎹烽敭鍜岃Е鎺ф澘璋冩暣褰撳墠鏍囩鐨勭紪杈戝唴瀹?鏄剧ず姣斾緥锛岃寖鍥?50%锝?00%銆?
鎬庝箞鐢?

  • Ctrl/Cmd + Shift + > 鏀惧ぇ
  • Ctrl/Cmd + Shift + < 缂╁皬
  • Ctrl/Cmd + Shift + D 杩樺師鍒?100%
  • Ctrl/Cmd + 婊氳疆 鎸夋粴鍔ㄩ噺杩炵画缂╂斁
  • 鐐圭姸鎬佹爮鐨勭櫨鍒嗘瘮 杩樺師鍒?100%
  • 婊氳疆锛堜笉鎸?Ctrl锛? 淇濇寔鍘熸湁婊氬姩

涓変釜蹇嵎閿彲鍦ㄣ€岃缃?鈫?蹇嵎閿?鈫?缂栬緫鍣ㄣ€嶄腑淇敼锛屾敼瀹岀珛鍗崇敓鏁堛€?
瑙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+- 灞炰簬
    銆屽垎鍓茬嚎銆嶏紝鍧囨湭鏀瑰姩銆?

  • 鍜?< 瀵瑰簲閿洏涓婄殑 . 鍜?, 閿紝鏄?Word / Excel / Google Docs 鐨勬爣鍑? 缂╂斁閿綅銆?

  • 銆岃繕鍘熴€嶆湭鐢?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 鏄彸鎷彿銆?
楠岃瘉

  • pnpm test锛?4 涓祴璇曢€氳繃
  • pnpm build锛氶€氳繃
  • Electron 37 瀹炴祴 50%/100%/150%/200%/300% 浜旀。锛氭鏂囨寜鍊嶇巼缂╂斁銆佸澹充笌杈呭姪
    宸ュ叿灏哄鎭掑畾銆佹粴鍔ㄤ綅缃仮澶嶅亸宸?0px
  • 浜哄伐楠岃瘉锛氭寜閽€佸揩鎹烽敭銆佹粴杞€侀槄璇讳綅缃€佹簮鐮佹ā寮忋€佸鏍囩闅旂銆佸鍒舵挙閿€
    淇濆瓨銆佸彧璇绘枃妗c€丳DF 瀵煎嚭

底部状态栏新增 [−] [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 导出
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 的实际写法反推得出
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant