Skip to content

Commit e5144d8

Browse files
da-liiiclaude
andauthored
[0840] 消除 diff-text 模块启动时的 conditional master routine warning (#4039)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 46b0967 commit e5144d8

2 files changed

Lines changed: 31 additions & 9 deletions

File tree

TeXmacs/progs/generic/diff-text.scm

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,21 @@
102102

103103
(define diff-active? #f)
104104

105-
(tm-define (is-diff-active?) diff-active?)
105+
(define-public (is-diff-active?) diff-active?)
106106

107-
(tm-define (diff-enable?) (not (community-stem?)))
107+
(define-public (diff-enable?) (not (community-stem?)))
108108

109109
;; =============================================================================
110110
;; Model evaluation & Feedback functions
111111
;; =============================================================================
112112

113-
(tm-define (diff-feedback action) (noop))
113+
(define-public (diff-feedback action) (noop))
114114

115115
;; =============================================================================
116116
;; Diff Text core control flow
117117
;; =============================================================================
118118

119-
(tm-define (trigger-diff-text)
119+
(define-public (trigger-diff-text)
120120
(let* ((sel (selection-tree))
121121
(origin_stree (tree->stree sel))
122122
(suggested_stree (demo-suggest origin_stree))
@@ -136,9 +136,9 @@
136136
;; 还原精度
137137
(set-preference "versioning grain" pre-grain)
138138
) ;let*
139-
) ;tm-define
139+
) ;define-public
140140

141-
(tm-define (accept-diff)
141+
(define-public (accept-diff)
142142
(let ((t (tree-innermost 'version-both)))
143143
(when t
144144
(let* ((new-val (tree-ref t 1)) (p (tree-up t)) (i (tree-index t)))
@@ -152,9 +152,9 @@
152152
(diff-feedback 'accept)
153153
(refresh-window)
154154
(diff-scan-next)
155-
) ;tm-define
155+
) ;define-public
156156

157-
(tm-define (reject-diff)
157+
(define-public (reject-diff)
158158
(let ((t (tree-innermost 'version-both)))
159159
(when t
160160
(let* ((old-val (tree-ref t 0)) (p (tree-up t)) (i (tree-index t)))
@@ -168,7 +168,7 @@
168168
(diff-feedback 'reject)
169169
(refresh-window)
170170
(diff-scan-next)
171-
) ;tm-define
171+
) ;define-public
172172

173173
;; =============================================================================
174174
;; Keyboard and Mouse Hooks

devel/0840.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,25 @@ xmake r stem
5353
重构基类 `QTMUserPromptPopup` 构造函数接收 `acceptText``rejectText` 参数,并在子类 `QTMGhostTextPopup``QTMDiffTextPopup` 中调用基构造函数定义特定的提示文案。
5454
5. **样式高亮与占位隐藏**
5555
`std-fold.ts` 中,将新旧版本差异配色对齐到弹窗按键的 `#10b981` (绿) 与 `#ef4444` (红),并使用 `text-bg-color` 附带现代极淡底色高亮(`#ecfdf5``#fef2f2`)。同时重构 `version-suppressed` 宏为空宏使其完全隐形。
56+
57+
## 6 后续修复:消除 "conditional master routine" 启动告警
58+
59+
### What
60+
启动时 Scheme 加载 `diff-text.scm` 报出 6 条 `warning: conditional master routine ...`
61+
`is-diff-active?``diff-enable?``diff-feedback``trigger-diff-text``accept-diff``reject-diff`
62+
63+
### Why
64+
`tm-define` 宏链 (`tm-define``tm-define-sub``tm-define-overloaded`) 依赖全局
65+
`cur-conds`/`cur-props` 在展开期累积。当模块后续存在带 `:require``tm-define`
66+
(如 `kbd-tab`/`keyboard-press`/`mouse-event` 的重载),`tm-define-overloaded` 真正
67+
展开时读到的 `cur-conds` 可能已被后续同名宏污染,导致**首次定义**的 master routine
68+
被误判为带 condition,触发 warning(参见 `TeXmacs/progs/kernel/texmacs/tm-define.scm:333-336`)。
69+
70+
### How
71+
这 6 个函数都是纯函数定义,没有 `:require`、也不被别处 `tm-define` 重载——不需要进入
72+
`tm-define` 的属性/重载分发体系。直接改为 `define-public`
73+
- 保留模块导出(scheme 端可见性不变)
74+
- 绕开 `tm-define` 机制,warning 消失
75+
- 不改动 `tm-define` 实现本身(保持宏系统稳定)
76+
77+
涉及文件:`TeXmacs/progs/generic/diff-text.scm` 第 105/107/113/119/141/157 行。

0 commit comments

Comments
 (0)