Skip to content
Merged
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
14 changes: 9 additions & 5 deletions TeXmacs/progs/texmacs/texmacs/tm-files.scm
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,9 @@
;; ----
;; doc id 只在用户明确保存时随文档持久化;打开已有文件时不会静默
;; 写回源文件。
(define (save-buffer-save name opts)
(define (save-buffer-save name opts . kind*)
;;(display* "save-buffer-save " name "\n")
(let ((kind (if (null? kind*) "save" (car kind*))))
(with vname `(verbatim ,(utf8->cork (url->system name)))
(auto-backup-ensure-buffer-doc-id! name)
(if (buffer-save name)
Expand All @@ -308,8 +309,8 @@
;; Remember directory for file dialog
(remember-file-dialog-directory name)
(set-message `(concat "Saved " ,vname) "Save file")
(auto-backup-buffer name "on-save")
(save-buffer-post name opts)))))
(auto-backup-buffer name kind)
(save-buffer-post name opts))))))

(define (save-buffer-check-faithful name opts)
;;(display* "save-buffer-check-faithful " name "\n")
Expand Down Expand Up @@ -432,7 +433,7 @@
(if (and (url-scratch? name) (url-exists? name)) (system-remove name))
(buffer-rename name new-name)
(buffer-pretend-modified new-name)
(save-buffer-save new-name opts))
(save-buffer-save new-name opts "save-as"))

(define (save-buffer-as-check-faithful new-name name opts)
;;(display* "save-check-as-check-faithful " new-name ", " name "\n")
Expand Down Expand Up @@ -489,7 +490,10 @@
(with vto `(verbatim ,(url->system to))
(if (buffer-export name to fm)
(set-message `(concat "Could not save " ,vto) "Export file")
(set-message `(concat "Exported to " ,vto) "Export file"))))
(begin
(set-message `(concat "Exported to " ,vto) "Export file")
(when (== fm "pdf")
(auto-backup-buffer name "export-pdf"))))))

(define (export-buffer-check-permissions name to fm opts)
;;(display* "export-buffer-check-permissions " name ", " to ", " fm "\n")
Expand Down
8 changes: 8 additions & 0 deletions TeXmacs/progs/texmacs/texmacs/tm-print.scm
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@
(lambda (open?)
(when open? (preview-file fname)))))

(define (auto-backup-after-pdf-export fname)
(when (and (== (url-suffix fname) "pdf")
(url-exists? fname))
(auto-backup-buffer (current-buffer) "export-pdf")))

(tm-define (wrapped-print-to-file fname)
(system-wait "Exporting, " (translate "please wait"))
(let* ((cur (current-buffer))
Expand All @@ -96,6 +101,7 @@
(remove-style-package "dark"))
(print-to-file fname)
(switch-to-buffer cur)
(auto-backup-after-pdf-export fname)
(buffer-close buf))
(system-wait "" "")
(user-confirm-open-pdf fname))
Expand All @@ -119,6 +125,7 @@
(unless (attach-doc-to-exported-pdf fname)
(notify-now "Fail to attach tm to pdf"))
(switch-to-buffer cur)
(auto-backup-after-pdf-export fname)
(buffer-close buf))
(system-wait "" "")
(user-confirm-open-pdf fname))
Expand All @@ -142,6 +149,7 @@
(unless (attach-doc-to-exported-pdf fname)
(notify-now "Fail to attach tmu to pdf"))
(switch-to-buffer cur)
(auto-backup-after-pdf-export fname)
(buffer-close buf))
(system-wait "" "")
(user-confirm-open-pdf fname))
Expand Down
43 changes: 43 additions & 0 deletions devel/200_62.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# [200_62] 保存/另存为/导出PDF 触发自动备份的 copy 动作

## 如何测试

1. 准备一个可正常保存的 TeXmacs 文档,修改内容后执行保存。
- 预期:自动备份目录中生成源文档的备份文件。
- 预期:manifest 中该文档最新版本的 `kind` 为 `save`。

2. 对同一文档做出部分修改,执行另存为。
- 预期:自动备份目录中生成新文件对应的备份文件。
- 预期:manifest 中文档最新版本的 `kind` 为 `save-as`。

3. 对同一文档做出部分修改,执行 PDF 导出。
- 预期:PDF 文件正常生成。
- 预期:自动备份目录中生成的是源文档的备份文件,不是 PDF 文件。
- 预期:manifest 中该文档最新版本的 `kind` 为 `export-pdf`。

4. 重复保存或重复导出未修改的文档。
- 预期:复用既有 md5 去重逻辑,不产生内容相同的重复 version。

## 2026/05/07 保存/另存为/导出PDF 触发自动备份的 copy 动作

### What

在保存、另存为、PDF 导出成功后主动调用现有 `auto-backup-buffer`:

- 保存成功后调用 `(auto-backup-buffer name "save")`。
- 另存为成功后调用 `(auto-backup-buffer new-name "save-as")`。
- PDF 导出成功后调用 `(auto-backup-buffer (current-buffer) "export-pdf")`,备份源文档 buffer,不备份导出的 PDF 文件。

### Why

自动备份原先主要由打开、周期、手动恢复等路径触发。用户完成保存、另存为或 PDF 导出后,文档已经处在一个明确的成功操作边界,此时主动生成一次备份,可以把用户认为重要的版本纳入本地备份历史。

触发点必须放在操作成功之后,避免失败保存或失败导出污染备份历史;同时要复用已有 manifest、md5 去重和 retention 逻辑,避免引入新的备份存储分支。

### How

- `save-buffer-save` 增加可选 `kind` 参数,默认值为 `save`。普通保存沿用同一个成功分支,只把原来的 `"on-save"` 改为 `"save"`。
- 另存为流程在 `save-buffer-as-save` 中完成 `buffer-rename` 后调用 `save-buffer-save`,并显式传入 `"save-as"`,避免保存和另存为共用内部函数时生成两次备份或记录错误 kind。
- `export-buffer-export` 在 `buffer-export` 成功返回后,如果导出格式为 `pdf`,对源 `name` 调用 `"export-pdf"` 备份。
- `wrapped-print-to-file` 及嵌入文档的 PDF 导出包装函数在临时 buffer 打印完成后切回 `cur`,确认目标 PDF 已存在,再调用 `"export-pdf"`。这样备份对象是源文档 buffer,不是临时 buffer,也不是 PDF 文件。
- 未修改云插件上传逻辑,未新增 UI。`auto-backup-buffer` 后续仍走现有 manifest、md5 去重和 retention 逻辑。