2014-10-01 3 views
1

Я определил послезахват, и он отлично работает, если я сохраню, нажав Ctrl-x Ctrl-s. Тем не менее, я заметил, что сохранение практически не срабатывает, как и ожидалось. Сначала я заметил, что код под названием копи-некоторые-буферы не вызывали, так что я сделал это:Как сделать вызов после сохранения при автосохранении?

(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, которое обычно запускает hook.

Вкратце, как это сделать, когда emacs сохраняет измененные буферы, которые действительно выполняются после сохранения?

+0

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

ответ

0

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

+0

FWIW У меня такая же проблема. Я хочу удалить конечное пространство при сохранении, но '(add-hook 'before-save-hook' delete-trailing-whitespace)' не запускается с 'auto-save'. –

Смежные вопросы