|
| 1 | +# [222_84] 极简模式:隐藏模式工具栏、焦点工具栏,保留菜单栏 |
| 2 | + |
| 3 | +## 相关文档 |
| 4 | +- [x_y.md](x_y.md) - 开发文档模板 |
| 5 | + |
| 6 | +## 任务相关的代码文件 |
| 7 | +- `TeXmacs/progs/texmacs/menus/view-menu.scm` - 查看菜单定义 |
| 8 | +- `TeXmacs/progs/texmacs/texmacs/tm-view.scm` - 视图状态切换函数 |
| 9 | +- `TeXmacs/progs/kernel/texmacs/tm-modes.scm` - 模式状态定义 |
| 10 | +- `TeXmacs/progs/texmacs/menus/main-menu.scm` - 右键菜单定义 |
| 11 | +- `src/Texmacs/Window/tm_frame.cpp` - C++ 层工具栏显示控制 |
| 12 | +- `src/Plugins/Qt/qt_tm_widget.cpp` - Qt 层 UI 可见性控制 |
| 13 | + |
| 14 | +## 如何测试 |
| 15 | +1. 启动 Mogan |
| 16 | +2. 点击 `查看` 菜单,确认有 `极简模式` 选项 |
| 17 | +3. 点击 `极简模式`,确认模式工具栏、焦点工具栏被隐藏,菜单栏保留 |
| 18 | +4. 在编辑区域右键,确认有 `极简模式` 选项可退出 |
| 19 | +5. 退出极简模式后,确认之前被隐藏的 UI 元素恢复显示 |
| 20 | +6. 进入极简模式后,再进入专注模式,然后退出专注模式,确认不再是极简模式 |
| 21 | + - 点击 `极简模式`,确认模式工具栏、焦点工具栏被隐藏 |
| 22 | + - 点击 `Focus mode`,确认菜单栏被隐藏(此时极简模式自动退出) |
| 23 | + - 退出 `Focus mode`,确认菜单栏恢复显示 |
| 24 | + - 确认模式工具栏、焦点工具栏保持显示(不是极简模式) |
| 25 | + |
| 26 | +## 如何提交 |
| 27 | +```bash |
| 28 | +# 提交前执行的最少测试步骤 |
| 29 | +xmake build mogan |
| 30 | +./build/mogan |
| 31 | +``` |
| 32 | + |
| 33 | +## 2026/05/08 第一步:定义极简模式状态与切换函数 |
| 34 | + |
| 35 | +### What |
| 36 | +在 Scheme 层定义极简模式的状态判断和切换函数。 |
| 37 | + |
| 38 | +### Why |
| 39 | +参考专注模式(`toggle-focus-mode`)的实现方式,极简模式需要: |
| 40 | +1. 一个状态变量/函数判断当前是否处于极简模式 |
| 41 | +2. 一个切换函数进入/退出极简模式 |
| 42 | +3. 保存进入极简模式前的 UI 状态,以便退出时恢复 |
| 43 | + |
| 44 | +### How |
| 45 | +1. 在 `tm-modes.scm` 中定义 `simplest-mode?`: |
| 46 | + - 极简模式状态 = 模式工具栏隐藏 且 焦点工具栏隐藏 |
| 47 | + - 即 `(simplest-mode% (and (not (visible-icon-bar? 1)) (not (visible-icon-bar? 2))))` |
| 48 | + |
| 49 | +2. 在 `tm-view.scm` 中实现 `toggle-simplest-mode`: |
| 50 | + - 需要保存进入极简模式前的状态(模式工具栏、焦点工具栏的可见性) |
| 51 | + - 使用 `saved-simplest-state` 变量存储二元组 `(mode-visible? focus-visible?)` |
| 52 | + - 进入极简模式时: |
| 53 | + - 保存当前状态 |
| 54 | + - 调用 `(show-icon-bar 1 #f)`、`(show-icon-bar 2 #f)` 隐藏两个工具栏 |
| 55 | + - 退出极简模式时: |
| 56 | + - 根据保存的状态恢复两个工具栏 |
| 57 | + |
| 58 | +## 2026/05/08 第二步:在查看菜单和右键菜单中添加入口 |
| 59 | + |
| 60 | +### What |
| 61 | +在查看菜单中添加 `极简模式` 选项,并在右键菜单中添加退出入口。 |
| 62 | + |
| 63 | +### Why |
| 64 | +参考专注模式的交互方式: |
| 65 | +- 专注模式在 `查看` 菜单中有 `Focus mode` 入口 |
| 66 | +- 进入专注模式后,右键菜单会出现 `Focus mode` 选项用于退出 |
| 67 | + |
| 68 | +### How |
| 69 | +1. 在 `view-menu.scm` 的 `view-menu` 中,在 `Focus mode` 下方添加 `极简模式` 菜单项: |
| 70 | + ```scheme |
| 71 | + ("极简模式" (toggle-simplest-mode)) |
| 72 | + ``` |
| 73 | + |
| 74 | +2. 在 `main-menu.scm` 的 `texmacs-popup-menu` 中,参照 `focus-popup-menu` 的实现,添加 `simplest-popup-menu`: |
| 75 | + ```scheme |
| 76 | + (menu-bind simplest-popup-menu |
| 77 | + ("极简模式" (toggle-simplest-mode))) |
| 78 | +
|
| 79 | + (tm-menu (texmacs-popup-menu) |
| 80 | + (:require (simplest-mode?)) |
| 81 | + (link simplest-popup-menu) |
| 82 | + --- |
| 83 | + (former)) |
| 84 | + ``` |
| 85 | + 注意:需要处理与 `focus-popup-menu` 的共存逻辑,确保两个模式都能正确显示右键菜单。 |
| 86 | + |
| 87 | +## 2026/05/08 第三步:处理模式共存与边界情况 |
| 88 | + |
| 89 | +### What |
| 90 | +处理极简模式与专注模式、全屏模式等其他模式的共存逻辑。 |
| 91 | + |
| 92 | +### Why |
| 93 | +如果用户同时开启了专注模式和极简模式,退出其中一个时可能会意外恢复 UI 元素。 |
| 94 | + |
| 95 | +### How |
| 96 | +- 专注模式只控制菜单栏,极简模式控制模式工具栏+焦点工具栏: |
| 97 | + - 两者控制不同的 UI 元素,可以完全共存 |
| 98 | + - 进入极简模式时,如果专注模式已开启,菜单栏保持隐藏状态 |
| 99 | + - 退出极简模式时,只恢复工具栏,不影响菜单栏 |
| 100 | + - 退出专注模式时,只恢复菜单栏,不影响工具栏 |
0 commit comments