错误日志
;unbound variable link-mouse-ids
(((or (tree-is-buffer? t) (not (tree-up...
(mouse-any key x y mods (+ time 0.0) data) ; key: "move", x: 236840
; y: -589808, mods: 0
; time: 2187.0
; data: ()
((when (not (== key "move")) (delayed (:i...
((with after? (behind-folded-comment?) (w... ; before?: #f
((when (and (in-comments-editor?) (!= key...
((when (and (has-comments-editor?) (!= ke...
问题描述
在文档中移动或悬停鼠标时,若划过带有 locus/链接 ID 的元素,会触发 Scheme 运行时报错:;unbound variable link-mouse-ids。
原因分析
- 在
src/Edit/Interface/edit_mouse.cpp 的 edit_interface_rep::update_mouse_loci() 中,检测到可能存在 locus 时会调用 Scheme 函数 link-mouse-ids:
if (!is_nil (ids1 * ids2) && !has_changed (THE_FOCUS)) {
ids1 = as_list_string (call ("link-mouse-ids", object (ids1)));
ids2 = as_list_string (call ("link-mouse-ids", object (ids2)));
list<tree> l= as_list_tree (call ("link-active-upwards", object (mt)));
...
- 函数
link-mouse-ids 定义在 TeXmacs/progs/link/link-navigate.scm 中,隶属于 (link link-navigate) 模块。
TeXmacs/progs/init-research.scm 中对 (link link-navigate) 采用了懒加载机制(lazy-define),但未注册 link-mouse-ids:
(lazy-define (link link-navigate)
link-active-upwards
link-active-ids
link-follow-ids
) ;lazy-define
- 如果用户在打开文档后尚未触发其它能加载
link-navigate 的操作,鼠标移动划过 locus 区域时 C++ 会首先调用 call ("link-mouse-ids", ...),由于该符号不在 lazy-define 中,S7 无法自动加载对应模块,抛出 unbound variable link-mouse-ids 错误。
- 此外,检查
src/Edit/Interface/edit_mouse.cpp 可以发现,同在 (link link-navigate) 模块中且由 C++ 直接 call 的函数还包括:
link-contains-inner-link?
show-hlink-tooltip
它们同样未在 lazy-define 中声明,存在同类潜在隐患。
修复建议
在 TeXmacs/progs/init-research.scm 的 (lazy-define (link link-navigate) ...) 列表中补全相关符号:
(lazy-define (link link-navigate)
link-active-upwards
link-active-ids
link-follow-ids
link-mouse-ids
link-contains-inner-link?
show-hlink-tooltip
) ;lazy-define
错误日志
问题描述
在文档中移动或悬停鼠标时,若划过带有 locus/链接 ID 的元素,会触发 Scheme 运行时报错:
;unbound variable link-mouse-ids。原因分析
src/Edit/Interface/edit_mouse.cpp的edit_interface_rep::update_mouse_loci()中,检测到可能存在 locus 时会调用 Scheme 函数link-mouse-ids:link-mouse-ids定义在TeXmacs/progs/link/link-navigate.scm中,隶属于(link link-navigate)模块。TeXmacs/progs/init-research.scm中对(link link-navigate)采用了懒加载机制(lazy-define),但未注册link-mouse-ids:(lazy-define (link link-navigate) link-active-upwards link-active-ids link-follow-ids ) ;lazy-definelink-navigate的操作,鼠标移动划过 locus 区域时 C++ 会首先调用call ("link-mouse-ids", ...),由于该符号不在lazy-define中,S7 无法自动加载对应模块,抛出unbound variable link-mouse-ids错误。src/Edit/Interface/edit_mouse.cpp可以发现,同在(link link-navigate)模块中且由 C++ 直接call的函数还包括:link-contains-inner-link?show-hlink-tooltip它们同样未在
lazy-define中声明,存在同类潜在隐患。修复建议
在
TeXmacs/progs/init-research.scm的(lazy-define (link link-navigate) ...)列表中补全相关符号:(lazy-define (link link-navigate) link-active-upwards link-active-ids link-follow-ids link-mouse-ids link-contains-inner-link? show-hlink-tooltip ) ;lazy-define