Я не думаю, что вы сможете сделать это с помощью простого макроса, но вы можете заставить его работать с надстройкой.
Надстройка будет:
Trap-события, в частности событие SelectionChanged.
Каждый раз, когда происходит событие, код обработки события сравнивает текущее время со временем его последнего срабатывания (сохраняется в статической переменной).
Если с момента последнего события прошло более x минут, сохраняется презентация и сбрасывается время последнего запуска.
Если событие никогда не срабатывает во время сеанса, это означает, что ничего не изменилось, поэтому нет реальной причины для сохранения.
Еще одно уточнение: до или после проверки разницы во времени проверьте свойство презентации .Saved. Если True, то в презентации ничего не изменилось, поэтому, опять же, нет причин для сохранения.
Чтобы получить коммиты (все и выводить одну строку для каждого коммита):
git rev-list --all --pretty=oneline
Затем разделите коммиты по пробелу с лимитом 2 и получите каждый идентификатор и сообщение фиксации
Чтобы получить капли, созданные с помощью commit (рекурсивный переход к подкаталогам, отображение коммитов слияния, обнаружение переименований и копий, не показывать идентификатор фиксации в первой строке):
git diff-tree -r -c -M -C --no-commit-id <commit-sha>
Небольшой анализ каждой строки и исключение некоторых из них - и мы получаем список новых BLOB-объектов и они путь для фиксации
Последний - получение размеров blob:
git cat-file --batch-check < <list-of-blob-shas>
И в другой раз небольшой анализ
Вы можете получить все, кроме размера из коробки. Этот довольно близко:
git log --name-status