Skip to content

鼠标移动/悬停时报错:unbound variable link-mouse-ids #4552

Description

@da-liii

错误日志

;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

原因分析

  1. src/Edit/Interface/edit_mouse.cppedit_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)));
      ...
  2. 函数 link-mouse-ids 定义在 TeXmacs/progs/link/link-navigate.scm 中,隶属于 (link link-navigate) 模块。
  3. 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
  4. 如果用户在打开文档后尚未触发其它能加载 link-navigate 的操作,鼠标移动划过 locus 区域时 C++ 会首先调用 call ("link-mouse-ids", ...),由于该符号不在 lazy-define 中,S7 无法自动加载对应模块,抛出 unbound variable link-mouse-ids 错误。
  5. 此外,检查 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions