Каков канонический способ перечисления пронумерованных файлов резервных копий, созданных emacs? - PullRequest
0 голосов
/ 24 августа 2011

Я знаю, как настроить emacs для хранения пронумерованных резервных копий. Я не знаю самый канонический способ найти эти пронумерованные резервные копии.

Функция emacs "find-backup-file-name", кажется, самая близкая. Его документация гласит:

Эта функция вычисляет имя файла для нового файла резервной копии для имени файла. Он также может предложить определенные существующие файлы резервных копий для удаления. find-backup-file-name возвращает список, CAR которого является именем нового файла резервной копии, а CDR - список файлов резервных копий, удаление которых предлагается.

Однако это не то, что я ищу. Я ищу список ВСЕХ ранее созданных файлов резервных копий. Вот код (перефразированный), который я написал, чтобы выполнить это:

(defvar backup-directory "~/emacs.d/backups/")
(defun get-backup-pattern (file-name)
    (concat "*" (replace-regexp-in-string "\/" "\\!" file-name t t) ".~*"))

(butlast
  (split-string
    (shell-command-to-string
        (concat "find " 
                 backup-directory 
                 " -name \"" 
                 (get-backup-pattern (buffer-file-name)) 
                 "\""))
    "\n"))

Этот метод работает отлично. Тем не менее, обстрел, чтобы "найти", кажется мне хаком; Тем более что этот метод зависит от платформы.

Есть ли какой-то встроенный метод, который мне следует использовать, или, по крайней мере, что-то более идиоматическое?

Ответы [ 2 ]

0 голосов
/ 27 августа 2011

Итак, вот решение, которое я выбрал. Я отказался от использования команды * nix find и использую каталоги-файлы, как было предложено.

(defun get-filter-pattern (file-name)
  (concat (replace-regexp-in-string "\/" "!" file-name t t)
      ".~[0-9]*~*$"))

(defun filter (condp lst)
  (delq nil
    (mapcar (lambda (x) (and (funcall condp x) x)) lst)))

(defun filter-files (backup-directory buffer-file-name)
  (mapcar (lambda (backup-name) (concat backup-directory backup-name))
      (filter (lambda (backup-name)
            (string-match (get-filter-pattern buffer-file-name) backup-name))
          (directory-files backup-directory))))

Возможно, это не так оптимизировано, как использование find. Однако он должен быть независимым от платформы (т. Е. Может использоваться в Windows).

0 голосов
/ 26 августа 2011

Лично я не сохраняю файлы резервных копий в центральной папке, поэтому не могу предоставить рабочий код, но если вы хотите искать содержимое каталога, используйте directory-files.

...