Как я могу сделать резервную копию Emacs каждый раз, когда я сохраняю? - PullRequest
4 голосов
/ 02 августа 2011

Время от времени я удаляю файлы, которые не должен, и хуже всего, файлы, которые я сам писал.Поэтому я много раз сохранялся с помощью функции резервного копирования Emacs.

Но моя проблема в том, что Emacs создает резервную копию только в первый раз, когда вы сохраняете буфер.Есть ли способ заставить Emacs делать это каждый раз, когда я нажимаю Cx Cs?

Так выглядит мой .emacs в настоящее время (только часть, которая имеет дело с резервными копиями):

* snip *

;;===== Резервные копии =====

;;Включить резервное копирование файлов.
(setq make-backup-files t)

;;Сохраните все файлы резервных копий в этом каталоге.
(setq backup-directory-alist (quote ((". *". "~ / .Emacs_backups /"))))

;;Всегда резервное копирование путем копирования (самое безопасное, но самое медленное)
(setq резервное копирование t)

;;Добавьте. ~ 1 ~ (и увеличивающиеся числа) к концу файла при сохранении резервной копии
(setq version-control t)

;;Определение количества старых версий файла (начиная с
;; самые последние и считая назад
(setq keep-new-version 100)

* snip *

Ответы [ 2 ]

6 голосов
/ 03 августа 2011

Прочитав это: EmacsWiki: принудительное резервное копирование

Я добавил эти строки в свой .emacs:

(defun force-backup-of-buffer ()
  (setq buffer-backed-up nil))

(add-hook 'before-save-hook  'force-backup-of-buffer)

Он использует стандартное резервное копирование / контроль версийно сбрасывает флаг, который указывает, была ли резервная копия буфера сохранена в этом сеансе перед сохранением.

Первые две строки определяют функцию, которая сбрасывает флаг, который указывает, было ли резервное копирование буфера во время этого сеанса.

В последней строке добавляется обработчик событий, который выполняет функцию перед сохранением.

Это именно то, что я хотел.

3 голосов
/ 03 августа 2011

Если вы хотите сделать это самостоятельно, вот начало:

(defun backup-and-save ()
  (interactive)
  (setq filename (buffer-file-name))
  (write-file (concat filename (format-time-string "_" "%Y%m%d%H%M%S")))
  (write-file filename)
  )

Сохраняет копию как originalfilename_timestamp в связи с отметкой времени.

Вы, конечно, можете настроить его так, чтобы он хранился в отдельной папке для резервных копий или добавлялись другие «настройки».

...