From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Steven Arntson Newsgroups: gmane.emacs.help Subject: Re: numbered backups Date: Wed, 21 May 2014 09:21:54 -0700 Message-ID: <87ioozrtjx.fsf@stevenarntson.com> References: <877g5fhn75.fsf@kuiper.lan.informatimago.com> <87y4xvg43z.fsf@kuiper.lan.informatimago.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1400689540 24150 80.91.229.3 (21 May 2014 16:25:40 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 21 May 2014 16:25:40 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed May 21 18:25:33 2014 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Wn9Ke-00020g-5c for geh-help-gnu-emacs@m.gmane.org; Wed, 21 May 2014 18:25:32 +0200 Original-Received: from localhost ([::1]:60801 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wn9Kd-0007kF-IN for geh-help-gnu-emacs@m.gmane.org; Wed, 21 May 2014 12:25:31 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53795) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wn9KL-0007j5-E5 for help-gnu-emacs@gnu.org; Wed, 21 May 2014 12:25:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wn9KF-00011a-4C for help-gnu-emacs@gnu.org; Wed, 21 May 2014 12:25:13 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:40233) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wn9KE-0000zf-P6 for help-gnu-emacs@gnu.org; Wed, 21 May 2014 12:25:07 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1Wn9KC-0001Nd-IQ for help-gnu-emacs@gnu.org; Wed, 21 May 2014 18:25:04 +0200 Original-Received: from 97-126-85-177.tukw.qwest.net ([97.126.85.177]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 21 May 2014 18:25:04 +0200 Original-Received: from steven by 97-126-85-177.tukw.qwest.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 21 May 2014 18:25:04 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 118 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 97-126-85-177.tukw.qwest.net User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:gxErdt/AWQFmqqtjolVQjRq55AQ= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:97777 Archived-At: "Pascal J. Bourguignon" writes: > Steven Arntson writes: > >> "Pascal J. Bourguignon" writes: >> >>> Steven Arntson writes: >>> >>>> I know I read how to do this somewhere, but can't find it now. I'd >>>> like >>>> emacs to name my backup files not as >>>> >>>> file.org.~1~ >>>> file.org.~2~ >>>> >>>> but rather as >>>> >>>> file.org.~001~ >>>> file.org.~002~ >>>> >>>> is there a variable I could call up from M-x customize to >>>> influence this >>>> behavior? >>> >>> See the variable make-backup-file-name-function >>> and the function make-backup-file-name >> >> This looks promising, but I'm too much of a beginner to accomplish much >> with it! Under "value menu" for "Make Backup File Name Function" it asks >> me, "Your function: ______". I don't know what to put there to achieve >> my desired result. > > Reading the source of make-backup-file-name we can see that it's > actually the function find-backup-file-name that formats the backup file > names. > > > This function has to be changed to allow for smooth migration from > .~%d~ to .~%03d~ version numbers, and to allow parameterisation of the > version number format. > > Here is the new find-backup-file-name function, with the additions. > > > (defcustom backup-file-version-format "%d" > "format specifier for version numbers in backup files." > :group 'backup > :type 'string) > > (defun format-backup-file-name (name &optional version) > (if version > (concat name ".~" (format backup-file-version-format version) "~") > (concat name ".~"))) > > (defun find-backup-file-name (fn) > "Find a file name for a backup file FN, and suggestions for deletions. > Value is a list whose car is the name for the backup file > and whose cdr is a list of old versions to consider deleting now. > If the value is nil, don't make a backup. > Uses `backup-directory-alist' in the same way as does > `make-backup-file-name'." > (let ((handler (find-file-name-handler fn 'find-backup-file-name))) > ;; Run a handler for this function so that ange-ftp can refuse to do it. > (if handler > (funcall handler 'find-backup-file-name fn) > (if (or (eq version-control 'never) > ;; We don't support numbered backups on plain MS-DOS > ;; when long file names are unavailable. > (and (eq system-type 'ms-dos) > (not (msdos-long-file-names)))) > (list (make-backup-file-name fn)) > (let* ((basic-name (make-backup-file-name-1 fn)) > (base-versions (format-backup-file-name (file-name-nondirectory basic-name))) > (backup-extract-version-start (length base-versions)) > (high-water-mark 0) > (number-to-delete 0) > possibilities deserve-versions-p versions) > (condition-case () > (setq possibilities (file-name-all-completions > base-versions > (file-name-directory basic-name)) > versions (sort (mapcar > (lambda (file) > (cons (backup-extract-version file) > file)) > possibilities) > (lambda (a b) (< (car a) (car b)))) > high-water-mark (apply (function max) 0 (mapcar (function car) versions)) > deserve-versions-p (or version-control > (> high-water-mark 0)) > number-to-delete (- (length versions) > kept-old-versions > kept-new-versions > -1)) > (file-error (setq possibilities nil))) > (if (not deserve-versions-p) > (list (make-backup-file-name fn)) > (cons (format-backup-file-name basic-name (1+ high-water-mark)) > (if (and (> number-to-delete 0) > ;; Delete nothing if there is overflow > ;; in the number of versions to keep. > (>= (+ kept-new-versions kept-old-versions -1) 0)) > (let ((new-versions (let ((v (nthcdr kept-old-versions versions))) > (rplacd (nthcdr (1- number-to-delete) v) ()) > v))) > (mapcar (function cdr) new-versions)))))))))) > > > So now you can change the format: > > (setf backup-file-version-format "%03d") > (find-backup-file-name "/home/pjb/scratch.txt") > --> ("/home/pjb/scratch.txt.~013~" "scratch.txt.~4~") This is way over my head, but I will make a try to get it working, thank you! Steven