unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* numbered backups
@ 2014-05-21  2:13 Steven Arntson
  2014-05-21 17:26 ` Michael Heerdegen
  0 siblings, 1 reply; 9+ messages in thread
From: Steven Arntson @ 2014-05-21  2:13 UTC (permalink / raw)
  To: help-gnu-emacs

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?

Thank you!
Steven Arntson




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
       [not found] <mailman.1717.1400638422.1147.help-gnu-emacs@gnu.org>
@ 2014-05-21  2:37 ` Pascal J. Bourguignon
  2014-05-21  3:00   ` Steven Arntson
       [not found]   ` <mailman.1721.1400641272.1147.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 9+ messages in thread
From: Pascal J. Bourguignon @ 2014-05-21  2:37 UTC (permalink / raw)
  To: help-gnu-emacs

Steven Arntson <steven@stevenarntson.com> 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

-- 
__Pascal Bourguignon__
http://www.informatimago.com/
"Le mercure monte ?  C'est le moment d'acheter !"


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
  2014-05-21  2:37 ` Pascal J. Bourguignon
@ 2014-05-21  3:00   ` Steven Arntson
       [not found]   ` <mailman.1721.1400641272.1147.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 9+ messages in thread
From: Steven Arntson @ 2014-05-21  3:00 UTC (permalink / raw)
  To: help-gnu-emacs

"Pascal J. Bourguignon" <pjb@informatimago.com> writes:

> Steven Arntson <steven@stevenarntson.com> 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.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
       [not found]   ` <mailman.1721.1400641272.1147.help-gnu-emacs@gnu.org>
@ 2014-05-21  4:14     ` Pascal J. Bourguignon
  2014-05-21 16:21       ` Steven Arntson
  0 siblings, 1 reply; 9+ messages in thread
From: Pascal J. Bourguignon @ 2014-05-21  4:14 UTC (permalink / raw)
  To: help-gnu-emacs

Steven Arntson <steven@stevenarntson.com> writes:

> "Pascal J. Bourguignon" <pjb@informatimago.com> writes:
>
>> Steven Arntson <steven@stevenarntson.com> 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~")


-- 
__Pascal Bourguignon__
http://www.informatimago.com/
"Le mercure monte ?  C'est le moment d'acheter !"


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
  2014-05-21  4:14     ` Pascal J. Bourguignon
@ 2014-05-21 16:21       ` Steven Arntson
  0 siblings, 0 replies; 9+ messages in thread
From: Steven Arntson @ 2014-05-21 16:21 UTC (permalink / raw)
  To: help-gnu-emacs

"Pascal J. Bourguignon" <pjb@informatimago.com> writes:

> Steven Arntson <steven@stevenarntson.com> writes:
>
>> "Pascal J. Bourguignon" <pjb@informatimago.com> writes:
>>
>>> Steven Arntson <steven@stevenarntson.com> 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




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
  2014-05-21  2:13 numbered backups Steven Arntson
@ 2014-05-21 17:26 ` Michael Heerdegen
  2014-05-21 18:01   ` Steven Arntson
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Heerdegen @ 2014-05-21 17:26 UTC (permalink / raw)
  To: help-gnu-emacs

Steven Arntson <steven@stevenarntson.com> writes:

> file.org.~001~
> file.org.~002~

BTW, if your problem is about how your backup files are sorted in dired,
have a look at the ls -v flag (sort by version) - it works with dired.

Michael.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
  2014-05-21 17:26 ` Michael Heerdegen
@ 2014-05-21 18:01   ` Steven Arntson
  2014-05-21 20:27     ` Michael Heerdegen
  0 siblings, 1 reply; 9+ messages in thread
From: Steven Arntson @ 2014-05-21 18:01 UTC (permalink / raw)
  To: help-gnu-emacs

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Steven Arntson <steven@stevenarntson.com> writes:
>
>> file.org.~001~
>> file.org.~002~
>
> BTW, if your problem is about how your backup files are sorted in dired,
> have a look at the ls -v flag (sort by version) - it works with dired.
>
> Michael.

Hi Michael,

Yes, that's exactly the behavior I'm looking for! I tried it in eshell,
and it worked perfectly. How do I get dired to act like that?

Thank you!
steven




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
  2014-05-21 18:01   ` Steven Arntson
@ 2014-05-21 20:27     ` Michael Heerdegen
  2014-05-21 22:37       ` Steven Arntson
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Heerdegen @ 2014-05-21 20:27 UTC (permalink / raw)
  To: help-gnu-emacs

Steven Arntson <steven@stevenarntson.com> writes:

> Yes, that's exactly the behavior I'm looking for! I tried it in eshell,
> and it worked perfectly. How do I get dired to act like that?

You just need to set the default value of `dired-listing-switches'
accordingly and add the -v flag, e.g.

    (setq-default dired-listing-switches "-ahlv")

But also note: when I used that some while ago (now I use always version
control), I saw that -v was incompatible or didn't work so nicely with
some other ls options - I don't know the details anymore.  But in
general, it works well with dired, also s (`dired-sort-toggle-or-edit')
should work ok with it.

Michael.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: numbered backups
  2014-05-21 20:27     ` Michael Heerdegen
@ 2014-05-21 22:37       ` Steven Arntson
  0 siblings, 0 replies; 9+ messages in thread
From: Steven Arntson @ 2014-05-21 22:37 UTC (permalink / raw)
  To: help-gnu-emacs

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Steven Arntson <steven@stevenarntson.com> writes:
>
>> Yes, that's exactly the behavior I'm looking for! I tried it in eshell,
>> and it worked perfectly. How do I get dired to act like that?
>
> You just need to set the default value of `dired-listing-switches'
> accordingly and add the -v flag, e.g.
>
>     (setq-default dired-listing-switches "-ahlv")
>
> But also note: when I used that some while ago (now I use always version
> control), I saw that -v was incompatible or didn't work so nicely with
> some other ls options - I don't know the details anymore.  But in
> general, it works well with dired, also s (`dired-sort-toggle-or-edit')
> should work ok with it.
>
> Michael.

I added "v" through the customize menu, and it seems to be working
perfectly. Thank you very much!

-Steven




^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-05-21 22:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-21  2:13 numbered backups Steven Arntson
2014-05-21 17:26 ` Michael Heerdegen
2014-05-21 18:01   ` Steven Arntson
2014-05-21 20:27     ` Michael Heerdegen
2014-05-21 22:37       ` Steven Arntson
     [not found] <mailman.1717.1400638422.1147.help-gnu-emacs@gnu.org>
2014-05-21  2:37 ` Pascal J. Bourguignon
2014-05-21  3:00   ` Steven Arntson
     [not found]   ` <mailman.1721.1400641272.1147.help-gnu-emacs@gnu.org>
2014-05-21  4:14     ` Pascal J. Bourguignon
2014-05-21 16:21       ` Steven Arntson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).