Wyłączanie komunikatu „Automatyczne zapisywanie… gotowe”

14

Chcę, aby moje dokumenty były automatycznie zapisywane, ale nie chcę, aby co kilka minut pojawiał się komunikat „Automatyczne zapisywanie ... zrobione”.

Czy istnieje sposób na wyłączenie tej wiadomości, ale nie na funkcję automatycznego zapisywania?

Próbowałem następujących bez powodzenia: /programming/22511847/how-to-disable-auto-save-message

scaramouche
źródło
12
Chociaż funkcja do-auto-savedopuszcza argument tdo pominięcia komunikatu, keyboard.cjest on wywoływany z tym argumentem zakodowanym na stałe jako nil. Sugeruję otwarcie raportu o błędzie, aby można było dostosować argument.
angus

Odpowiedzi:

2

Możesz upewnić się, że do-auto-savejest wywoływany z poprawnym argumentem, aby ukryć komunikat, doradzając funkcji:

(defun my-auto-save-wrapper (save-fn &rest args)
  (apply save-fn '(t)))

(advice-add 'do-auto-save :around #'my-auto-save-wrapper)
stsquad
źródło
To nie działa (przynajmniej w Emacsie 24.4.1). Jak wspomniano w @angus, do-auto-savenie bierze pod uwagę argumentów, które otrzymuje.
scaramouche
@scaramouche: dziwne, ponieważ testowałem go na HEAD oddziału emacs-24 i działało dobrze. Chociaż dzwoniłem z Mx do-auto-save.
stsquad
1

Czy istnieje sposób na wyłączenie tej wiadomości, ale nie na funkcję automatycznego zapisywania?

Tak, Emacs 27 wprowadzi opcję użytkownika auto-save-no-message:

auto-save-no-message is a variable defined in ‘keyboard.c’.
Its value is nil

  You can customize this variable.


This variable was introduced, or its default value was changed, in
version 27.1 of Emacs.

Documentation:
Non-nil means do not print any message when auto-saving.

Quoth (emacs) Auto Save:

18.6 Auto-Saving: Protection Against Disasters
==============================================

From time to time, Emacs automatically saves each visited file in a
separate file, without altering the file you actually use.  This is
called “auto-saving”.  It prevents you from losing more than a limited
amount of work if the system crashes.

   When Emacs determines that it is time for auto-saving, it considers
each buffer, and each is auto-saved if auto-saving is enabled for it and
it has been changed since the last time it was auto-saved.  When the
‘auto-save-no-message’ variable is set to ‘nil’ (the default), the
message ‘Auto-saving...’ is displayed in the echo area during
auto-saving, if any files are actually auto-saved; to disable these
messages, customize the variable to a non-‘nil’ value.  Errors occurring
during auto-saving are caught so that they do not interfere with the
execution of commands you have been typing.

Aby dostosować zmienną, możesz M-xcustomize-variableRETauto-save-no-messageRET:

(setq-default auto-save-no-message t)
Bazylia
źródło
0

ponieważ do-auto-savejest wywoływany ctutaj przez kod, więc advicenie jest to możliwe tutaj.

możemy użyć bezczynnego timera. testowany jest następujący kod.

(setq auto-save-list-file-prefix nil)
(setq auto-save-visited-file-name t)
(setq auto-save-timeout 0)
(setq auto-save-interval 0)

(defun my-auto-save-silent ()
  (do-auto-save t))

(run-with-idle-timer 1 t #'my-auto-save-silent)

także por. http://tinyurl.com/ydeyn4ks

FunkyBaby
źródło
Chciałbym wiedzieć, dlaczego ta odpowiedź ma 0 punktów. Czy liczniki czasu bezczynności są niewłaściwym narzędziem do wykonania tej pracy?
0

Automatyczne zapisywanie jest uruchamiane auto-save-hookprzed zapisaniem, dzięki czemu można go użyć do tymczasowego wyłączenia wiadomości (nadal są one logowane w *Messages*buforze):

(add-hook 'auto-save-hook 'auto-save-silence+)

(defun auto-save-silence+ ()
  (setq inhibit-message t)
  (run-at-time 0 nil
               (lambda ()
                 (setq inhibit-message nil))))
Clemera
źródło