From 484483780e5f598616da51de68157a6ba64e2b7f Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 20 Jul 2026 22:21:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[2041]=20=E5=88=87=E6=8D=A2=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E6=94=B9=E4=B8=BA=E5=8D=B3=E6=97=B6=E7=94=9F=E6=95=88?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devel/2041.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 devel/2041.md diff --git a/devel/2041.md b/devel/2041.md new file mode 100644 index 0000000000..9b1e0bf94d --- /dev/null +++ b/devel/2041.md @@ -0,0 +1,56 @@ +# [2041] 切换语言改为即时生效(无需重启) + +## 1 相关文档 +- [dddd.md](dddd.md) - 任务文档模板 + +## 2 任务相关的代码文件 +- `TeXmacs/progs/texmacs/menus/preferences-menu.scm` — `set-language-and-notify` 简化为直接 `set-preference`,不再弹确认重启 +- `TeXmacs/tests/2041.scm` — language 即时切换 GUI 集成测试 + +## 3 如何测试 + +### 3.1 确定性测试(单元测试) +```bash +MOGAN_TEST_GUI=1 xmake r 2041 # language 即时切换(GUI 集成测试) +``` + +### 3.2 非确定性测试(文档验证) +```bash +xmake b stem +# 打开 首选项 -> Language,切换语言: +# 即时生效(菜单/界面文案跟随),不弹「需重启」确认框 +``` + +## 4 如何提交 + +提交前执行以下最少步骤: + +```bash +gf fmt --changed-since=main +``` + +## 5 What + +将首选项里切换语言(`language`)从「弹确认重启框、确认后才落定」改为即时生效: +`set-language-and-notify` 直接 `set-preference`,`notify-language` 实时调 +`set-output-language`,语言切换无需重启软件。 + +## 6 Why + +旧 `set-language-and-notify` 切语言时弹 `user-confirm`(基于 `restart-required-message`), +要求用户确认重启。但 language 实际并非需重启字段——`notify-language` 已经实时 +`set-output-language`,重启是多此一举。去掉后: +- 切语言即时生效,体验更顺 +- 移除不必要的重启确认弹窗 + +## 7 How + +### 7.1 scm(`preferences-menu.scm`) +- `set-language-and-notify lan`:去掉 `user-confirm` / `restart-required-message` + 分支,简化为 `(set-preference "language" lan)`。`define-preferences` 注册的 + `notify-language` 会在值变化时实时 `set-output-language`,故无需重启。 + +### 7.2 测试(`TeXmacs/tests/2041.scm`) +- GUI 集成测试:`set-language-and-notify "english"` / `"chinese"` 后断言 + `get-output-language` 实时跟随;末尾恢复原语言。 +- 用 `exec-delayed-at` 延迟退出(GUI 模式不自动 quit),让 check 输出 flush 后关窗。 From 189f9251904da5927048dd0656c60235b223b755 Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 20 Jul 2026 22:21:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[2041]=20set-language-and-notify=20?= =?UTF-8?q?=E5=8E=BB=E9=87=8D=E5=90=AF=EF=BC=8C=E8=AF=AD=E8=A8=80=E5=8D=B3?= =?UTF-8?q?=E6=97=B6=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../progs/texmacs/menus/preferences-menu.scm | 28 ++-------------- TeXmacs/tests/2041.scm | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 25 deletions(-) create mode 100644 TeXmacs/tests/2041.scm diff --git a/TeXmacs/progs/texmacs/menus/preferences-menu.scm b/TeXmacs/progs/texmacs/menus/preferences-menu.scm index ea86d94eb2..d8da614a72 100644 --- a/TeXmacs/progs/texmacs/menus/preferences-menu.scm +++ b/TeXmacs/progs/texmacs/menus/preferences-menu.scm @@ -85,31 +85,9 @@ ;; Language settings and restart notifications ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(tm-define (set-language-and-notify lan) - (let ((old (get-preference "language"))) - (if (== lan old) - (set-preference "language" lan) - (let ((msg (restart-required-message))) - (user-confirm msg - #f - (lambda (answ) - (if answ - (begin - (set-preference "language" lan) - (when (not (defined? 'save-all-buffers)) - (use-modules (plugin autosave)) - ) ;when - (save-all-buffers) - (restart-TeXmacs) - ) ;begin - (set-preference "language" old) - ) ;if - ) ;lambda - ) ;user-confirm - ) ;let - ) ;if - ) ;let -) ;tm-define +;; language 切换实时生效(notify-language 直调 set-output-language),无需重启, +;; 故直接 set-preference 即可,不再弹确认重启。 +(tm-define (set-language-and-notify lan) (set-preference "language" lan)) (tm-define preferences-tree `((enum ("Look and feel" "look and feel") diff --git a/TeXmacs/tests/2041.scm b/TeXmacs/tests/2041.scm new file mode 100644 index 0000000000..96927ddf8b --- /dev/null +++ b/TeXmacs/tests/2041.scm @@ -0,0 +1,32 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MODULE : 2041.scm +;; DESCRIPTION : Test live language switch(切换语言即时生效,无需重启) +;; COPYRIGHT : (C) 2026 Mogan STEM +;; +;; 验证 set-language-and-notify 改为即时生效:set-preference 触发 notify-language +;; 实时 set-output-language,get-output-language 立即跟随,无需重启。 +;; +;; 运行:MOGAN_TEST_GUI=1 xmake r 2041 +;; +;; This software falls under the GNU general public license version 3 or later. +;; It comes WITHOUT ANY WARRANTY whatsoever. Details see LICENSE. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(use-modules (texmacs menus preferences-menu)) +(import (liii check)) + +(tm-define (test_2041) + ;; set-language-and-notify 走 set-preference,notify-language 实时 set-output-language。 + (let ((orig-lang (get-preference "language"))) + (set-language-and-notify "english") + (check (get-output-language) => "english") + (set-language-and-notify "chinese") + (check (get-output-language) => "chinese") + (set-preference "language" orig-lang) + ) ;let + + ;; GUI 模式不自动 quit,延迟一拍退出(让 check 输出 flush 后关窗) + (exec-delayed-at (lambda () (quit-TeXmacs)) (+ (texmacs-time) 500)) +) ;tm-define