feat: 提交详情能看 diff,也能丢给 AI 审这一次改动。文件检查可单独排除路径,TODO 只认大写,避免把 todo 表和模块当成待办标记。

热力图按容器宽度铺满一年,不再横向滚动。托盘右键换成可换皮肤的弹层;更新下载显示进度,退出后再由脚本拉起安装器,避免还占着 exe。
This commit is contained in:
李琦
2026-08-19 15:46:03 +08:00
parent 1694397245
commit 7c4109f687
38 changed files with 2618 additions and 129 deletions

View File

@@ -13,3 +13,8 @@ func configureHidden(_ *exec.Cmd) {}
func ConfigureDetached(cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
}
// ConfigureUpdaterHelper 非 Windows 仅放入独立进程组。
func ConfigureUpdaterHelper(cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
}

View File

@@ -17,3 +17,10 @@ func configureHidden(cmd *exec.Cmd) {
func ConfigureDetached(cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true, CreationFlags: 0x08000000 | 0x00000200}
}
// ConfigureUpdaterHelper 启动更新辅助脚本:隐藏控制台,并尽量脱离父进程作业对象,
// 避免主程序退出时把安装器一起杀掉。
// CREATE_NO_WINDOW | CREATE_NEW_PROCESS_GROUP | CREATE_BREAKAWAY_FROM_JOB
func ConfigureUpdaterHelper(cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true, CreationFlags: 0x08000000 | 0x00000200 | 0x01000000}
}

View File

@@ -14,3 +14,15 @@ func TestConfigureHidden(t *testing.T) {
t.Fatalf("hidden process flags missing: %#v", c.SysProcAttr)
}
}
func TestConfigureUpdaterHelper(t *testing.T) {
c := exec.Command("cmd.exe", "/c", "exit", "0")
ConfigureUpdaterHelper(c)
if c.SysProcAttr == nil || !c.SysProcAttr.HideWindow {
t.Fatalf("updater helper should hide console: %#v", c.SysProcAttr)
}
flags := c.SysProcAttr.CreationFlags
if flags&0x08000000 == 0 || flags&0x00000200 == 0 || flags&0x01000000 == 0 {
t.Fatalf("updater helper flags missing: %#v", c.SysProcAttr)
}
}