Выход из Emacs занимает 10 секунд

2

Закрытие emacs 23 в Ubuntu 12.04 и 14.04 занимает очень много времени. Я рекурсивно разделил пополам мой файл .emacs (согласно совету Дрю здесь ) и нашел следующий фрагмент в качестве оскорбительного бита:

;;auto-complete
(add-to-list 'load-path "~/.emacs.d/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
(define-key ac-completing-map "\t" 'ac-complete) ;; change return key with tab to ac
(define-key ac-completing-map [tab] 'ac-complete) 
(define-key ac-completing-map [return] nil)       

(require 'auto-complete-latex)
(setq ac-l-dict-directory "~/.emacs.d/ac-l-dict/")
;;(add-to-list 'ac-modes 'foo-mode)
;;(add-hook 'foo-mode-hook 'ac-l-setup)
(require 'ac-math)
(add-to-list 'ac-modes 'latex-mode)   ; make auto-complete aware of {{{latex-mode}}}
(defun ac-latex-mode-setup ()         ; add ac-sources to default ac-sources
(setq ac-sources
 (append '(ac-source-math-latex ac-source-latex-commands  ac-source-math-unicode)
           ac-sources))
)
;;(require 'auto-complete)
(add-hook 'LaTeX-mode-hook 'ac-latex-mode-setup)
;;(ac-flyspell-workaround)        ; workaround if using flyspell

`

Любой совет, решающий эту не опасную для жизни, но раздражающую ошибку, очень приветствуется.

** Редактирование на основе ответов @lawlist и @Drew: ** Спасибо @lawlist и @Drew за потраченное время. переменная description не показывает ничего прикрепленного к моему .emacs

kill-emacs-hook is a variable defined in `C source code'.
Its value is
(ac-comphist-save bc-bookmarks-save save-place-kill-emacs-hook recentf-save-list)

kill-emacs-query-functions возвращает

kill-emacs-query-functions's value is (dictree-save-modified)

@Drew: настройка этих крючков выходит за рамки моих возможностей. Должен ли я прокомментировать элементы один за другим? Как? Еще раз спасибо.

emagar
источник
1
Как насчет того, чтобы запустить Emacs с кодом, вызывающим проблемы, и набрать M-x describe-variable RET kill-emacs-hook RETи посмотреть, есть ли какие-то вещи, прикрепленные к этому хуку, которые загружаются кодом, нарушающим работу. Возможно также проверьте, kill-emacs-query-functionsчто прикреплено к этому крюку. Вот ссылка на инструкции, описывающие использование этих крюков: gnu.org/software/emacs/manual/html_node/elisp/...
lawlist
+1 к предложению @ lawlist. Затем попробуйте удалить функции из этих двух хуков, по одному, чтобы увидеть, кто из них является / является виновником (ями). (И, возможно, вы можете немного урезать приведенный выше код - нужно ли вам все это, чтобы увидеть замедление?) Если вы знаете, какой код запускается при выходе из Emacs, это проблема, если неясно, что с этим делать тогда, пожалуйста, опубликуйте другой вопрос здесь или обновите этот с этой информацией.
Дрю
1
Перед выходом из Emacs попробуйте набрать: M-x eval-expression RET (remove-hook 'kill-emacs-hook 'ac-comphist-save) RET
lawlist
Благодарю. Я отредактировал вопрос, чтобы отразить совет @lawlist.
Emagar
1
Если Emacs завершит работу сразу после оценки (remove-hook 'kill-emacs-hook 'ac-comphist-save), тогда BINGO! Все, что вам нужно сделать, это найти (add-hook 'kill-emacs-hook 'ac-comphist-save)в файлах исходного кода и закомментировать его. Это, вероятно, в файле с именем auto-complete.el. Если у вас есть auto-complete.elcжелание и удалите его. Как только все работает к вашему удовольствию, вы можете скомпилировать новый с помощью байта M-x byte-compile . . .. Что касается вашего ispell, вы, вероятно, изменили его как-то. Вы можете удалить ispell.elc и байтово скомпилировать новый.
юрист

Ответы:

1

Проблема решена благодаря @lawlist, спасибо за ваше время и знания!

Если Emacs завершит работу сразу после оценки (remove-hook 'kill-emacs-hook 'ac-comphist-save), тогда BINGO! Все, что вам нужно сделать, это найти (add-hook 'kill-emacs-hook 'ac-comphist-save)в файлах исходного кода и закомментировать его. Это, вероятно, в файле с именем auto-complete.el. Если у вас есть auto-complete.elcжелание и удалите его. Как только все работает к вашему удовольствию, вы можете скомпилировать новый с помощью Mx byte-compile.

emagar
источник
1
Эта функция ac-comphist-saveотвечает за задержку, которую вы испытываете при выходе из Emacs. Эта функция прикреплена к функции kill-emacs-hook, которая срабатывает при выходе из Emacs. Комментируя (add-hook 'kill-emacs-hook 'ac-comphist-save), вы предотвращаете присоединение функции ac-comphist-saveк kill-emacs-hook. Если вы сейчас бежите M-x describe-variable RET kill-emacs-hook RET, вы должны увидеть, что ac-comphist-saveего больше нет. Если библиотека все еще поддерживается, вы можете отправить отчет об ошибке сопровождающему в будущем.
юрист