Как заставить after-save-hook вызываться при автосохранении?

Я определил ловушку после сохранения, и она отлично работает, если я сохраняю, нажимая Ctrl-x Ctrl-s. Тем не менее, я заметил, что сохранения, запускаемые практически любым другим способом, не срабатывают, как ожидалось. Сначала я заметил, что код с вызовом save-some-buffers не вызывает его, поэтому я сделал следующее:

(defadvice save-some-buffers (after after-save-some-buffers activate)
  (run-hooks 'after-save-hook))

И это почти сработало, за исключением того, что ловушка запускалась, даже если файл не изменился, так что это все еще не было идеальным. Но потом я заметил, что автосохранение тоже не срабатывает. Поэтому я проконсультировался с документами, нашел функцию автоматического сохранения и попробовал тот же трюк:

(defadvice do-auto-save (after after-auto-save activate)
  (run-hooks 'after-save-hook))

И там хук вообще не выполняется. do-auto-save - это исходная функция C, поэтому, по-видимому, она не вызывает какой-либо elisp, который обычно вызывает хук.

Короче говоря, как мне сделать так, чтобы всякий раз, когда emacs сохраняет мои измененные буферы, действительно запускался after-save-hook?


person Joseph Garvin    schedule 01.10.2014    source источник
comment
Не могли бы вы подсказать, почему вам нужно запускать код после автосохранения? Прямого ответа на ваш вопрос может не быть, поэтому полезно предоставить дополнительную информацию о том, что вы пытаетесь сделать.   -  person Stefan    schedule 01.10.2014


Ответы (1)


after-save-hook запускается при выполнении save-some-buffers. Было бы очень странно, если бы это было не так. Можете ли вы создать реплику из emacs -Q?

person event_jr    schedule 01.10.2014
comment
FWIW У меня такая же проблема. Я хочу удалить конечный пробел при сохранении, но (add-hook 'before-save-hook 'delete-trailing-whitespace) не запускается с auto-save. - person Pierre R; 16.08.2016