Отключение сообщения «Автосохранение… сделано»

14

Я хочу, чтобы мои документы сохранялись автоматически, но я не хочу, чтобы их прерывали сообщения "Автосохранение ... сделано" каждые несколько минут.

Есть ли способ просто отключить это сообщение, но нет функции автосохранения?

Я попытался следующее безуспешно: /programming/22511847/how-to-disable-auto-save-message

негодник
источник
12
Хотя функция do-auto-saveдопускает аргумент tдля пропуска сообщения, keyboard.cона вызывается с этим аргументом, жестко закодированным как nil. Я предлагаю вам открыть отчет об ошибке, чтобы аргумент можно было настроить.
ангус

Ответы:

2

Вы можете убедиться, что do-auto-saveвызывается с правильным аргументом для подавления сообщения, посоветовав функции:

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

(advice-add 'do-auto-save :around #'my-auto-save-wrapper)
stsquad
источник
Это не работает (по крайней мере, в Emacs 24.4.1). Как уже упоминалось @angus, do-auto-saveон не принимает во внимание аргументы, которые он получает.
Скарамуш
@scaramouche: странно, так как я тестировал его на HEAD ветви emacs-24, и он работал нормально. Хотя я звонил с Mx do-auto-save.
stsquad
1

Есть ли способ просто отключить это сообщение, но нет функции автосохранения?

Да, Emacs 27 представит пользовательскую опцию 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.

Квот (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.

Чтобы настроить переменную, вы можете M-xcustomize-variableRETauto-save-no-messageRETили просто:

(setq-default auto-save-no-message t)
Бэзил
источник
0

потому что здесь do-auto-saveвызывается cкодом, поэтому adviceздесь невозможно.

мы можем использовать таймер простоя. следующий код проверен.

(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)

также ср. http://tinyurl.com/ydeyn4ks

FunkyBaby
источник
Я хотел бы знать, почему этот ответ имеет 0 баллов. Являются ли таймеры простоя неправильным инструментом для выполнения этой работы?
0

Автосохранение выполняется auto-save-hookперед сохранением, поэтому вы можете использовать его для временного отключения сообщений (они все еще записываются в *Messages*буфер):

(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
источник