Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 3 additions & 25 deletions TeXmacs/progs/texmacs/menus/preferences-menu.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
32 changes: 32 additions & 0 deletions TeXmacs/tests/2041.scm
Original file line number Diff line number Diff line change
@@ -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
56 changes: 56 additions & 0 deletions devel/2041.md
Original file line number Diff line number Diff line change
@@ -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 后关窗。
Loading