Skip to content

[222_68] 完善启动引导流程#3141

Merged
da-liii merged 4 commits intomainfrom
cms/222_68/startup_tutorial_file
Apr 14, 2026
Merged

[222_68] 完善启动引导流程#3141
da-liii merged 4 commits intomainfrom
cms/222_68/startup_tutorial_file

Conversation

@MoonL79
Copy link
Copy Markdown
Contributor

@MoonL79 MoonL79 commented Apr 14, 2026

No description provided.

@MoonL79 MoonL79 self-assigned this Apr 14, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 14, 2026

Greptile Summary

本 PR 在已有聚光灯教程基础设施之上,完善了首次启动引导流程:新增 JSON 驱动的四步教程配置,支持 bubble-sizeoffset-x/yrequire-action(操作解锁下一步)等能力,并在 kbd-magic-pasteocr-paste 及图片悬浮菜单 OCR 按钮中接入了教程动作上报。整体设计思路清晰,配置与引擎分离的架构也保持了良好的可扩展性。

Confidence Score: 4/5

  • 整体实现稳健,主要风险点已在前次审阅中标记;本次新增一处 qt-clipboard-format 二次求值的逻辑隐患,需在合并前确认或修复。
  • 两处前次审阅的问题(OCR 通知无条件触发、剪贴板导出模式异常不安全)尚未在代码中体现修复;本次新增的 qt-clipboard-format 二次调用在 OCR 后可能导致通知被 magic-paste 覆盖,使第四步无法解锁。这些合并起来保持 4/5,建议在合并前至少评估 kbd-magic-paste 里的格式二次求值问题。
  • TeXmacs/progs/generic/generic-edit.scm(kbd-magic-paste 中的 qt-clipboard-format 二次求值)和 src/Plugins/Qt/QTMImagePopup.cpp(OCR 通知无条件触发,前次已标记)需要重点关注。

Important Files Changed

Filename Overview
src/Plugins/Qt/qt_tutorial.cpp 扩展了教程引擎以支持 require-action 轮询、bubble-size / offset / target-id 为空时的无高亮模式;buildRegistry 中 toolbarArea provider 存在一个未使用的死变量 QRect rect;
src/Plugins/Qt/qt_tutorial.hpp 新增 TutorialBubbleSize 枚举及 TutorialStepConfig 中的 bubbleSize / offsetX / offsetY / requiredAction 字段,接口定义清晰,无问题。
TeXmacs/plugins/tutorial/progs/init-tutorial.scm 新增 tutorial-notify-action、tutorial-prepare-magic-paste-demo 和 tutorial-prepare-ocr-demo;clipboard-set-export 恢复不具备异常安全性(已在前次审阅中标记)。
TeXmacs/progs/generic/generic-edit.scm kbd-magic-paste / ocr-paste / image-and-ocr-paste 新增教程通知上报;kbd-magic-paste 对 qt-clipboard-format 二次求值,在 OCR 执行后可能导致 magic-paste 通知覆盖 ocr-paste 通知。
src/Plugins/Qt/QTMImagePopup.cpp 新增 OCR 按钮点击后的教程通知;通知在 ocr-to-latex-by-image 无论是否成功均无条件触发(已在前次审阅中标记)。
TeXmacs/plugins/tutorial/data/first-launch-tutorial.json 四步首次启动教程配置:欢迎页(无高亮)、登录、魔法粘贴、OCR,字段完整,require-action 与代码逻辑对齐。

Sequence Diagram

sequenceDiagram
    participant User
    participant TutorialEngine
    participant Scheme
    participant Prefs as UserPreferences

    TutorialEngine->>TutorialEngine: showStep(requireAction step)
    TutorialEngine->>TutorialEngine: updateCurrentStepGate()
    TutorialEngine->>Prefs: reset_user_preference("tutorial:last-action")
    TutorialEngine->>TutorialEngine: setNextEnabled(false)
    TutorialEngine->>TutorialEngine: actionPollTimer.start(150ms)

    User->>Scheme: kbd-magic-paste / ocr-paste / OCR button
    Scheme->>Prefs: cpp-set-preference("tutorial:last-action", action)

    loop Poll every 150ms
        TutorialEngine->>Prefs: get_user_preference("tutorial:last-action")
        alt action matches requiredAction
            TutorialEngine->>TutorialEngine: completedActionSteps.insert(stepId)
            TutorialEngine->>Prefs: reset_user_preference
            TutorialEngine->>TutorialEngine: setNextEnabled(true)
            TutorialEngine->>TutorialEngine: actionPollTimer.stop()
        end
    end

    User->>TutorialEngine: Next button clicked
    TutorialEngine->>TutorialEngine: showNextAvailableStep()
Loading

Reviews (2): Last reviewed commit: "补充文档" | Re-trigger Greptile

Comment on lines 73 to +75
call ("ocr-to-latex-by-image", current_tree);
eval ("(when (defined? 'tutorial-notify-action) "
"(tutorial-notify-action \"ocr-paste\"))");
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 OCR 教程通知无条件触发

点击浮动菜单中的 OCR 按钮时,无论 ocr-to-latex-by-image 是否真正识别成功,tutorial-notify-action "ocr-paste" 都会被发送,用户因此可以在未完成有效 OCR 的情况下推进教程步骤。而键盘路径(generic-edit.scm 中的 ocr-paste)只有在剪贴板确实包含图片且处理成功时才发送通知,两者行为不一致。

建议让通知仅在 ocr-to-latex-by-image 执行成功后才发送,或在 Scheme 侧的 ocr-to-latex-by-image 内部统一处理通知,与 ocr-to-latex-by-cursor 的模式保持一致。

Comment on lines +28 to +38
(tm-define (tutorial-prepare-magic-paste-demo)
(let* ((html-path (tutorial-magic-paste-demo-path))
(html (utf8->cork (string-load html-path)))
(old-export (clipboard-get-export)))
(if (not tutorial-magic-paste-demo-opened?)
(begin
(new-document)
(set! tutorial-magic-paste-demo-opened? #t)))
(clipboard-set-export "verbatim")
(clipboard-set "primary" html)
(clipboard-set-export old-export)))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 剪贴板导出模式恢复不能抵御异常

clipboard-set-export "verbatim"clipboard-set-export old-export 之间的 clipboard-set "primary" html 若抛出异常,导出模式将保持 "verbatim" 而无法恢复,影响后续粘贴操作。建议使用 dynamic-wind 保证清理代码必定执行:

(dynamic-wind
  (lambda () (clipboard-set-export "verbatim"))
  (lambda () (clipboard-set "primary" html))
  (lambda () (clipboard-set-export old-export)))

Copy link
Copy Markdown
Contributor

@da-liii da-liii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@da-liii da-liii merged commit 6cd714f into main Apr 14, 2026
5 checks passed
@da-liii da-liii deleted the cms/222_68/startup_tutorial_file branch April 14, 2026 09:32
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.

2 participants