2016-07-18 5 views
1

Я пытался сделать упорную историю отменить в emacs.uno-tree история автозагрузки

У меня есть (setq undo-tree-auto-save history t). История действительно сохраняется при сохранении файла. Но когда я открываю файл, история отмены не загружается, пока я не использую отмену.

Итак, если я открываю файл и вношу некоторые изменения, тогда запустите M-x undo-tree-visualize, предыдущее дерево отмены исчезло, появились только последние изменения. Но если сначала запустить M-x undo-tree-visualize, я могу увидеть старое дерево отмены. Или, если я просто использую отмену, прежде чем вносить какие-либо изменения, загружается старая история отмены, и отмена работает так, как ожидалось.

Edit: Моя конфигурация выглядит следующим образом: https://gitlab.com/snippets/22693

edit2: Эта проблема до сих пор происходит с самым минимальным файлом Configure:

;;; init.el --- user init file  -*- no-byte-compile: t -*- 
(load-file "~/.emacs.d/undo-tree.el") 
(global-undo-tree-mode 1) 
(setq undo-tree-auto-save-history t) 
+0

Вы получили '(глобальный откат-древовидный режим 1)'. Пожалуйста, покажите нам свою конфигурацию. – djangoliv

+0

@djangoliv Моя конфигурация: https://gitlab.com/snippets/22693 – nialv7

ответ

1

Почему никто никогда не замечал этого? В undo-tree есть ошибка.

Функция undo-list-transfer-to-tree не смогла добавить «undo-tree-canary» в буфер-список отмены, из-за чего он отбрасывает содержимое буфера-undo-tree.

Я все еще смотрю на него, чтобы узнать, смогу ли я найти решение. Просто добавьте «отмена древовидный канарейку в буфер-отмена списка, заставляя его отказаться для содержимого в буфер, отмена списка вместо

Edit: Решение действительно положить канарейку в конце буфера-undo- список

(when (not (eq (last buffer-undo-list) 'undo-tree-canary)) 
    (setq buffer-undo-list (append buffer-undo-list '(nil undo-tree-canary)))) 
+0

Этот ответ не имеет смысла, не решает вашу проблему и опасен. Здесь определенно нет ошибки в 'undo-list-transfer-to-tree'. Blithely добавляет канарейку в конец 'buffer-undo-list', не имея понятия, что вы делаете, не поможет вам. –

+0

Канарейка используется для определения того, удалил ли Emacs историю отмены, прежде чем отменить дерево получило шанс увидеть его. Если канарейка ушла, это означает, что 'buffer-undo-list' превысил один из' undo- [outer- | strong-] limit', и некоторая история была отброшена. В этом случае 'buffer-undo-tree' нужно отбросить и перестроить из содержимого' buffer-undo-list'. Это именно то, что делает 'undo-list-transfer-to-tree' в этом случае. Во всяком случае, это не имеет никакого отношения к загрузке сохраненной истории из файла. –

1

Когда undo-tree-auto-save-history включена, отмена история загружается из файла с помощью функции undo-tree-load-history-hook, которая добавляется к find-file-hook. Таким образом, история отмены будет загружаться автоматически при открытии файла с включенным undo-tree-mode.

@djangoliv is right: это будет работать, только если global-undo-tree-mode включен, потому что undo-tree-mode необходимо включить до того, как вызывается find-file-hook. Возможно, второстепенная функция undo-tree-mode должна пытаться загрузить историю, если она обнаруживает, что буфер не был изменен с момента последнего сохранения истории отмены. Но на данный момент это не так.

Однако ваша конфигурация активирует global-undo-tree-mode, так что это не может быть проблемой.

Работы по загрузке истории просто отлично подходят для меня с включенным global-undo-tree-mode. Поэтому, если вы не дадите полный MWE, который воспроизводит вашу проблему, то есть пошаговые инструкции, начиная с «emacs -Q» и включая номера Emacs и undo-tree, вы вряд ли получите гораздо больше помощи здесь. (Также обратите внимание, что stackexchange не является трекером ошибок. Отчеты об ошибках должны быть отправлены по электронной почте по адресу, указанному в верхней части пакета.)

0

Вы переделали заказ, в котором вы загружаете свои плагины, а также файлы вы открываете автоматически через init.el или .emacs? Это сделало трюк для меня. Для зла требуется Undo-Tree. Таким образом, все, что связано с undo-tree, должно срабатывать, прежде чем загружать Evil. Особенно если вы используете «: e» вместо «find-file» для загрузки файлов. По крайней мере, в моей системе, которая решила эту проблему.

0

Я просто хочу прослушивать, что я испытываю подобную вещь.

если я emacs file-x с терминала, более ранняя история отмены для file-x не является недоступна для меня до I undo-tree-load-history. Однако, когда я открываю emacs и , тогда:edit file-x, история загружается просто отлично.

Я использую spacemacs 0.105.19, с emacs-24.5.1.

Моего .spacemacs является https://pastebin.com/VNWtB0F1

+0

В первом случае файл предположительно посещается до того, как будет загружено 'undo-tree'. – phils

+0

Звучит очень правдоподобно. Я не знаю emacs-lisp и поэтому не знаю, как правильно его протестировать, отлаживать или исправлять поведение. – Reefersleep