2011-08-24 3 views
0

번호가 매겨진 백업을 유지하도록 emacs를 구성하는 방법을 알고 있습니다. 번호가 매겨진 백업을 찾는 가장 표준적인 방법을 모르겠습니다.emacs가 생성 한 번호가 매겨진 백업 파일을 나열하는 표준 방법은 무엇입니까?

emacs 함수 "find-backup-file-name"이 (가) 가장 가까운 것처럼 보입니다. 해당 설명서의 상태 :

이 함수는 filename에 대한 새 백업 파일의 파일 이름을 계산합니다. 또한 삭제를 위해 기존 백업 파일을 제안 할 수 있습니다. 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")) 

이 방법은 정상적으로 작동합니다. 그러나, "찾아내는"포격은 나에게 해킹처럼 보입니다. 특히이 방법은 플랫폼에 따라 다르기 때문에 특히 그렇습니다.

내가 사용해야하는 내장 메소드가 있습니까? 아니면 적어도 더 관용적 인 메소드가 있습니까?

답변

0

그래서 여기에 제가 결정한 해결책이 있습니다. 필자는 * 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

개인적으로 백업 파일을 중앙 폴더에 저장하지 않으므로 작업 코드를 제공 할 수 없지만 디렉터리 내용을 검색하려면 directory-files을 사용하십시오.

+0

그건 나쁜 생각이 아닙니다. 플랫폼 독립적 인 (하나의 희망) 방식으로 모든 파일을 가져올 수 있습니다. 그러나, 나는 아직도 그 목록을 더 필터링해야 할 것이다. –

관련 문제