LINUX.ORG.RU

Создание бэкапов файлов в Emacs

 ,


0

1

Имеется настройка автоматического переноса файлов в специальную папку перед их сохранением в Emacs'е (замена постоянно появляющихся в директории ~файлов, а также возможность хранения нескольких версий данных файлов). Почему-то некоторые файлы не переносятся после сохранения, к таким файлам относится например init.el. Различий в файлах, которые переносятся и которые не переносятся никаких нет, права одинаковы, файлы расположены на одном диске. Из-за чего это может быть?

Настройка создания бэкапов:

(setq
 backup-by-copying t
 backup-directory-alist
 '(("." . "/home/max/.emacs.d/.backup/"))
 auto-save-file-name-transforms
 '((".*" "/home/max/.emacs.d/.backup/" t))
 delete-old-versions t
 kept-new-versions 8
 kept-old-versions 2
 version-control t)

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

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

(setq savehist-file "/data/.emacs_backup/savehist")
(setq savehist-additional-variables
      '(kill-ring search-ring regexp-search-ring))
(savehist-mode 1)

неправильно задано auto-save-file-name-transforms
Скажи дословно, как должно трансформироваться имя файла?

iVS ★★★★★
()
Ответ на: комментарий от iVS

Файлы, бэкапы которых после сохранения файла успешно отправляются в папку .backup имеют имена: !home!max!.bash_history.~2~

maglight
() автор топика
Ответ на: комментарий от iVS

Auto-save нужен для сохранения временных файлов, для еще не сохраненных файлов в той же папке, что и бэкапы.

maglight
() автор топика
Ответ на: комментарий от maglight

Не понимаю, почему ты говорить здесь Создание бэкапов файлов в Emacs (комментарий)
про бэкапы, когда я спрашивал про переменную из auto-save, которая не имеет отношения к бэкапам. то, что она неправильная, остается в силе.

Я вкурил http://www.emacswiki.org/emacs/ForceBackups ничего неправильного у тебя не заметил. Значит дело в прямости рук. Ты бэкапы создаешь копированием или переносом? если второе, то какие права на файлы?

iVS ★★★★★
()
Ответ на: комментарий от iVS

После сохранения, старая версия файла копируется в папку backups (за копирование отвечает переменная backup-by-copying). Но самое интересное, что почему-то не все файлы бэкапятся. Например init.el, хотя другой файл, в той же директории с теми же правами - спокойно.

maglight
() автор топика
Ответ на: комментарий от iVS

Про auto-save-file-name-transforms. А что там не правильного? Здесь должно быть все верно, т.к. авто-сохранение измененных файлов работает, и они перемещаются в ту же папку backups. Работает для всех файлов в отличие от бэкапов.

maglight
() автор топика
Ответ на: комментарий от maglight

Например init.el, хотя другой файл

Предположу, это потому, что init.el был создан еще до инициализации бэкапа. Попробуй пересоздать init.el. Но в любом случае, лучше задействовать Git и пушить на удаленный сервак.

iVS ★★★★★
()
Ответ на: комментарий от maglight

А что там не правильного?

Вот значение по-умолчанию auto-save-file-name-transforms:

(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'" "/tmp/\\2" t))
И вопрос к знатокам: что значит \\2 ? :)

iVS ★★★★★
()
Ответ на: комментарий от iVS

Пробовал. Все это очень странно. На счет гита, пользуюсь, настроена на .emacs.d, но на всю систему места в репе не хватит (хотя, битбакет обещает неограниченное приватное хранилище:)). Для этого и нужен emacs'овский костыль, с ним любой файл системы, который ты изменил будет забэкаплен, мало ли что.

maglight
() автор топика
Ответ на: комментарий от maglight

на всю систему места в репе не хватит

Есть же .gitignore, первый раз слышу, чтобы на текстовые конфиги места не хватало.

iVS ★★★★★
()
Ответ на: комментарий от maglight

А \2 - вставка того, что попало между второй парой груглых скобок.

Иными словами, \\2 - имя файла без учета директории, который как раз и копируется в /tmp/. А вот где у тебя имя файла - я не вижу.

iVS ★★★★★
()
Ответ на: комментарий от iVS

Я говорю про всю систему, конфиги в /etc и т.д. Не будешь же создавать в каждой такой папке репозиторий. Хотя может и можно как-нибудь настроить

maglight
() автор топика
Ответ на: комментарий от maglight

Хотя может и можно как-нибудь настроить

У меня, например, на работе убунта, дома - гента. и все, что синхронизируется, - это конфиг имакса. Не привязанность к дистрибутиву я вижу как плюс. А для /etc/ и прочего есть более удобные средства. В генте - Catalyst.

iVS ★★★★★
()
Ответ на: комментарий от iVS

Как я понял, данная переменная при инициализации принимает на вход регулярное выражение, а уже при вызове функции, отвечающей за бекап по этому регулярному выражению имя файла преобразовывается нужным нам образом. Вот из мануала: The variable `auto-save-file-name-transforms' allows a degree of control over the auto-save file name. It lets you specify a series of regular expressions and replacements to transform the auto save file name. The default value puts the auto-save files for remote files (*note Remote Files::) into the temporary file directory on the local machine.

maglight
() автор топика
Ответ на: комментарий от iVS

Бэкапы нужны не для синхронизации, а для того, чтобы, если что откатиться к предыдущему состоянию файла (знаю, гит в это тоже может)

maglight
() автор топика
Ответ на: комментарий от maglight

Т.е., второй аргумент - это имя файла, используемого для auto save. Не директория, как у тебя, а именно файл, как я понял из доков. Очевидно, оно строится на основе самого файла, удовлетворяющего регулярному выражению.

iVS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.