6

Is there a way to force Emacs to automatically save the current file (if it is not already saved) after typing n characters (n is a number determined by the user).

Edit: After the comment of @Dan and the suggestion of @lawlist it seems that the solution below is less risky:

   (setq auto-save-interval 10) ;;; n=10

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

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

I should mention that the above solution is based on http://www.emacswiki.org/emacs/ForceBackups.

2
  • 5
    Some unsolicited advise (I know, hooray!): be cautious with automatic saves. You run the risk that accidental changes to the buffer (unintentional deletes, mis-keyed yanks, etc.) could trigger a save, which will overwrite your file. auto-save-mode gets you most of the way there without actually overwriting your file; it seems better to reserve the explicit save for human intervention. As an alternative, maybe consider a function that puts a message in the echo area every n characters such as "You've changed a lot of text, please consider saving!", which you can heed or ignore at will.
    – Dan
    Commented Jan 31, 2015 at 12:06
  • 1
    @Dan thank you for the advice. You are right, I think I should use the build-in auto-save feature.
    – Name
    Commented Jan 31, 2015 at 14:50

1 Answer 1

8

Emacs has an auto-save feature that can be adapted to suit your needs. You can customize auto-save-interval to determine how many characters:

auto-save-interval is a variable defined in `C source code'. Its value is 300

Documentation: Number of input events between auto-saves. Zero means disable autosaving due to number of characters typed.

You can customize this variable.

5
  • auto-saving backups the file but it doesn't save the file itself. So my question remains unanswered. Thank you anyway.
    – Name
    Commented Jan 31, 2015 at 3:23
  • 4
    How about using save-buffer (or a custom function that essentially uses save-buffer when there is a valid buffer-file-name) in conjunction with the auto-save-hook? -- This normal hook is run whenever an auto-save is about to happen. gnu.org/software/emacs/manual/html_node/elisp/…
    – lawlist
    Commented Jan 31, 2015 at 4:39
  • 1
    +1 why not incorporate the comment of @lawlist in the current answer of Dan or write a separate answer.
    – Name
    Commented Jan 31, 2015 at 10:11
  • 1
    @lawlist: good idea -- do you want to write that up as an answer?
    – Dan
    Commented Jan 31, 2015 at 11:59
  • @Dan -- the idea was primarily yours -- I just looked into whether it was a standard Emacs concept where modes generally have hooks, or a run-hooks statement at the end of a base function. The answer / credit belongs to you. :) As you know, there are certain modes / functions that place a buffer-file-name on a non-file-visiting-buffer -- I'm not sure how you are going to deal with that situation because save-buffer may prompt/offer the user confirmation to save . . . there are probably other exceptions also where a file hasn't been saved yet. Maybe a valid-file check would be needed.
    – lawlist
    Commented Jan 31, 2015 at 16:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.